From 5c4efa08dbe2d8be85adf3b18f33ca82a9a41deb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana=20G=C3=B3mez?= Date: Thu, 7 Mar 2024 11:40:36 +0100 Subject: [PATCH] Add # models to ReportExcelCompared --- CMakeLists.txt | 2 +- lib/PyClassifiers | 2 +- lib/catch2 | 2 +- lib/libxlsxwriter | 2 +- src/CMakeLists.txt | 5 +++ src/reports/ReportExcelCompared.cc | 50 ++++++++++++++++++++++-------- 6 files changed, 46 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e708cc3..efe5d6a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.20) project(Platform - VERSION 1.0.2 + VERSION 1.0.4 DESCRIPTION "Platform to run Experiments with classifiers." HOMEPAGE_URL "https://github.com/rmontanana/platform" LANGUAGES CXX diff --git a/lib/PyClassifiers b/lib/PyClassifiers index 0608c0a..11ee490 160000 --- a/lib/PyClassifiers +++ b/lib/PyClassifiers @@ -1 +1 @@ -Subproject commit 0608c0a52a3cecdf6abd02138ccfe956ffe9ebef +Subproject commit 11ee490c1c0e8017dd9b53a68a4db6514bba43ad diff --git a/lib/catch2 b/lib/catch2 index ed6ac8a..8ac8190 160000 --- a/lib/catch2 +++ b/lib/catch2 @@ -1 +1 @@ -Subproject commit ed6ac8a629f9a4206575be784c1e340da2a94855 +Subproject commit 8ac8190e494a381072c89f5e161b92a08d98b37b diff --git a/lib/libxlsxwriter b/lib/libxlsxwriter index b0c76b3..f6d73b0 160000 --- a/lib/libxlsxwriter +++ b/lib/libxlsxwriter @@ -1 +1 @@ -Subproject commit b0c76b3396f32b2f1b53781a5caea084cadd94d3 +Subproject commit f6d73b0ae13de14e8f23afab76ee188d4b18e71d diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b928c5d..0d1bf56 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,6 +1,11 @@ include_directories( ## Libs ${Platform_SOURCE_DIR}/lib/PyClassifiers/lib/BayesNet/src + ${Platform_SOURCE_DIR}/lib/PyClassifiers/lib/BayesNet/src/classifiers + ${Platform_SOURCE_DIR}/lib/PyClassifiers/lib/BayesNet/src/ensembles + ${Platform_SOURCE_DIR}/lib/PyClassifiers/lib/BayesNet/src/bayesian_network + ${Platform_SOURCE_DIR}/lib/PyClassifiers/lib/BayesNet/src/feature_selection + ${Platform_SOURCE_DIR}/lib/PyClassifiers/lib/BayesNet/src/utils ${Platform_SOURCE_DIR}/lib/PyClassifiers/lib/BayesNet/lib/folding ${Platform_SOURCE_DIR}/lib/PyClassifiers/lib/BayesNet/lib/mdlp ${Platform_SOURCE_DIR}/lib/PyClassifiers/lib/BayesNet/lib/json/include diff --git a/src/reports/ReportExcelCompared.cc b/src/reports/ReportExcelCompared.cc index 5d3cbc1..686911e 100644 --- a/src/reports/ReportExcelCompared.cc +++ b/src/reports/ReportExcelCompared.cc @@ -29,20 +29,39 @@ namespace platform { } void ReportExcelCompared::header() { - worksheet_merge_range(worksheet, 0, 0, 0, 20, "Compare Results A vs B", styles["headerFirst"]); - worksheet_merge_range(worksheet, 1, 0, 1, 20, "Δ = (A - B) / B", styles["headerRest"]); + worksheet_merge_range(worksheet, 0, 0, 0, 23, "Compare Results A vs B", styles["headerFirst"]); + worksheet_merge_range(worksheet, 1, 0, 1, 23, "Δ = (A - B) / B", styles["headerRest"]); worksheet_freeze_panes(worksheet, 5, 1); } double diff(double a, double b) { return (a - b) / b; } + float compute_model_number(json& rA) + { + float result = 0; + int num = 0; + int models = 0; + bool average = false; + std::string str_models = "Number of models: "; + for (const std::string& note : rA["notes"]) { + std::size_t found = note.find(str_models); + if (found != std::string::npos) { + models += stoi(note.substr(found + str_models.size())); + num++; + average = true; + } + } + if (average) + result = models / num; + return result; + } void ReportExcelCompared::body() { // Body Header - auto sizes = std::vector({ 22, 10, 9, 7, 12, 12, 9, 12, 12, 9, 12, 12, 9, 12, 12, 9, 15, 15, 9, 15, 15 }); + auto sizes = std::vector({ 22, 10, 9, 7, 12, 12, 9, 12, 12, 9, 12, 12, 9, 12, 12, 9, 12, 12, 9, 15, 15, 9, 15, 15 }); auto head_a = std::vector({ "Dataset", "Samples", "Features", "Classes" }); - auto head_b = std::vector({ "Nodes", "Edges", "States", "Score", "Time" }); + auto head_b = std::vector({ "Models", "Nodes", "Edges", "States", "Score", "Time" }); int headerRow = 3; int col = 0; for (const auto& item : head_a) { @@ -68,15 +87,17 @@ namespace platform { row = headerRow + 2; int hypSize_A = 15; int hypSize_B = 15; - auto compared = std::vector({ "nodes", "leaves", "depth", "score", "time" }); + auto compared = std::vector({ "models", "nodes", "leaves", "depth", "score", "time" }); auto compared_data = std::vector(compared.size(), 0.0); auto totals_A = std::vector(compared.size(), 0.0); auto totals_B = std::vector(compared.size(), 0.0); std::string hyperparameters; for (int i = 0; i < data_A["results"].size(); i++) { col = 0; - const auto& r_A = data_A["results"][i]; - const auto& r_B = data_B["results"][i]; + auto& r_A = data_A["results"][i]; + auto& r_B = data_B["results"][i]; + r_A["models"] = compute_model_number(r_A); + r_B["models"] = compute_model_number(r_B); for (int j = 0; j < compared.size(); j++) { auto key = compared[j]; compared_data[j] = diff(r_A[key].get(), r_B[key].get()); @@ -87,21 +108,24 @@ namespace platform { writeInt(row, col++, r_A["samples"].get(), "ints"); writeInt(row, col++, r_A["features"].get(), "ints"); writeInt(row, col++, r_A["classes"].get(), "ints"); + writeDouble(row, col++, r_A["models"].get(), "floats"); + writeDouble(row, col++, r_B["models"].get(), "floats"); + writeDouble(row, col++, compared_data[0], "percentage"); writeDouble(row, col++, r_A["nodes"].get(), "floats"); writeDouble(row, col++, r_B["nodes"].get(), "floats"); - writeDouble(row, col++, compared_data[0], "percentage"); + writeDouble(row, col++, compared_data[1], "percentage"); writeDouble(row, col++, r_A["leaves"].get(), "floats"); writeDouble(row, col++, r_B["leaves"].get(), "floats"); - writeDouble(row, col++, compared_data[1], "percentage"); + writeDouble(row, col++, compared_data[2], "percentage"); writeDouble(row, col++, r_A["depth"].get(), "floats"); writeDouble(row, col++, r_B["depth"].get(), "floats"); - writeDouble(row, col++, compared_data[2], "percentage"); + writeDouble(row, col++, compared_data[3], "percentage"); writeDouble(row, col++, r_A["score"].get(), "result"); writeDouble(row, col++, r_B["score"].get(), "result"); - writeDouble(row, col++, compared_data[3], "percentage"); + writeDouble(row, col++, compared_data[4], "percentage"); writeDouble(row, col++, r_A["time"].get(), "time"); writeDouble(row, col++, r_B["time"].get(), "time"); - writeDouble(row, col++, compared_data[4], "percentage"); + writeDouble(row, col++, compared_data[5], "percentage"); hyperparameters = r_A["hyperparameters"].dump(); if (hyperparameters.size() > hypSize_A) { hypSize_A = hyperparameters.size(); @@ -123,7 +147,7 @@ namespace platform { void ReportExcelCompared::footer(std::vector& totals_A, std::vector& totals_B, int row) { worksheet_merge_range(worksheet, row, 0, row, 3, "Total", styles["bodyHeader_even"]); - auto formats = std::vector({ "floats", "floats", "floats", "result", "result" }); + auto formats = std::vector({ "floats", "floats", "floats", "floats", "result", "result" }); int col = 4; for (int i = 0; i < totals_A.size(); i++) { writeDouble(row, col++, totals_A[i], formats[i]);