From cd2775c0f062f6737ad28128fe0a0ee654a80dad Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Thu, 1 Feb 2018 20:04:45 +0530 Subject: [PATCH 01/31] AdaBoost binding tests --- src/mlpack/tests/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mlpack/tests/CMakeLists.txt b/src/mlpack/tests/CMakeLists.txt index 89a02af421..2becc81cd4 100644 --- a/src/mlpack/tests/CMakeLists.txt +++ b/src/mlpack/tests/CMakeLists.txt @@ -125,6 +125,7 @@ add_executable(mlpack_test vantage_point_tree_test.cpp main_tests/test_helper.hpp main_tests/emst_test.cpp + main_tests/adaboost_test.cpp main_tests/decision_tree_test.cpp main_tests/decision_stump_test.cpp main_tests/linear_regression_test.cpp From 75c959442ccf3b740f843bb8db17989db83a5a09 Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Thu, 1 Feb 2018 20:05:49 +0530 Subject: [PATCH 02/31] AdaBoost binding tests --- src/mlpack/tests/main_tests/adaboost_test.cpp | 263 ++++++++++++++++++ 1 file changed, 263 insertions(+) create mode 100644 src/mlpack/tests/main_tests/adaboost_test.cpp diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp new file mode 100644 index 0000000000..c618c876bd --- /dev/null +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -0,0 +1,263 @@ +/** + * @file adaboost_test.cpp + * @author Nikhil Goel + * + * Test mlpackMain() of adaboost_main.cpp. + */ +#include + +#define BINDING_TYPE BINDING_TYPE_TEST +static const std::string testName = "AdaBoost"; + +#include +#include +#include "test_helper.hpp" +#include + +#include +#include "../test_tools.hpp" + +using namespace mlpack; + +struct AdaBoostTestFixture +{ + public: + AdaBoostTestFixture() + { + // Cache in the options for this program. + CLI::RestoreSettings(testName); + } + + ~AdaBoostTestFixture() + { + // Clear the settings. + CLI::ClearSettings(); + } +}; + +void ResetSetting() +{ + CLI::ClearSettings(); + CLI::RestoreSettings(testName); +} + +BOOST_FIXTURE_TEST_SUITE(AdaBoostMainTest, AdaBoostTestFixture); + +/** + * Check that number of output labels and number of input + * points are equal. + */ + +BOOST_AUTO_TEST_CASE(AdaBoostOutputDimensionTest) +{ + arma::mat trainData; + if (!data::Load("vc2.csv", trainData)) + BOOST_FAIL("Unable to load train dataset vc2.csv!"); + + arma::Row labels; + if (!data::Load("vc2_labels.txt", labels)) + BOOST_FAIL("Unable to load label dataset vc2_labels.txt!"); + + arma::mat testData; + if (!data::Load("vc2_test.csv", testData)) + BOOST_FAIL("Unable to load test dataset vc2.csv!"); + + size_t testSize = testData.n_cols; + + SetInputParam("training", std::move(trainData)); + SetInputParam("labels", std::move(labels)); + + SetInputParam("test", std::move(testData)); + + mlpackMain(); + + // Check that number of predicted labels is equal to the input test points. + BOOST_REQUIRE_EQUAL(CLI::GetParam>("output").n_cols, testSize); + BOOST_REQUIRE_EQUAL(CLI::GetParam>("output").n_rows, 1); +} + +/** + * Ensure that saved model can be used again. + */ +BOOST_AUTO_TEST_CASE(AdaBoostModelReuseTest) +{ + arma::mat trainData; + if (!data::Load("vc2.csv", trainData)) + BOOST_FAIL("Unable to load train dataset vc2.csv!"); + + arma::Row labels; + if (!data::Load("vc2_labels.txt", labels)) + BOOST_FAIL("Unable to load label dataset vc2_labels.txt!"); + + arma::mat testData; + if (!data::Load("vc2_test.csv", testData)) + BOOST_FAIL("Unable to load test dataset vc2.csv!"); + + SetInputParam("training", std::move(trainData)); + SetInputParam("labels", std::move(labels)); + + SetInputParam("test", std::move(testData)); + + mlpackMain(); + + arma::Row output; + output = std::move(CLI::GetParam>("output")); + + ResetSetting(); + + SetInputParam("test", std::move(testData)); + SetInputParam("input_model", std::move(CLI::GetParam("output_model"))); + + mlpackMain(); + + // Check that initial output and output using saved model are same. + CheckMatrices(output, CLI::GetParam>("output")); +} + +/** + * Test that iterations in adaboost is always non-negative. + */ +BOOST_AUTO_TEST_CASE(AdaBoostItrTest) +{ + arma::mat trainData; + if (!data::Load("trainSet.csv", trainData)) + BOOST_FAIL("Unable load train dataset trainSet.csv!"); + + SetInputParam("training", std::move(trainData)); + SetInputParam("iterations", (int) -1); + + Log::Fatal.ignoreInput = true; + BOOST_REQUIRE_THROW(mlpackMain(), std::runtime_error); + Log::Fatal.ignoreInput = false; +} + +/** + * Check that the last dimension of the training set is + * used as labels when labels are not passed specifically + * and results are same from both label and without label models. + */ +BOOST_AUTO_TEST_CASE(AdaBoostWithoutLabelTest) +{ + // Train adaboost without providing labels. + arma::mat trainData; + if (!data::Load("trainSet.csv", trainData)) + BOOST_FAIL("Unable to load train dataset trainSet.csv!"); + + // Give labels. + arma::Row labels(trainData.n_cols); + for (size_t i = 0; i < trainData.n_cols; ++i) + labels[i] = trainData(trainData.n_rows - 1, i); + + arma::mat testData; + if (!data::Load("testSet.csv", testData)) + BOOST_FAIL("Unable to load test dataset testSet.csv!"); + + // Delete the last row containing labels from test dataset. + testData.shed_row(testData.n_rows - 1); + + SetInputParam("training", trainData); + + SetInputParam("test", testData); + + mlpackMain(); + + ResetSetting(); + + trainData.shed_row(trainData.n_rows - 1); + + arma::Row output; + output = std::move(CLI::GetParam>("output")); + + // Now train Adaboost with labels provided. + SetInputParam("training", std::move(trainData)); + SetInputParam("test", std::move(testData)); + SetInputParam("labels", std::move(labels)); + + mlpackMain(); + + // Check that initial output and final output matrix are same. + CheckMatrices(output, CLI::GetParam>("output")); +} + +/** + * Testing that only one of training data or pre-trained model is passed. + */ +BOOST_AUTO_TEST_CASE(AdaBoostTrainingDataOrModelTest) +{ + arma::mat trainData; + if (!data::Load("trainSet.csv", trainData)) + BOOST_FAIL("Unable to load train dataset trainSet.csv!"); + + SetInputParam("training", std::move(trainData)); + + mlpackMain(); + + SetInputParam("input_model", std::move(CLI::GetParam("output_model"))); + + Log::Fatal.ignoreInput = true; + BOOST_REQUIRE_THROW(mlpackMain(), std::runtime_error); + Log::Fatal.ignoreInput = false; +} + +/** + * Weak learner should be either Decision Stump or Perceptron. + */ + +BOOST_AUTO_TEST_CASE(AdaBoostWeakLearnerTest) +{ + arma::mat trainData; + if (!data::Load("trainSet.csv", trainData)) + BOOST_FAIL("Unable to load train dataset trainSet.csv!"); + + SetInputParam("training", std::move(trainData)); + SetInputParam("weak_learner", std::string("decision tree")); + + Log::Fatal.ignoreInput = true; + BOOST_REQUIRE_THROW(mlpackMain(), std::runtime_error); + Log::Fatal.ignoreInput = false; +} + +/** + * Weak learner should be ignored if it is + * specified with an input model file. + */ +BOOST_AUTO_TEST_CASE(AdaBoostWeakLearnerIgnoredTest) +{ + arma::mat trainData; + if (!data::Load("vc2.csv", trainData)) + BOOST_FAIL("Unable to load train dataset vc2.csv!"); + + arma::Row labels; + if (!data::Load("vc2_labels.txt", labels)) + BOOST_FAIL("Unable to load label dataset vc2_labels.txt!"); + + arma::mat testData; + if (!data::Load("vc2_test.csv", testData)) + BOOST_FAIL("Unable to load test dataset vc2.csv!"); + + SetInputParam("training", std::move(trainData)); + SetInputParam("labels", std::move(labels)); + + SetInputParam("test", std::move(testData)); + + mlpackMain(); + + arma::Row output; + output = std::move(CLI::GetParam>("output")); + + ResetSetting(); + + // Default value is Decision Stump + SetInputParam("input_model", std::move(CLI::GetParam("output_model"))); + SetInputParam("weak_learner", std::string("perceptron")); + + const string weakLearner = CLI::GetParam("weak_learner"); + if (weakLearner == "perceptron") + { + Log::Fatal.ignoreInput = true; + BOOST_REQUIRE_THROW(mlpackMain(), std::runtime_error); + Log::Fatal.ignoreInput = false; + } +} + +BOOST_AUTO_TEST_SUITE_END(); From d97f0eca1b32ebbdfef82a0fb6190c0637dc4a31 Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Thu, 1 Feb 2018 20:18:55 +0530 Subject: [PATCH 03/31] Update for style check --- src/mlpack/tests/main_tests/adaboost_test.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index c618c876bd..173ac6d048 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -72,7 +72,8 @@ BOOST_AUTO_TEST_CASE(AdaBoostOutputDimensionTest) mlpackMain(); // Check that number of predicted labels is equal to the input test points. - BOOST_REQUIRE_EQUAL(CLI::GetParam>("output").n_cols, testSize); + BOOST_REQUIRE_EQUAL(CLI::GetParam>("output").n_cols, + testSize); BOOST_REQUIRE_EQUAL(CLI::GetParam>("output").n_rows, 1); } @@ -106,7 +107,8 @@ BOOST_AUTO_TEST_CASE(AdaBoostModelReuseTest) ResetSetting(); SetInputParam("test", std::move(testData)); - SetInputParam("input_model", std::move(CLI::GetParam("output_model"))); + SetInputParam("input_model", + std::move(CLI::GetParam("output_model"))); mlpackMain(); @@ -192,7 +194,8 @@ BOOST_AUTO_TEST_CASE(AdaBoostTrainingDataOrModelTest) mlpackMain(); - SetInputParam("input_model", std::move(CLI::GetParam("output_model"))); + SetInputParam("input_model", + std::move(CLI::GetParam("output_model"))); Log::Fatal.ignoreInput = true; BOOST_REQUIRE_THROW(mlpackMain(), std::runtime_error); @@ -248,7 +251,8 @@ BOOST_AUTO_TEST_CASE(AdaBoostWeakLearnerIgnoredTest) ResetSetting(); // Default value is Decision Stump - SetInputParam("input_model", std::move(CLI::GetParam("output_model"))); + SetInputParam("input_model", + std::move(CLI::GetParam("output_model"))); SetInputParam("weak_learner", std::string("perceptron")); const string weakLearner = CLI::GetParam("weak_learner"); From ed0ce0933383d27123864c18fa110926568b6ab5 Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Thu, 1 Feb 2018 20:21:45 +0530 Subject: [PATCH 04/31] Update for Style Checks --- src/mlpack/tests/main_tests/adaboost_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index 173ac6d048..bf4c3b93ba 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -72,7 +72,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostOutputDimensionTest) mlpackMain(); // Check that number of predicted labels is equal to the input test points. - BOOST_REQUIRE_EQUAL(CLI::GetParam>("output").n_cols, + BOOST_REQUIRE_EQUAL(CLI::GetParam>("output").n_cols, testSize); BOOST_REQUIRE_EQUAL(CLI::GetParam>("output").n_rows, 1); } From f66ca3c960ed1b1038246f88cff34696bb607078 Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Thu, 1 Feb 2018 22:03:00 +0530 Subject: [PATCH 05/31] Fixed segmentation error --- src/mlpack/tests/main_tests/adaboost_test.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index bf4c3b93ba..0b665f7a72 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -103,12 +103,13 @@ BOOST_AUTO_TEST_CASE(AdaBoostModelReuseTest) arma::Row output; output = std::move(CLI::GetParam>("output")); + AdaBoost model = CLI::GetParam("output_model"); ResetSetting(); SetInputParam("test", std::move(testData)); - SetInputParam("input_model", - std::move(CLI::GetParam("output_model"))); + SetInputParam("input_model", std::move(model)); + mlpackMain(); @@ -163,13 +164,13 @@ BOOST_AUTO_TEST_CASE(AdaBoostWithoutLabelTest) mlpackMain(); + arma::Row output; + output = std::move(CLI::GetParam>("output")); + ResetSetting(); trainData.shed_row(trainData.n_rows - 1); - arma::Row output; - output = std::move(CLI::GetParam>("output")); - // Now train Adaboost with labels provided. SetInputParam("training", std::move(trainData)); SetInputParam("test", std::move(testData)); @@ -246,13 +247,13 @@ BOOST_AUTO_TEST_CASE(AdaBoostWeakLearnerIgnoredTest) mlpackMain(); arma::Row output; + AdaBoost model = CLI::GetParam("output_model"); output = std::move(CLI::GetParam>("output")); ResetSetting(); // Default value is Decision Stump - SetInputParam("input_model", - std::move(CLI::GetParam("output_model"))); + SetInputParam("input_model", std::move(model)); SetInputParam("weak_learner", std::string("perceptron")); const string weakLearner = CLI::GetParam("weak_learner"); From d39748049a8c0f6a02e6ba8aa676aab1d7a9a982 Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Thu, 1 Feb 2018 22:04:41 +0530 Subject: [PATCH 06/31] Fixed Segmentation error From e7b9ff95ea4b2feaf8a794d3aefea6791b59f315 Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Thu, 1 Feb 2018 23:02:30 +0530 Subject: [PATCH 07/31] Fixed an error --- src/mlpack/tests/main_tests/adaboost_test.cpp | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index 0b665f7a72..b303d8aa6e 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -35,12 +35,6 @@ struct AdaBoostTestFixture } }; -void ResetSetting() -{ - CLI::ClearSettings(); - CLI::RestoreSettings(testName); -} - BOOST_FIXTURE_TEST_SUITE(AdaBoostMainTest, AdaBoostTestFixture); /** @@ -105,8 +99,9 @@ BOOST_AUTO_TEST_CASE(AdaBoostModelReuseTest) output = std::move(CLI::GetParam>("output")); AdaBoost model = CLI::GetParam("output_model"); - ResetSetting(); - + CLI::GetSingleton().Parameters()["training"].wasPassed = false; + CLI::GetSingleton().Parameters()["test"].wasPassed = false; + SetInputParam("test", std::move(testData)); SetInputParam("input_model", std::move(model)); @@ -167,8 +162,9 @@ BOOST_AUTO_TEST_CASE(AdaBoostWithoutLabelTest) arma::Row output; output = std::move(CLI::GetParam>("output")); - ResetSetting(); - + CLI::GetSingleton().Parameters()["training"].wasPassed = false; + CLI::GetSingleton().Parameters()["test"].wasPassed = false; + trainData.shed_row(trainData.n_rows - 1); // Now train Adaboost with labels provided. @@ -250,8 +246,9 @@ BOOST_AUTO_TEST_CASE(AdaBoostWeakLearnerIgnoredTest) AdaBoost model = CLI::GetParam("output_model"); output = std::move(CLI::GetParam>("output")); - ResetSetting(); - + CLI::GetSingleton().Parameters()["training"].wasPassed = false; + CLI::GetSingleton().Parameters()["test"].wasPassed = false; + // Default value is Decision Stump SetInputParam("input_model", std::move(model)); SetInputParam("weak_learner", std::string("perceptron")); From 283f1ee7ed25f9ecb56c332d1675960983b8616d Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Thu, 1 Feb 2018 23:05:46 +0530 Subject: [PATCH 08/31] Fixed style checks --- src/mlpack/tests/main_tests/adaboost_test.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index b303d8aa6e..6365a2c311 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -101,7 +101,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostModelReuseTest) CLI::GetSingleton().Parameters()["training"].wasPassed = false; CLI::GetSingleton().Parameters()["test"].wasPassed = false; - + SetInputParam("test", std::move(testData)); SetInputParam("input_model", std::move(model)); @@ -164,7 +164,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostWithoutLabelTest) CLI::GetSingleton().Parameters()["training"].wasPassed = false; CLI::GetSingleton().Parameters()["test"].wasPassed = false; - + trainData.shed_row(trainData.n_rows - 1); // Now train Adaboost with labels provided. @@ -248,7 +248,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostWeakLearnerIgnoredTest) CLI::GetSingleton().Parameters()["training"].wasPassed = false; CLI::GetSingleton().Parameters()["test"].wasPassed = false; - + // Default value is Decision Stump SetInputParam("input_model", std::move(model)); SetInputParam("weak_learner", std::string("perceptron")); From 326e2309a1fee2ce30a81b855da5c49707458c26 Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Fri, 2 Feb 2018 00:22:41 +0530 Subject: [PATCH 09/31] Fixed memory issues --- src/mlpack/tests/main_tests/adaboost_test.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index 6365a2c311..cfecf8fb42 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -97,14 +97,13 @@ BOOST_AUTO_TEST_CASE(AdaBoostModelReuseTest) arma::Row output; output = std::move(CLI::GetParam>("output")); - AdaBoost model = CLI::GetParam("output_model"); CLI::GetSingleton().Parameters()["training"].wasPassed = false; CLI::GetSingleton().Parameters()["test"].wasPassed = false; SetInputParam("test", std::move(testData)); - SetInputParam("input_model", std::move(model)); - + SetInputParam("input_model", + std::move(CLI::GetParam("output_model"))); mlpackMain(); @@ -159,6 +158,9 @@ BOOST_AUTO_TEST_CASE(AdaBoostWithoutLabelTest) mlpackMain(); + CLI::GetSingleton().Parameters()["training"].wasPassed = false; + CLI::GetSingleton().Parameters()["test"].wasPassed = false; + arma::Row output; output = std::move(CLI::GetParam>("output")); @@ -243,7 +245,6 @@ BOOST_AUTO_TEST_CASE(AdaBoostWeakLearnerIgnoredTest) mlpackMain(); arma::Row output; - AdaBoost model = CLI::GetParam("output_model"); output = std::move(CLI::GetParam>("output")); CLI::GetSingleton().Parameters()["training"].wasPassed = false; From 74afe2f0542b6792b553d77a8ef125ec9f37d9d4 Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Fri, 2 Feb 2018 00:34:46 +0530 Subject: [PATCH 10/31] Fixed static code --- src/mlpack/tests/main_tests/adaboost_test.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index cfecf8fb42..244c2c37b9 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -164,9 +164,6 @@ BOOST_AUTO_TEST_CASE(AdaBoostWithoutLabelTest) arma::Row output; output = std::move(CLI::GetParam>("output")); - CLI::GetSingleton().Parameters()["training"].wasPassed = false; - CLI::GetSingleton().Parameters()["test"].wasPassed = false; - trainData.shed_row(trainData.n_rows - 1); // Now train Adaboost with labels provided. From 8b01dc2050c1f452ecaccbcdc8eddc9af52de4eb Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Fri, 2 Feb 2018 00:44:39 +0530 Subject: [PATCH 11/31] Fixed memory leak --- src/mlpack/tests/main_tests/adaboost_test.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index 244c2c37b9..52d9ade607 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -248,7 +248,8 @@ BOOST_AUTO_TEST_CASE(AdaBoostWeakLearnerIgnoredTest) CLI::GetSingleton().Parameters()["test"].wasPassed = false; // Default value is Decision Stump - SetInputParam("input_model", std::move(model)); + SetInputParam("input_model", + std::move(CLI::GetParam("output_model"))); SetInputParam("weak_learner", std::string("perceptron")); const string weakLearner = CLI::GetParam("weak_learner"); From 090b2e429e271b1029c09f0c699a5992a25e8f4c Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Fri, 2 Feb 2018 02:14:43 +0530 Subject: [PATCH 12/31] Fixed a runtime error --- src/mlpack/tests/main_tests/adaboost_test.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index 52d9ade607..21f618dda6 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -241,17 +241,18 @@ BOOST_AUTO_TEST_CASE(AdaBoostWeakLearnerIgnoredTest) mlpackMain(); - arma::Row output; - output = std::move(CLI::GetParam>("output")); - CLI::GetSingleton().Parameters()["training"].wasPassed = false; CLI::GetSingleton().Parameters()["test"].wasPassed = false; + CLI::GetSingleton().Parameters()["weak_learner"].wasPassed = false; // Default value is Decision Stump SetInputParam("input_model", std::move(CLI::GetParam("output_model"))); + SetInputParam("test", std::move(testData)); SetInputParam("weak_learner", std::string("perceptron")); + mlpackMain(); + const string weakLearner = CLI::GetParam("weak_learner"); if (weakLearner == "perceptron") { From 21330f4aec520bb1a9d649ce164ab33a0006633e Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Fri, 2 Feb 2018 03:17:51 +0530 Subject: [PATCH 13/31] AdaBoost Binding test --- src/mlpack/tests/main_tests/adaboost_test.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index 21f618dda6..d1d824e03a 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -99,6 +99,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostModelReuseTest) output = std::move(CLI::GetParam>("output")); CLI::GetSingleton().Parameters()["training"].wasPassed = false; + CLI::GetSingleton().Parameters()["labels"].wasPassed = false; CLI::GetSingleton().Parameters()["test"].wasPassed = false; SetInputParam("test", std::move(testData)); @@ -243,6 +244,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostWeakLearnerIgnoredTest) CLI::GetSingleton().Parameters()["training"].wasPassed = false; CLI::GetSingleton().Parameters()["test"].wasPassed = false; + CLI::GetSingleton().Parameters()["labels"].wasPassed = false; CLI::GetSingleton().Parameters()["weak_learner"].wasPassed = false; // Default value is Decision Stump From 1693dadca3bab48e973155cdaa1e2c5ffd3f558b Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Fri, 2 Feb 2018 04:18:22 +0530 Subject: [PATCH 14/31] Adaboost binding test --- src/mlpack/tests/main_tests/adaboost_test.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index d1d824e03a..2006bb02b8 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -91,7 +91,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostModelReuseTest) SetInputParam("training", std::move(trainData)); SetInputParam("labels", std::move(labels)); - SetInputParam("test", std::move(testData)); + SetInputParam("test", testData); mlpackMain(); @@ -238,7 +238,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostWeakLearnerIgnoredTest) SetInputParam("training", std::move(trainData)); SetInputParam("labels", std::move(labels)); - SetInputParam("test", std::move(testData)); + SetInputParam("test", testData); mlpackMain(); From 0cbaaf3c0dcf43e2af10fcf4566dab5318d7b93d Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Mon, 5 Feb 2018 10:52:18 +0530 Subject: [PATCH 15/31] Added tests --- src/mlpack/tests/main_tests/adaboost_test.cpp | 168 ++++++++++++++++-- 1 file changed, 150 insertions(+), 18 deletions(-) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index 2006bb02b8..b39d93fe55 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -202,7 +202,6 @@ BOOST_AUTO_TEST_CASE(AdaBoostTrainingDataOrModelTest) /** * Weak learner should be either Decision Stump or Perceptron. */ - BOOST_AUTO_TEST_CASE(AdaBoostWeakLearnerTest) { arma::mat trainData; @@ -218,10 +217,9 @@ BOOST_AUTO_TEST_CASE(AdaBoostWeakLearnerTest) } /** - * Weak learner should be ignored if it is - * specified with an input model file. + * Different Weak learner should give different outputs. */ -BOOST_AUTO_TEST_CASE(AdaBoostWeakLearnerIgnoredTest) +BOOST_AUTO_TEST_CASE(AdaBoostDiffWeakLearnerOutputTest) { arma::mat trainData; if (!data::Load("vc2.csv", trainData)) @@ -242,26 +240,160 @@ BOOST_AUTO_TEST_CASE(AdaBoostWeakLearnerIgnoredTest) mlpackMain(); - CLI::GetSingleton().Parameters()["training"].wasPassed = false; - CLI::GetSingleton().Parameters()["test"].wasPassed = false; - CLI::GetSingleton().Parameters()["labels"].wasPassed = false; + arma::Row output; + output = std::move(CLI::GetParam>("output")); + CLI::GetSingleton().Parameters()["weak_learner"].wasPassed = false; - // Default value is Decision Stump - SetInputParam("input_model", - std::move(CLI::GetParam("output_model"))); - SetInputParam("test", std::move(testData)); SetInputParam("weak_learner", std::string("perceptron")); mlpackMain(); - const string weakLearner = CLI::GetParam("weak_learner"); - if (weakLearner == "perceptron") - { - Log::Fatal.ignoreInput = true; - BOOST_REQUIRE_THROW(mlpackMain(), std::runtime_error); - Log::Fatal.ignoreInput = false; - } + arma::Row outputPerceptron; + outputPerceptron = std::move(CLI::GetParam>("output")); + + CheckMatrices(output, outputPerceptron); +} + +/** + * Accuracy increases as Number of Iterations increases. + * (Or converges and remains same) + */ +BOOST_AUTO_TEST_CASE(AdaBoostDiffItrTest) +{ + arma::mat trainData; + if (!data::Load("vc2.csv", trainData)) + BOOST_FAIL("Unable to load train dataset vc2.csv!"); + + arma::Row labels; + if (!data::Load("vc2_labels.txt", labels)) + BOOST_FAIL("Unable to load label dataset vc2_labels.txt!"); + + arma::mat testData; + if (!data::Load("vc2_test.csv", testData)) + BOOST_FAIL("Unable to load test dataset vc2.csv!"); + + arma::Row testLabels; + if (!data::Load("vc2_test_labels.txt", testLabels)) + BOOST_FAIL("Unable to load labels for vc2__test_labels.txt"); + + //Iterations = 1 + SetInputParam("training", std::move(trainData)); + SetInputParam("labels", std::move(labels)); + SetInputParam("weak_learner", std::string("perceptron")); + SetInputParam("iterations", (int) 1); + + mlpackMain(); + + // Calculate accuracy. + arma::Row output; + CLI::GetParam("output_model").Classify(testData, + output); + + size_t correct = arma::accu(output == testLabels); + double accuracy1 = (double(correct) / double(testLabels.n_elem) * 100); + + //Iterations = 10 + SetInputParam("training", std::move(trainData)); + SetInputParam("labels", std::move(labels)); + SetInputParam("weak_learner", std::string("perceptron")); + SetInputParam("iterations", (int) 10); + + mlpackMain(); + + // Calculate accuracy. + CLI::GetParam("output_model").Classify(testData, + output); + + + correct = arma::accu(output == testLabels); + double accuracy10 = (double(correct) / double(testLabels.n_elem) * 100); + + //Iterations = 100 + SetInputParam("training", std::move(trainData)); + SetInputParam("labels", std::move(labels)); + SetInputParam("weak_learner", std::string("perceptron")); + SetInputParam("iterations", (int) 100); + + mlpackMain(); + + // Calculate accuracy. + CLI::GetParam("output_model").Classify(testData, + output); + + correct = arma::accu(output == testLabels); + double accuracy100 = (double(correct) / double(testLabels.n_elem) * 100); + + BOOST_REQUIRE(accuracy100 >= accuracy10 && accuracy10 >= accuracy1); +} + +/** + * Accuracy increases as tolerance decreases. + * (Execution Time also increases) + */ +BOOST_AUTO_TEST_CASE(AdaBoostDiffTolTest) +{ + arma::mat trainData; + if (!data::Load("vc2.csv", trainData)) + BOOST_FAIL("Unable to load train dataset vc2.csv!"); + + arma::Row labels; + if (!data::Load("vc2_labels.txt", labels)) + BOOST_FAIL("Unable to load label dataset vc2_labels.txt!"); + + arma::mat testData; + if (!data::Load("vc2_test.csv", testData)) + BOOST_FAIL("Unable to load test dataset vc2.csv!"); + + arma::Row testLabels; + if (!data::Load("vc2_test_labels.txt", testLabels)) + BOOST_FAIL("Unable to load labels for vc2__test_labels.txt"); + + //tolerance = 1e-5 + SetInputParam("training", std::move(trainData)); + SetInputParam("labels", std::move(labels)); + SetInputParam("tolerance", (double) 1e-5); + + mlpackMain(); + + // Calculate accuracy. + arma::Row output; + CLI::GetParam("output_model").Classify(testData, + output); + + size_t correct = arma::accu(output == testLabels); + double accuracy1 = (double(correct) / double(testLabels.n_elem) * 100); + + //Iterations = 0.1 + SetInputParam("training", std::move(trainData)); + SetInputParam("labels", std::move(labels)); + SetInputParam("tolerance", (double) 0.1); + + mlpackMain(); + + // Calculate accuracy. + CLI::GetParam("output_model").Classify(testData, + output); + + + correct = arma::accu(output == testLabels); + double accuracy2 = (double(correct) / double(testLabels.n_elem) * 100); + + //tolerance = 0.5 + SetInputParam("training", std::move(trainData)); + SetInputParam("labels", std::move(labels)); + SetInputParam("tolerance", (double) 0.5); + + mlpackMain(); + + // Calculate accuracy. + CLI::GetParam("output_model").Classify(testData, + output); + + correct = arma::accu(output == testLabels); + double accuracy3 = (double(correct) / double(testLabels.n_elem) * 100); + + BOOST_REQUIRE(accuracy1 >= accuracy2 && accuracy2 >= accuracy3); } BOOST_AUTO_TEST_SUITE_END(); From 8f33fd5145f454fc37ffdd78f5549b365699551e Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Mon, 5 Feb 2018 10:56:14 +0530 Subject: [PATCH 16/31] Fixed Style check --- src/mlpack/tests/main_tests/adaboost_test.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index b39d93fe55..fcf134aa05 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -277,7 +277,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffItrTest) if (!data::Load("vc2_test_labels.txt", testLabels)) BOOST_FAIL("Unable to load labels for vc2__test_labels.txt"); - //Iterations = 1 + // Iterations = 1 SetInputParam("training", std::move(trainData)); SetInputParam("labels", std::move(labels)); SetInputParam("weak_learner", std::string("perceptron")); @@ -293,7 +293,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffItrTest) size_t correct = arma::accu(output == testLabels); double accuracy1 = (double(correct) / double(testLabels.n_elem) * 100); - //Iterations = 10 + // Iterations = 10 SetInputParam("training", std::move(trainData)); SetInputParam("labels", std::move(labels)); SetInputParam("weak_learner", std::string("perceptron")); @@ -309,7 +309,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffItrTest) correct = arma::accu(output == testLabels); double accuracy10 = (double(correct) / double(testLabels.n_elem) * 100); - //Iterations = 100 + // Iterations = 100 SetInputParam("training", std::move(trainData)); SetInputParam("labels", std::move(labels)); SetInputParam("weak_learner", std::string("perceptron")); @@ -349,7 +349,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffTolTest) if (!data::Load("vc2_test_labels.txt", testLabels)) BOOST_FAIL("Unable to load labels for vc2__test_labels.txt"); - //tolerance = 1e-5 + // tolerance = 1e-5 SetInputParam("training", std::move(trainData)); SetInputParam("labels", std::move(labels)); SetInputParam("tolerance", (double) 1e-5); @@ -364,7 +364,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffTolTest) size_t correct = arma::accu(output == testLabels); double accuracy1 = (double(correct) / double(testLabels.n_elem) * 100); - //Iterations = 0.1 + // tolerance = 0.1 SetInputParam("training", std::move(trainData)); SetInputParam("labels", std::move(labels)); SetInputParam("tolerance", (double) 0.1); @@ -379,7 +379,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffTolTest) correct = arma::accu(output == testLabels); double accuracy2 = (double(correct) / double(testLabels.n_elem) * 100); - //tolerance = 0.5 + // tolerance = 0.5 SetInputParam("training", std::move(trainData)); SetInputParam("labels", std::move(labels)); SetInputParam("tolerance", (double) 0.5); From 6da6e662f216b8a80a2882fbdd3616623c37b083 Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Mon, 5 Feb 2018 12:48:02 +0530 Subject: [PATCH 17/31] Fixed an error --- src/mlpack/tests/main_tests/adaboost_test.cpp | 48 ++++++++++--------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index fcf134aa05..52c87ceee5 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -243,8 +243,6 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffWeakLearnerOutputTest) arma::Row output; output = std::move(CLI::GetParam>("output")); - CLI::GetSingleton().Parameters()["weak_learner"].wasPassed = false; - SetInputParam("weak_learner", std::string("perceptron")); mlpackMain(); @@ -252,7 +250,12 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffWeakLearnerOutputTest) arma::Row outputPerceptron; outputPerceptron = std::move(CLI::GetParam>("output")); - CheckMatrices(output, outputPerceptron); + for (size_t i = 0; i < output.n_elem; ++i) + if(output[i] != outputPerceptron[i]) + { + BOOST_REQUIRE_NE(output[i], outputPerceptron[i]); + break; + } } /** @@ -324,7 +327,8 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffItrTest) correct = arma::accu(output == testLabels); double accuracy100 = (double(correct) / double(testLabels.n_elem) * 100); - BOOST_REQUIRE(accuracy100 >= accuracy10 && accuracy10 >= accuracy1); + BOOST_REQUIRE_LE(accuracy1, accuracy10); + BOOST_REQUIRE_LE(accuracy10, accuracy100); } /** @@ -349,10 +353,10 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffTolTest) if (!data::Load("vc2_test_labels.txt", testLabels)) BOOST_FAIL("Unable to load labels for vc2__test_labels.txt"); - // tolerance = 1e-5 + // tolerance = 0.001 SetInputParam("training", std::move(trainData)); SetInputParam("labels", std::move(labels)); - SetInputParam("tolerance", (double) 1e-5); + SetInputParam("tolerance", (double) 0.001); mlpackMain(); @@ -364,6 +368,20 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffTolTest) size_t correct = arma::accu(output == testLabels); double accuracy1 = (double(correct) / double(testLabels.n_elem) * 100); + // tolerance = 0.01 + SetInputParam("training", std::move(trainData)); + SetInputParam("labels", std::move(labels)); + SetInputParam("tolerance", (double) 0.01); + + mlpackMain(); + + // Calculate accuracy. + CLI::GetParam("output_model").Classify(testData, + output); + + correct = arma::accu(output == testLabels); + double accuracy2 = (double(correct) / double(testLabels.n_elem) * 100); + // tolerance = 0.1 SetInputParam("training", std::move(trainData)); SetInputParam("labels", std::move(labels)); @@ -371,21 +389,6 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffTolTest) mlpackMain(); - // Calculate accuracy. - CLI::GetParam("output_model").Classify(testData, - output); - - - correct = arma::accu(output == testLabels); - double accuracy2 = (double(correct) / double(testLabels.n_elem) * 100); - - // tolerance = 0.5 - SetInputParam("training", std::move(trainData)); - SetInputParam("labels", std::move(labels)); - SetInputParam("tolerance", (double) 0.5); - - mlpackMain(); - // Calculate accuracy. CLI::GetParam("output_model").Classify(testData, output); @@ -393,7 +396,8 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffTolTest) correct = arma::accu(output == testLabels); double accuracy3 = (double(correct) / double(testLabels.n_elem) * 100); - BOOST_REQUIRE(accuracy1 >= accuracy2 && accuracy2 >= accuracy3); + BOOST_REQUIRE_LE(accuracy1, accuracy2); + BOOST_REQUIRE_LE(accuracy2, accuracy3); } BOOST_AUTO_TEST_SUITE_END(); From 2bc095e665678663cdc1b97644028da5a2590808 Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Mon, 5 Feb 2018 12:57:35 +0530 Subject: [PATCH 18/31] fixed style check error --- src/mlpack/tests/main_tests/adaboost_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index 52c87ceee5..912d561b34 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -251,7 +251,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffWeakLearnerOutputTest) outputPerceptron = std::move(CLI::GetParam>("output")); for (size_t i = 0; i < output.n_elem; ++i) - if(output[i] != outputPerceptron[i]) + if (output[i] != outputPerceptron[i]) { BOOST_REQUIRE_NE(output[i], outputPerceptron[i]); break; From 286ab59731432670a7d3503e6d49898caef6a0ac Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Mon, 5 Feb 2018 14:07:06 +0530 Subject: [PATCH 19/31] fixed memory error --- src/mlpack/tests/main_tests/adaboost_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index 912d561b34..3f09251297 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -250,7 +250,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffWeakLearnerOutputTest) arma::Row outputPerceptron; outputPerceptron = std::move(CLI::GetParam>("output")); - for (size_t i = 0; i < output.n_elem; ++i) + for (size_t i = 0; i < output.n_rows; ++i) if (output[i] != outputPerceptron[i]) { BOOST_REQUIRE_NE(output[i], outputPerceptron[i]); From b598bc8a810ac490bd6c3e06250bf3293f3d24c3 Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Mon, 5 Feb 2018 20:19:32 +0530 Subject: [PATCH 20/31] Fix for memory error --- src/mlpack/tests/main_tests/adaboost_test.cpp | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index 3f09251297..e7d28e4619 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -233,7 +233,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffWeakLearnerOutputTest) if (!data::Load("vc2_test.csv", testData)) BOOST_FAIL("Unable to load test dataset vc2.csv!"); - SetInputParam("training", std::move(trainData)); + SetInputParam("training", trainData); SetInputParam("labels", std::move(labels)); SetInputParam("test", testData); @@ -251,11 +251,13 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffWeakLearnerOutputTest) outputPerceptron = std::move(CLI::GetParam>("output")); for (size_t i = 0; i < output.n_rows; ++i) + { if (output[i] != outputPerceptron[i]) { BOOST_REQUIRE_NE(output[i], outputPerceptron[i]); break; } + } } /** @@ -281,8 +283,8 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffItrTest) BOOST_FAIL("Unable to load labels for vc2__test_labels.txt"); // Iterations = 1 - SetInputParam("training", std::move(trainData)); - SetInputParam("labels", std::move(labels)); + SetInputParam("training", trainData); + SetInputParam("labels", labels); SetInputParam("weak_learner", std::string("perceptron")); SetInputParam("iterations", (int) 1); @@ -297,8 +299,8 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffItrTest) double accuracy1 = (double(correct) / double(testLabels.n_elem) * 100); // Iterations = 10 - SetInputParam("training", std::move(trainData)); - SetInputParam("labels", std::move(labels)); + SetInputParam("training", trainData); + SetInputParam("labels", labels); SetInputParam("weak_learner", std::string("perceptron")); SetInputParam("iterations", (int) 10); @@ -313,8 +315,8 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffItrTest) double accuracy10 = (double(correct) / double(testLabels.n_elem) * 100); // Iterations = 100 - SetInputParam("training", std::move(trainData)); - SetInputParam("labels", std::move(labels)); + SetInputParam("training", trainData); + SetInputParam("labels", labels); SetInputParam("weak_learner", std::string("perceptron")); SetInputParam("iterations", (int) 100); @@ -354,8 +356,8 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffTolTest) BOOST_FAIL("Unable to load labels for vc2__test_labels.txt"); // tolerance = 0.001 - SetInputParam("training", std::move(trainData)); - SetInputParam("labels", std::move(labels)); + SetInputParam("training", trainData); + SetInputParam("labels", labels); SetInputParam("tolerance", (double) 0.001); mlpackMain(); @@ -369,8 +371,8 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffTolTest) double accuracy1 = (double(correct) / double(testLabels.n_elem) * 100); // tolerance = 0.01 - SetInputParam("training", std::move(trainData)); - SetInputParam("labels", std::move(labels)); + SetInputParam("training", trainData); + SetInputParam("labels", labels); SetInputParam("tolerance", (double) 0.01); mlpackMain(); @@ -383,8 +385,8 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffTolTest) double accuracy2 = (double(correct) / double(testLabels.n_elem) * 100); // tolerance = 0.1 - SetInputParam("training", std::move(trainData)); - SetInputParam("labels", std::move(labels)); + SetInputParam("training", trainData); + SetInputParam("labels", labels); SetInputParam("tolerance", (double) 0.1); mlpackMain(); From 9612890ed350c0fbb547424e9c88c676e3f5a747 Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Mon, 5 Feb 2018 20:58:58 +0530 Subject: [PATCH 21/31] Fixed an error --- src/mlpack/tests/main_tests/adaboost_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index e7d28e4619..90397fcc4b 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -250,7 +250,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffWeakLearnerOutputTest) arma::Row outputPerceptron; outputPerceptron = std::move(CLI::GetParam>("output")); - for (size_t i = 0; i < output.n_rows; ++i) + for (size_t i = 0; i < output.n_elem; ++i) { if (output[i] != outputPerceptron[i]) { From 94c07f903da4bc35dd25663cbef5febe11c9c4d7 Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Mon, 5 Feb 2018 22:00:45 +0530 Subject: [PATCH 22/31] Update to handle changes in #1214 --- src/mlpack/tests/main_tests/adaboost_test.cpp | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index 90397fcc4b..43848292d0 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -31,6 +31,7 @@ struct AdaBoostTestFixture ~AdaBoostTestFixture() { // Clear the settings. + bindings::tests::CleanMemory(); CLI::ClearSettings(); } }; @@ -104,7 +105,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostModelReuseTest) SetInputParam("test", std::move(testData)); SetInputParam("input_model", - std::move(CLI::GetParam("output_model"))); + CLI::GetParam("output_model")); mlpackMain(); @@ -165,6 +166,8 @@ BOOST_AUTO_TEST_CASE(AdaBoostWithoutLabelTest) arma::Row output; output = std::move(CLI::GetParam>("output")); + bindings::tests::CleanMemory(); + trainData.shed_row(trainData.n_rows - 1); // Now train Adaboost with labels provided. @@ -192,7 +195,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostTrainingDataOrModelTest) mlpackMain(); SetInputParam("input_model", - std::move(CLI::GetParam("output_model"))); + CLI::GetParam("output_model")); Log::Fatal.ignoreInput = true; BOOST_REQUIRE_THROW(mlpackMain(), std::runtime_error); @@ -234,7 +237,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffWeakLearnerOutputTest) BOOST_FAIL("Unable to load test dataset vc2.csv!"); SetInputParam("training", trainData); - SetInputParam("labels", std::move(labels)); + SetInputParam("labels", labels); SetInputParam("test", testData); @@ -243,6 +246,8 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffWeakLearnerOutputTest) arma::Row output; output = std::move(CLI::GetParam>("output")); + bindings::tests::CleanMemory(); + SetInputParam("weak_learner", std::string("perceptron")); mlpackMain(); @@ -292,12 +297,14 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffItrTest) // Calculate accuracy. arma::Row output; - CLI::GetParam("output_model").Classify(testData, + CLI::GetParam("output_model")->Classify(testData, output); size_t correct = arma::accu(output == testLabels); double accuracy1 = (double(correct) / double(testLabels.n_elem) * 100); + bindings::tests::CleanMemory(); + // Iterations = 10 SetInputParam("training", trainData); SetInputParam("labels", labels); @@ -307,13 +314,14 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffItrTest) mlpackMain(); // Calculate accuracy. - CLI::GetParam("output_model").Classify(testData, + CLI::GetParam("output_model")->Classify(testData, output); - correct = arma::accu(output == testLabels); double accuracy10 = (double(correct) / double(testLabels.n_elem) * 100); + bindings::tests::CleanMemory(); + // Iterations = 100 SetInputParam("training", trainData); SetInputParam("labels", labels); @@ -323,7 +331,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffItrTest) mlpackMain(); // Calculate accuracy. - CLI::GetParam("output_model").Classify(testData, + CLI::GetParam("output_model")->Classify(testData, output); correct = arma::accu(output == testLabels); @@ -364,12 +372,14 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffTolTest) // Calculate accuracy. arma::Row output; - CLI::GetParam("output_model").Classify(testData, + CLI::GetParam("output_model")->Classify(testData, output); size_t correct = arma::accu(output == testLabels); double accuracy1 = (double(correct) / double(testLabels.n_elem) * 100); + bindings::tests::CleanMemory(); + // tolerance = 0.01 SetInputParam("training", trainData); SetInputParam("labels", labels); @@ -378,12 +388,14 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffTolTest) mlpackMain(); // Calculate accuracy. - CLI::GetParam("output_model").Classify(testData, + CLI::GetParam("output_model")->Classify(testData, output); correct = arma::accu(output == testLabels); double accuracy2 = (double(correct) / double(testLabels.n_elem) * 100); + bindings::tests::CleanMemory(); + // tolerance = 0.1 SetInputParam("training", trainData); SetInputParam("labels", labels); @@ -392,7 +404,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffTolTest) mlpackMain(); // Calculate accuracy. - CLI::GetParam("output_model").Classify(testData, + CLI::GetParam("output_model")->Classify(testData, output); correct = arma::accu(output == testLabels); From 7444e2f27be7c37b945a65736432ed127baea7bd Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Mon, 5 Feb 2018 23:10:09 +0530 Subject: [PATCH 23/31] Fixed memory error --- src/mlpack/tests/main_tests/adaboost_test.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index 43848292d0..6e7da6dd95 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -238,7 +238,6 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffWeakLearnerOutputTest) SetInputParam("training", trainData); SetInputParam("labels", labels); - SetInputParam("test", testData); mlpackMain(); @@ -248,6 +247,13 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffWeakLearnerOutputTest) bindings::tests::CleanMemory(); + CLI::GetSingleton().Parameters()["training"].wasPassed = false; + CLI::GetSingleton().Parameters()["labels"].wasPassed = false; + CLI::GetSingleton().Parameters()["test"].wasPassed = false; + + SetInputParam("training", trainData); + SetInputParam("labels", labels); + SetInputParam("test", testData); SetInputParam("weak_learner", std::string("perceptron")); mlpackMain(); @@ -257,11 +263,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffWeakLearnerOutputTest) for (size_t i = 0; i < output.n_elem; ++i) { - if (output[i] != outputPerceptron[i]) - { BOOST_REQUIRE_NE(output[i], outputPerceptron[i]); - break; - } } } From daf80950bee3b0648b8b624f6c0cce6a8142cad7 Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Mon, 5 Feb 2018 23:37:31 +0530 Subject: [PATCH 24/31] fixed a logic error --- src/mlpack/tests/main_tests/adaboost_test.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index 6e7da6dd95..3391ee9e72 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -261,10 +261,18 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffWeakLearnerOutputTest) arma::Row outputPerceptron; outputPerceptron = std::move(CLI::GetParam>("output")); + int flag = 0; + for (size_t i = 0; i < output.n_elem; ++i) { - BOOST_REQUIRE_NE(output[i], outputPerceptron[i]); + if (output[i] != outputPerceptron[i]) + { + int flag = 1; + break; + } } + BOOST_REQUIRE_EQUAL(flag, 1) +} } /** From 6a0123c798b2a5d2d683dc9af3aa166bc5458281 Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Mon, 5 Feb 2018 23:41:08 +0530 Subject: [PATCH 25/31] Fixed an error --- src/mlpack/tests/main_tests/adaboost_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index 3391ee9e72..1c6075201f 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -271,7 +271,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffWeakLearnerOutputTest) break; } } - BOOST_REQUIRE_EQUAL(flag, 1) + BOOST_REQUIRE_EQUAL(flag, 1); } } From e138521300eea40931c1e4e9bb877bced5ee115c Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Mon, 5 Feb 2018 23:53:01 +0530 Subject: [PATCH 26/31] Fixed an error --- src/mlpack/tests/main_tests/adaboost_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index 1c6075201f..2f8d37fc6f 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -267,7 +267,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffWeakLearnerOutputTest) { if (output[i] != outputPerceptron[i]) { - int flag = 1; + flag = 1; break; } } From 32e138f1ff498bc5a65dcec9042cca67220a0f19 Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Tue, 6 Feb 2018 00:40:34 +0530 Subject: [PATCH 27/31] Fixed build error --- src/mlpack/tests/main_tests/adaboost_test.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index 2f8d37fc6f..d9832307db 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -273,7 +273,6 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffWeakLearnerOutputTest) } BOOST_REQUIRE_EQUAL(flag, 1); } -} /** * Accuracy increases as Number of Iterations increases. From 347f68155a960c2b99efb7530f7854efb167274a Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Tue, 6 Feb 2018 21:34:53 +0530 Subject: [PATCH 28/31] Added name and email --- COPYRIGHT.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt index b29dded095..79e41b787c 100644 --- a/COPYRIGHT.txt +++ b/COPYRIGHT.txt @@ -87,6 +87,7 @@ Copyright: Copyright 2017, Manish Kumar Copyright 2017, Haritha Sreedharan Nair Copyright 2017&2018, Sourabh Varshney + Copyright 2018, Nikhil Goel License: BSD-3-clause All rights reserved. From b860d6302da34cc5028c367830cacec76a406545 Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Tue, 6 Feb 2018 21:35:46 +0530 Subject: [PATCH 29/31] added name and email --- src/mlpack/core.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mlpack/core.hpp b/src/mlpack/core.hpp index 902f5b02d1..918421a6e7 100644 --- a/src/mlpack/core.hpp +++ b/src/mlpack/core.hpp @@ -230,6 +230,7 @@ * - Manish Kumar * - Haritha Sreedharan Nair * - Sourabh Varshney + * - Nikhil Goel */ // First, include all of the prerequisites. From a5a8abb098a98a17655b0bc5059b83d1e3177fcb Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Tue, 6 Feb 2018 21:37:37 +0530 Subject: [PATCH 30/31] Changed to a cleaner code --- src/mlpack/tests/main_tests/adaboost_test.cpp | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index d9832307db..25ca77f7fd 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -261,17 +261,7 @@ BOOST_AUTO_TEST_CASE(AdaBoostDiffWeakLearnerOutputTest) arma::Row outputPerceptron; outputPerceptron = std::move(CLI::GetParam>("output")); - int flag = 0; - - for (size_t i = 0; i < output.n_elem; ++i) - { - if (output[i] != outputPerceptron[i]) - { - flag = 1; - break; - } - } - BOOST_REQUIRE_EQUAL(flag, 1); + BOOST_REQUIRE_GT(arma::accu(output != outputPerceptron), 1); } /** From ad8e39143edf27637be9019f5a7f5e611e2daf88 Mon Sep 17 00:00:00 2001 From: nikhilgoel1997 Date: Wed, 7 Feb 2018 09:08:12 +0530 Subject: [PATCH 31/31] removed extra space --- src/mlpack/tests/main_tests/adaboost_test.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/mlpack/tests/main_tests/adaboost_test.cpp b/src/mlpack/tests/main_tests/adaboost_test.cpp index 25ca77f7fd..4d4a3e197a 100644 --- a/src/mlpack/tests/main_tests/adaboost_test.cpp +++ b/src/mlpack/tests/main_tests/adaboost_test.cpp @@ -42,7 +42,6 @@ BOOST_FIXTURE_TEST_SUITE(AdaBoostMainTest, AdaBoostTestFixture); * Check that number of output labels and number of input * points are equal. */ - BOOST_AUTO_TEST_CASE(AdaBoostOutputDimensionTest) { arma::mat trainData;