From 8c61840d8121685d74eb15433fbc1b008900cd6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Monta=C3=B1ana=20G=C3=B3mez?= Date: Mon, 1 Apr 2024 11:51:29 +0200 Subject: [PATCH] Update tests --- .vscode/c_cpp_properties.json | 35 ++++++++++++++++++++++++++++-- tests/TestBayesModels.cc | 40 ++++++++--------------------------- 2 files changed, 42 insertions(+), 33 deletions(-) diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index 6faaf51..0201ede 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -3,7 +3,7 @@ { "name": "Mac", "includePath": [ - "${workspaceFolder}/**" + "/home/rmontanana/Code/BayesNet/**" ], "defines": [], "macFrameworkPath": [ @@ -11,7 +11,38 @@ ], "cStandard": "c17", "cppStandard": "c++17", - "compileCommands": "${workspaceFolder}/cmake-build-release/compile_commands.json" + "compileCommands": "/home/rmontanana/Code/BayesNet/cmake-build-release/compile_commands.json", + "compileCommandsInCppPropertiesJson": "${workspaceFolder}/cmake-build-release/compile_commands.json", + "intelliSenseMode": "macos-clang-arm64", + "mergeConfigurations": false, + "browse": { + "path": [ + "/home/rmontanana/Code/BayesNet/**", + "${workspaceFolder}" + ], + "limitSymbolsToIncludedHeaders": true + } + }, + { + "name": "Linux", + "includePath": [ + "/home/rmontanana/Code/BayesNet/**", + "/home/rmontanana/Code/libtorch/include/torch/csrc/api/include/" + ], + "defines": [], + "cStandard": "c17", + "cppStandard": "c++17", + "intelliSenseMode": "linux-gcc-x64", + "mergeConfigurations": false, + "compilerPath": "/usr/bin/g++", + "browse": { + "path": [ + "/home/rmontanana/Code/BayesNet/**", + "${workspaceFolder}" + ], + "limitSymbolsToIncludedHeaders": true + }, + "configurationProvider": "ms-vscode.cmake-tools" } ], "version": 4 diff --git a/tests/TestBayesModels.cc b/tests/TestBayesModels.cc index 58a773b..b8088ad 100644 --- a/tests/TestBayesModels.cc +++ b/tests/TestBayesModels.cc @@ -19,13 +19,13 @@ TEST_CASE("Test Bayesian Classifiers score & version", "[BayesNet]") { map , float> scores{ // Diabetes - {{"diabetes", "AODE"}, 0.811198}, {{"diabetes", "KDB"}, 0.852865}, {{"diabetes", "SPODE"}, 0.802083}, {{"diabetes", "TAN"}, 0.821615}, + {{"diabetes", "AODE"}, 0.82161}, {{"diabetes", "KDB"}, 0.852865}, {{"diabetes", "SPODE"}, 0.802083}, {{"diabetes", "TAN"}, 0.821615}, {{"diabetes", "AODELd"}, 0.8138f}, {{"diabetes", "KDBLd"}, 0.80208f}, {{"diabetes", "SPODELd"}, 0.78646f}, {{"diabetes", "TANLd"}, 0.8099f}, {{"diabetes", "BoostAODE"}, 0.83984f}, // Ecoli {{"ecoli", "AODE"}, 0.889881}, {{"ecoli", "KDB"}, 0.889881}, {{"ecoli", "SPODE"}, 0.880952}, {{"ecoli", "TAN"}, 0.892857}, {{"ecoli", "AODELd"}, 0.8869f}, {{"ecoli", "KDBLd"}, 0.875f}, {{"ecoli", "SPODELd"}, 0.84226f}, {{"ecoli", "TANLd"}, 0.86905f}, {{"ecoli", "BoostAODE"}, 0.89583f}, // Glass - {{"glass", "AODE"}, 0.78972}, {{"glass", "KDB"}, 0.827103}, {{"glass", "SPODE"}, 0.775701}, {{"glass", "TAN"}, 0.827103}, + {{"glass", "AODE"}, 0.79439}, {{"glass", "KDB"}, 0.827103}, {{"glass", "SPODE"}, 0.775701}, {{"glass", "TAN"}, 0.827103}, {{"glass", "AODELd"}, 0.79439f}, {{"glass", "KDBLd"}, 0.85047f}, {{"glass", "SPODELd"}, 0.79439f}, {{"glass", "TANLd"}, 0.86449f}, {{"glass", "BoostAODE"}, 0.84579f}, // Iris {{"iris", "AODE"}, 0.973333}, {{"iris", "KDB"}, 0.973333}, {{"iris", "SPODE"}, 0.973333}, {{"iris", "TAN"}, 0.973333}, @@ -49,7 +49,7 @@ TEST_CASE("Test Bayesian Classifiers score & version", "[BayesNet]") auto raw = RawDatasets(file_name, discretize); clf->fit(raw.Xt, raw.yt, raw.featurest, raw.classNamet, raw.statest); auto score = clf->score(raw.Xt, raw.yt); - INFO("File: " + file_name); + INFO("Classifier: " + name + " File: " + file_name); REQUIRE(score == Catch::Approx(scores[{file_name, name}]).epsilon(raw.epsilon)); } } @@ -106,20 +106,18 @@ TEST_CASE("BoostAODE test used features in train note and score", "[BayesNet]") clf.setHyperparameters({ {"order", "asc"}, {"convergence", true}, - {"repeatSparent",true}, {"select_features","CFS"}, }); clf.fit(raw.Xv, raw.yv, raw.featuresv, raw.classNamev, raw.statesv); REQUIRE(clf.getNumberOfNodes() == 72); REQUIRE(clf.getNumberOfEdges() == 120); - REQUIRE(clf.getNotes().size() == 3); + REQUIRE(clf.getNotes().size() == 2); REQUIRE(clf.getNotes()[0] == "Used features in initialization: 6 of 8 with CFS"); - REQUIRE(clf.getNotes()[1] == "Used features in train: 7 of 8"); - REQUIRE(clf.getNotes()[2] == "Number of models: 8"); + REQUIRE(clf.getNotes()[1] == "Number of models: 8"); auto score = clf.score(raw.Xv, raw.yv); auto scoret = clf.score(raw.Xt, raw.yt); - REQUIRE(score == Catch::Approx(0.8138).epsilon(raw.epsilon)); - REQUIRE(scoret == Catch::Approx(0.8138).epsilon(raw.epsilon)); + REQUIRE(score == Catch::Approx(0.82031).epsilon(raw.epsilon)); + REQUIRE(scoret == Catch::Approx(0.82031).epsilon(raw.epsilon)); } TEST_CASE("Model predict_proba", "[BayesNet]") { @@ -232,7 +230,7 @@ TEST_CASE("BoostAODE order asc, desc & random", "[BayesNet]") auto raw = RawDatasets("glass", true); std::map scores{ - {"asc", 0.83178f }, { "desc", 0.84579f }, { "rand", 0.83645f } + {"asc", 0.83645f }, { "desc", 0.84579f }, { "rand", 0.84112 } }; for (const std::string& order : { "asc", "desc", "rand" }) { auto clf = bayesnet::BoostAODE(); @@ -242,28 +240,8 @@ TEST_CASE("BoostAODE order asc, desc & random", "[BayesNet]") clf.fit(raw.Xv, raw.yv, raw.featuresv, raw.classNamev, raw.statesv); auto score = clf.score(raw.Xv, raw.yv); auto scoret = clf.score(raw.Xt, raw.yt); - INFO("order: " + order); + INFO("BoostAODE order: " + order); REQUIRE(score == Catch::Approx(scores[order]).epsilon(raw.epsilon)); REQUIRE(scoret == Catch::Approx(scores[order]).epsilon(raw.epsilon)); } } -TEST_CASE("BoostAODE predict_single", "[BayesNet]") -{ - - auto raw = RawDatasets("glass", true); - std::map scores{ - {true, 0.84579f }, { false, 0.80841f } - }; - for (const bool kind : { true, false}) { - auto clf = bayesnet::BoostAODE(); - clf.setHyperparameters({ - {"predict_single", kind}, {"order", "desc" }, - }); - clf.fit(raw.Xv, raw.yv, raw.featuresv, raw.classNamev, raw.statesv); - auto score = clf.score(raw.Xv, raw.yv); - auto scoret = clf.score(raw.Xt, raw.yt); - INFO("kind: " + std::string(kind ? "true" : "false")); - REQUIRE(score == Catch::Approx(scores[kind]).epsilon(raw.epsilon)); - REQUIRE(scoret == Catch::Approx(scores[kind]).epsilon(raw.epsilon)); - } -}