diff --git a/src/helper_files/helper.hpp b/src/helper_files/helper.hpp index 15dee9381356ed95961cd303c656f2e7db6c061e..63bb0256a5b52c5fb3774231fbc7e3763d4d288c 100644 --- a/src/helper_files/helper.hpp +++ b/src/helper_files/helper.hpp @@ -7,6 +7,9 @@ using namespace arma; using namespace mlpack; using namespace std; + +// conversion from arma datatypes to arrays usable by prolog + float *convertToArray(colvec vec); float *convertToArray(rowvec vec); @@ -24,12 +27,17 @@ float *convertToArray(Row<size_t> vec); float *convertToArray(vector<vec> vec); +// conversion from arrays to arma datatypes + rowvec convertArrayToRowvec(float *arr, int vecSize); Row<size_t> convertArrayToVec(float *arr, int vecSize); mat convertArrayToMat(float *arr, int vecSize, int rowCount); + +// insert the Vector and Matrix informations into the prolog Variables + void returnMatrixInformation(mat matrix, float **mat, SP_integer *matColNum, SP_integer *matRowNum); void returnMatrixInformation(Mat< size_t > matrix, float **mat, SP_integer *matColNum, SP_integer *matRowNum); diff --git a/src/methods/adaboost/adaboost_test.pl b/src/methods/adaboost/adaboost_test.pl index c00808081034ac579f83551f812ee1180117425c..a930b619e1509d05d05498da33abdf1ce9f23873 100644 --- a/src/methods/adaboost/adaboost_test.pl +++ b/src/methods/adaboost/adaboost_test.pl @@ -269,12 +269,12 @@ test(train_With_Bad_Labels_Too_Many_Classes, [error(_,system_error('The values o reset_Model_No_Train(perceptron), train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,2], 2, perceptron, 50, 0.0001, _). -test(train_With_Bad_Labels_Negative, [error(_,system_error('The values of the Label have to start at 0 and be >= 0 and < the given numClass!'))]) :- +test(train_With_Bad_Labels_Negative_Perceptron, [error(_,system_error('The values of the Label have to start at 0 and be >= 0 and < the given numClass!'))]) :- reset_Model_No_Train(perceptron), train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,-1,0,-1], 2, perceptron, 50, 0.0001, _). %% should cause an exeption but doesnt TODO: -test(train_With_Bad_Labels_Negative) :- +test(train_With_Bad_Labels_Negative_Decision_Stump) :- reset_Model_No_Train(decision_stump), train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,-1,0,-1], 2, decision_stump, 50, 0.0001, _). diff --git a/src/methods/approx_kfn/approx_kfn.cpp b/src/methods/approx_kfn/approx_kfn.cpp index fa198355b4e438b862c1f633b645fbeeeef39651..cc77858ef26f3bfb761776048e3f953a2d7de0c4 100644 --- a/src/methods/approx_kfn/approx_kfn.cpp +++ b/src/methods/approx_kfn/approx_kfn.cpp @@ -17,10 +17,10 @@ using namespace std; using namespace mlpack::neighbor; // Global Variable of the DrusillaSelect object so it can be accessed from all functions -DrusillaSelect<mat> drusillaSelect = DrusillaSelect(0,0); +DrusillaSelect<mat> drusillaSelect = DrusillaSelect(1,1); // Global Variable of the QDAFN object so it can be accessed from all functions -QDAFN<mat> qdafn = QDAFN(0,0); +QDAFN<mat> qdafn = QDAFN(1,1); // TODO: // input: const size_t l, @@ -62,7 +62,7 @@ void searchDrusilla(float *querySetMatArr, SP_integer querySetMatSize, SP_intege mat querySet = convertArrayToMat(querySetMatArr, querySetMatSize, querySetMatRowNum); // create the ReturnMat - Mat< size_t> neighborsReturnMat; + Mat< size_t > neighborsReturnMat; // create the ReturnMat mat distancesReturnMat; diff --git a/src/methods/approx_kfn/approx_kfn_test.pl b/src/methods/approx_kfn/approx_kfn_test.pl index e58694a63e55248763286a01431b1c595e3306e1..6e5d6df774d516d384c313dbf95ac8ff5b374fe8 100644 --- a/src/methods/approx_kfn/approx_kfn_test.pl +++ b/src/methods/approx_kfn/approx_kfn_test.pl @@ -1,3 +1,6 @@ + +:- module(approx_kfn_tests, [run_approx_kfn_tests/0]). + :- use_module(library(plunit)). :- use_module(approx_kfn). @@ -6,51 +9,36 @@ reset_Model :- initModel(1,0,50,0.0001). -:- begin_tests(lists). - -%% alpha tests -test(alpha_std_init) :- - reset_Model, - alpha(0). -test(alpha_wrong_input, fail) :- - reset_Model, - alpha(1). -test(alpha_after_train, A =:= 9223372036854775808) :- - reset_Model, - convert_list_to_float_array([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5],3, array(Xsize, Xrownum, X)), - convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)), - train(X,Xsize, Xrownum,Y, Ysize), - alpha(A). - -%% train tests -test(correct_train) :- - reset_Model, - convert_list_to_float_array([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5],3, array(Xsize, Xrownum, X)), - convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)), - train(X,Xsize, Xrownum,Y, Ysize). -test(false_train, fail) :- - reset_Model, - convert_list_to_float_array([],3, array(Xsize, Xrownum, X)), - convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)), - train(X,Xsize, Xrownum,Y, Ysize). -test(false_train2, fail) :- - reset_Model, - convert_list_to_float_array([],0, array(Xsize, Xrownum, X)), - convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)), - train(X,Xsize, Xrownum,Y, Ysize). -test(false_train3, fail) :- - reset_Model, - convert_list_to_float_array([1,2],0, array(Xsize, Xrownum, X)), - convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)), - train(X,Xsize, Xrownum,Y, Ysize). -test(false_train3, fail) :- - reset_Model, - convert_list_to_float_array([1,2,44,3],3, array(Xsize, Xrownum, X)), - convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)), - train(X,Xsize, Xrownum,Y, Ysize). -test(false_train4) :- - reset_Model, - convert_list_to_float_array([1,2,44,3],2, array(Xsize, Xrownum, X)), - convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)), - train(X,Xsize, Xrownum,Y, Ysize). -:- end_tests(lists). \ No newline at end of file +%% +%% TESTING predicate predicate/10 +%% +:- begin_tests(predicate). + +%% Failure Tests + +test(testDescription, [error(domain_error('expectation' , culprit), _)]) :- + reset_Model_No_Train(perceptron), + train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,0,0,0], 2, culprit, 50, 0.0001, _). + +test(testDescription2, [error(_,system_error('The values of the Label have to start at 0 and be >= 0 and < the given numClass!'))]) :- + reset_Model_No_Train(perceptron), + train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,2], 2, perceptron, 50, 0.0001, _). + + +%% Successful Tests + +test(testDescription3, [true(Error =:= 1)]) :- + reset_Model_No_Train(perceptron), + train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,0,0,0], 2, perceptron, 50, 0.0001, Error). + +test(testDescription4, [true(Error =:= 0.9797958971132711)]) :- + reset_Model_No_Train(perceptron), + open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,10, Data), + train(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, perceptron, 50, 0.0001, Error). + +:- end_tests(predicate). + +run_approx_kfn_tests :- + run_tests. + diff --git a/src/methods/bayesian_linear_regression/bayesian_linear_regression.cpp b/src/methods/bayesian_linear_regression/bayesian_linear_regression.cpp index 67751451be589f0547459a38a561a9ea3d92b95e..0dd644f52f06c304205c345d0f42f75b35af6f65 100644 --- a/src/methods/bayesian_linear_regression/bayesian_linear_regression.cpp +++ b/src/methods/bayesian_linear_regression/bayesian_linear_regression.cpp @@ -77,7 +77,8 @@ void omega(float **omegaArr, SP_integer *omegaArrSize) // input: const arma::mat &points, // arma::rowvec &predictions // output: -void predict(float *pointsMatArr, SP_integer pointsMatSize, SP_integer pointsMatRowNum, float **predictionsArr, SP_integer *predictionsArrSize) +void predict(float *pointsMatArr, SP_integer pointsMatSize, SP_integer pointsMatRowNum, + float **predictionsArr, SP_integer *predictionsArrSize) { // convert the Prolog array to arma::mat mat points = convertArrayToMat(pointsMatArr, pointsMatSize, pointsMatRowNum); @@ -86,8 +87,16 @@ void predict(float *pointsMatArr, SP_integer pointsMatSize, SP_integer pointsMat rowvec predictionsReturnVector; - // run the prediction and save the result in arma::rowvec - regressor.Predict(points, predictionsReturnVector); + try + { + // run the prediction and save the result in arma::rowvec + regressor.Predict(points, predictionsReturnVector); + } + catch(const std::exception& e) + { + raisePrologSystemExeption(e.what()); + return; + } // return the Vector @@ -98,7 +107,9 @@ void predict(float *pointsMatArr, SP_integer pointsMatSize, SP_integer pointsMat // arma::rowvec &predictions, // arma::rowvec &std // output: -void predictWithStd(float *pointsMatArr, SP_integer pointsMatSize, SP_integer pointsMatRowNum, float **predictionsArr, SP_integer *predictionsArrSize, float **stdArr, SP_integer *stdArrSize) +void predictWithStd(float *pointsMatArr, SP_integer pointsMatSize, SP_integer pointsMatRowNum, + float **predictionsArr, SP_integer *predictionsArrSize, + float **stdArr, SP_integer *stdArrSize) { // convert the Prolog array to arma::mat mat points = convertArrayToMat(pointsMatArr, pointsMatSize, pointsMatRowNum); @@ -108,8 +119,16 @@ void predictWithStd(float *pointsMatArr, SP_integer pointsMatSize, SP_integer po rowvec stdReturnVector; - // run the prediction and save the result in arma::rowvec - regressor.Predict(points, predictionsReturnVector, stdReturnVector); + try + { + // run the prediction and save the result in arma::rowvec + regressor.Predict(points, predictionsReturnVector, stdReturnVector); + } + catch(const std::exception& e) + { + raisePrologSystemExeption(e.what()); + return; + } // return the Vectors @@ -128,7 +147,8 @@ double responsesOffset() // input: const arma::mat & data, // const arma::rowvec & responses // output: double -double rmse(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum, float *responsesArr, SP_integer responsesArrSize) +double rmse(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum, + float *responsesArr, SP_integer responsesArrSize) { // convert the Prolog array to arma::mat mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum); @@ -137,14 +157,23 @@ double rmse(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum, rowvec responsesVector = convertArrayToRowvec(responsesArr, responsesArrSize); - // run the model function and return the error - return regressor.RMSE(data, responsesVector); + try + { + // run the model function and return the error + return regressor.RMSE(data, responsesVector); + } + catch(const std::exception& e) + { + raisePrologSystemExeption(e.what()); + return 0.0; + } } // input: const arma::mat & data, // const arma::rowvec & responses // output: -void train(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum, float *responsesArr, SP_integer responsesArrSize) +void train(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum, + float *responsesArr, SP_integer responsesArrSize) { if(dataMatSize / dataMatRowNum != responsesArrSize) { @@ -158,8 +187,16 @@ void train(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum, rowvec responsesVector = convertArrayToRowvec(responsesArr, responsesArrSize); - // run the model function - regressor.Train(data, responsesVector); + try + { + // run the model function + regressor.Train(data, responsesVector); + } + catch(const std::exception& e) + { + raisePrologSystemExeption(e.what()); + return; + } } // input: diff --git a/src/methods/bayesian_linear_regression/bayesian_linear_regression_test.pl b/src/methods/bayesian_linear_regression/bayesian_linear_regression_test.pl index b672360363a0148e11533598ab1472f3188b996c..86bb61e38bd6b9b5ae90d2c4c3cfef3e80fe320a 100644 --- a/src/methods/bayesian_linear_regression/bayesian_linear_regression_test.pl +++ b/src/methods/bayesian_linear_regression/bayesian_linear_regression_test.pl @@ -1,3 +1,6 @@ + +:- module(bayesian_linear_regression_tests, [run_bayesian_linear_regression_tests/0]). + :- use_module(library(plunit)). %%:- compile(bayesian_linear_regression). @@ -57,3 +60,37 @@ test(false_train4) :- convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)), train(X,Xsize, Xrownum,Y, Ysize). :- end_tests(lists). + +%% +%% TESTING predicate predicate/10 +%% +:- begin_tests(predicate). + +%% Failure Tests + +test(testDescription, [error(domain_error('expectation' , culprit), _)]) :- + reset_Model_No_Train(perceptron), + train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,0,0,0], 2, culprit, 50, 0.0001, _). + +test(testDescription2, [error(_,system_error('The values of the Label have to start at 0 and be >= 0 and < the given numClass!'))]) :- + reset_Model_No_Train(perceptron), + train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,2], 2, perceptron, 50, 0.0001, _). + + +%% Successful Tests + +test(testDescription3, [true(Error =:= 1)]) :- + reset_Model_No_Train(perceptron), + train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,0,0,0], 2, perceptron, 50, 0.0001, Error). + +test(testDescription4, [true(Error =:= 0.9797958971132711)]) :- + reset_Model_No_Train(perceptron), + open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,10, Data), + train(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, perceptron, 50, 0.0001, Error). + +:- end_tests(predicate). + +run_bayesian_linear_regression_tests :- + run_tests. + diff --git a/src/methods/hoeffding_tree/hoeffding_tree.cpp b/src/methods/hoeffding_tree/hoeffding_tree.cpp index 9e3326279b563ce1edef26054841e03850431264..cbe023a7ad80001679f2b5433b40a617bf6d14f8 100644 --- a/src/methods/hoeffding_tree/hoeffding_tree.cpp +++ b/src/methods/hoeffding_tree/hoeffding_tree.cpp @@ -17,6 +17,7 @@ using namespace mlpack::tree; // Global Variable of the HoeffdingTreeModel object so it can be accessed from all functions HoeffdingTreeModel hoeffdingTreeObj; +bool isModelInitialized = false; // input: const TreeType & type = GINI_HOEFFDING, @@ -48,18 +49,33 @@ void initAndBuildModel(char const *treeType, // convert the Prolog arrays to arma::rowvec Row< size_t > labelsVector = convertArrayToVec(labelsArr, labelsArrSize); - if (strcmp(treeType, "gini-hoeffding") == 0) + if (strcmp(treeType, "gini_hoeffding") == 0) hoeffdingTreeObj = HoeffdingTreeModel(HoeffdingTreeModel::GINI_HOEFFDING); - else if (strcmp(treeType, "gini-binary") == 0) + else if (strcmp(treeType, "gini_binary") == 0) hoeffdingTreeObj = HoeffdingTreeModel(HoeffdingTreeModel::GINI_BINARY); - else if (strcmp(treeType, "info-hoeffding") == 0) + else if (strcmp(treeType, "info_hoeffding") == 0) hoeffdingTreeObj = HoeffdingTreeModel(HoeffdingTreeModel::INFO_HOEFFDING); - else if (strcmp(treeType, "info-binary") == 0) + else if (strcmp(treeType, "info_binary") == 0) hoeffdingTreeObj = HoeffdingTreeModel(HoeffdingTreeModel::INFO_BINARY); else - cout << "wrong treeType input" << endl; + { + raisePrologDomainExeption(treeType, 1, "The given TreeType is unkown!", "initAndBuildModel"); + return; + } - hoeffdingTreeObj.BuildModel(data, data::DatasetInfo(data.n_rows), labelsVector, numClasses, (batchTraining == 1), successProbability, maxSamples, checkInterval, minSamples, bins, observationsBeforeBinning); + + try + { + hoeffdingTreeObj.BuildModel(data, data::DatasetInfo(data.n_rows), labelsVector, numClasses, (batchTraining == 1), successProbability, maxSamples, checkInterval, minSamples, bins, observationsBeforeBinning); + } + catch(const std::exception& e) + { + raisePrologSystemExeption(e.what()); + isModelInitialized = false; + return; + } + + isModelInitialized = true; } @@ -74,6 +90,12 @@ void classify(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNu float **predictArr, SP_integer *predictArrSize, float **probsArr, SP_integer *probsArrSize) { + if (!isModelInitialized) + { + raisePrologSystemExeption("The model is not initialized!"); + return; + } + // convert the Prolog arrays to arma::mat mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum); @@ -84,7 +106,15 @@ void classify(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNu rowvec probsReturnVector; - hoeffdingTreeObj.Classify(data, predictReturnVector, probsReturnVector); + try + { + hoeffdingTreeObj.Classify(data, predictReturnVector, probsReturnVector); + } + catch(const std::exception& e) + { + raisePrologSystemExeption(e.what()); + return; + } // return the Vector @@ -106,11 +136,26 @@ void train(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum, float *labelsArr, SP_integer labelsArrSize, SP_integer batchTraining) { + if (!isModelInitialized) + { + raisePrologSystemExeption("The model is not initialized!"); + return; + } + // convert the Prolog arrays to arma::mat mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum); // convert the Prolog arrays to arma::rowvec Row< size_t > labelsVector = convertArrayToVec(labelsArr, labelsArrSize); - hoeffdingTreeObj.Train(data, labelsVector, (batchTraining == 1)); + + try + { + hoeffdingTreeObj.Train(data, labelsVector, (batchTraining == 1)); + } + catch(const std::exception& e) + { + raisePrologSystemExeption("nice"); + return; + } } diff --git a/src/methods/hoeffding_tree/hoeffding_tree.pl b/src/methods/hoeffding_tree/hoeffding_tree.pl index 478e73107e48e31d6709dbd5ad32f5c032d5ea55..9996abf949b859e17cd512c35815ad195b001dab 100644 --- a/src/methods/hoeffding_tree/hoeffding_tree.pl +++ b/src/methods/hoeffding_tree/hoeffding_tree.pl @@ -20,7 +20,7 @@ %% --Input-- -%% string treeType => "gini-hoeffding", "gini-binary", "info-hoeffding", "info-binary", +%% string treeType => "gini_hoeffding", "gini_binary", "info_hoeffding", "info_binary", %% mat dataset, %% vec labels, %% int numClasses, @@ -43,6 +43,10 @@ initAndBuildModel(TreeType, DataList, DataRows, LabelsList, NumClasses, BatchTra SuccessProbability >= 0, SuccessProbability =< 1, MaxSamples >= 0, + CheckInterval > 0, + MinSamples >= 0, + Bins >= 0, + ObservationsBeforeBinning >= 0, convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(LabelsList, array(Ysize, Y)), initAndBuildModelI(TreeType, X, Xsize, Xrownum, Y, Ysize, NumClasses, BatchTraining, SuccessProbability, MaxSamples, CheckInterval, MinSamples, Bins, ObservationsBeforeBinning). diff --git a/src/methods/hoeffding_tree/hoeffding_tree_test.pl b/src/methods/hoeffding_tree/hoeffding_tree_test.pl index 20434461ef2cb7366126dc396eafdaa8ece3b5ed..a1dbaabe9963baa4481d4cae8982f2a3bb58faff 100644 --- a/src/methods/hoeffding_tree/hoeffding_tree_test.pl +++ b/src/methods/hoeffding_tree/hoeffding_tree_test.pl @@ -7,7 +7,9 @@ :- use_module('../../helper_files/helper.pl'). reset_Model :- - initAndBuildModel(1,0,50,0.0001). + open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,10, Data), + initAndBuildModel(gini_binary, Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0, 0.95, 5000, 100, 100, 10, 100). %% %% TESTING predicate initAndBuildModel/12 @@ -15,27 +17,84 @@ reset_Model :- :- begin_tests(initAndBuildModel). %% Failure Tests + +test(hoeffding_Init_Classify_Befor_Init, [error(_,system_error('The model is not initialized!'))]) :- + classify([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, _, _). -test(testDescription, [error(domain_error('expectation' , culprit), _)]) :- - reset_Model_No_Train(perceptron), - train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,0,0,0], 2, culprit, 50, 0.0001, _). +test(hoeffding_Init_Wrong_TreeType, [error(domain_error('The given TreeType is unkown!' , wrongType), _)]) :- + initAndBuildModel(wrongType, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,1], 2, 0, 0.95, 5000, 100, 100, 10, 100). + +test(hoeffding_Init_Negative_NumClass, fail) :- + initAndBuildModel(gini_binary, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,1], -2, 0, 0.95, 5000, 100, 100, 10, 100). + +test(hoeffding_Init_Bad_SuccessProbability, fail) :- + initAndBuildModel(gini_binary, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,1], 2, 0, -1.0, 5000, 100, 100, 10, 100), + initAndBuildModel(gini_binary, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,1], 2, 0, 2.0, 5000, 100, 100, 10, 100). + +test(hoeffding_Init_Negative_MaxSamples, fail) :- + initAndBuildModel(gini_binary, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,1], 2, 0, 0.95, -5000, 100, 100, 10, 100). + +test(hoeffding_Init_Negative_CheckInterval, fail) :- + initAndBuildModel(gini_binary, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,1], 2, 0, 0.95, 5000, -100, 100, 10, 100). + +test(hoeffding_Init_Negative_MinSamples, fail) :- + initAndBuildModel(gini_binary, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,1], 2, 0, 0.95, 5000, 100, -100, 10, 100). + +test(hoeffding_Init_Negative_Bins, fail) :- + initAndBuildModel(gini_binary, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,1], 2, 0, 0.95, 5000, 100, 100, -10, 100). + +test(hoeffding_Init_Negative_ObservationsBeforeBinning, fail) :- + initAndBuildModel(gini_binary, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,1], 2, 0, 0.95, 5000, 100, 100, 10, -100). -test(testDescription2, [error(_,system_error('The values of the Label have to start at 0 and be >= 0 and < the given numClass!'))]) :- - reset_Model_No_Train(perceptron), - train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,2], 2, perceptron, 50, 0.0001, _). + +test(hoeffding_Init_With_Wrong_Label_Dims1, [error(_,system_error('Labels Vector is too short or its values are incorrect: should fit into [0,numClasses)!'))]) :- + initAndBuildModel(gini_binary, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1], 2, 0, 0.95, 5000, 100, 100, 10, 100). + +%% If the label vector is to long it seems to cause no problems +test(hoeffding_Init_With_Wrong_Label_Dims2) :- + initAndBuildModel(gini_binary, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,1,0,0,1], 2, 0, 0.95, 5000, 100, 100, 10, 100). + +%% The same when the label values are out of range +test(hoeffding_Init_With_Wrong_Label_Value) :- + initAndBuildModel(gini_binary, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,-1,0,-1], 2, 0, 0.95, 5000, 100, 100, 10, 100). + +test(hoeffding_Init_With_Too_Many_Label_Value, [error(_,system_error('The values of the Label have to start at 0 and be >= 0 and < the given numClass!'))]) :- + initAndBuildModel(gini_binary, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [1,1,0,2], 2, 0, 0.95, 5000, 100, 100, 10, 100). %% Successful Tests -test(testDescription3, [true(Error =:= 1)]) :- - reset_Model_No_Train(perceptron), - train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,0,0,0], 2, perceptron, 50, 0.0001, Error). +test(hoeffding_Init_GiniHoeffding_Direkt_Input) :- + initAndBuildModel(gini_hoeffding, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,1], 2, 0, 0.95, 5000, 100, 100, 10, 100). + +test(hoeffding_Init_GiniHoeffding_CSV_Input) :- + open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,10, Data), + initAndBuildModel(gini_hoeffding, Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0, 0.95, 5000, 100, 100, 10, 100). + +test(hoeffding_Init_GiniBinary_Direkt_Input) :- + initAndBuildModel(gini_binary, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,1], 2, 0, 0.95, 5000, 100, 100, 10, 100). -test(testDescription4, [true(Error =:= 0.9797958971132711)]) :- - reset_Model_No_Train(perceptron), +test(hoeffding_Init_GiniBinary_CSV_Input) :- open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - train(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, perceptron, 50, 0.0001, Error). + initAndBuildModel(gini_binary, Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0, 0.95, 5000, 100, 100, 10, 100). + +test(hoeffding_Init_InfoHoeffding_Direkt_Input) :- + initAndBuildModel(info_hoeffding, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,1], 2, 0, 0.95, 5000, 100, 100, 10, 100). + +test(hoeffding_Init_InfoHoeffding_CSV_Input) :- + open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,10, Data), + initAndBuildModel(info_hoeffding, Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0, 0.95, 5000, 100, 100, 10, 100). + +test(hoeffding_Init_InfoBinary_Direkt_Input) :- + initAndBuildModel(info_binary, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,1], 2, 0, 0.95, 5000, 100, 100, 10, 100). + +test(hoeffding_Init_InfoBinary_CSV_Input) :- + open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,10, Data), + initAndBuildModel(info_binary, Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0, 0.95, 5000, 100, 100, 10, 100). :- end_tests(initAndBuildModel). @@ -47,26 +106,56 @@ test(testDescription4, [true(Error =:= 0.9797958971132711)]) :- %% Failure Tests -test(testDescription, [error(domain_error('expectation' , culprit), _)]) :- - reset_Model_No_Train(perceptron), - train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,0,0,0], 2, culprit, 50, 0.0001, _). - -test(testDescription2, [error(_,system_error('The values of the Label have to start at 0 and be >= 0 and < the given numClass!'))]) :- - reset_Model_No_Train(perceptron), - train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,2], 2, perceptron, 50, 0.0001, _). +test(hoeffding_Classify_Different_Dims_To_Train, [error(_,system_error('Labels Vector is too short or its values are incorrect: should fit into [0,numClasses)!'))]) :- + reset_Model, + classify([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, PredicList, ProbsList), + print('\nPredictions: '), + print(PredicList), + print('\nProbabilities: '), + print(ProbsList). %% Successful Tests -test(testDescription3, [true(Error =:= 1)]) :- - reset_Model_No_Train(perceptron), - train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,0,0,0], 2, perceptron, 50, 0.0001, Error). - -test(testDescription4, [true(Error =:= 0.9797958971132711)]) :- - reset_Model_No_Train(perceptron), +test(hoeffding_Classify_GiniHoeffding) :- + open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,10, Data), + initAndBuildModel(gini_hoeffding, Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0, 0.95, 5000, 100, 100, 10, 100), + classify([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, PredicList, ProbsList), + print('\nPredictions: '), + print(PredicList), + print('\nProbabilities: '), + print(ProbsList). + +test(hoeffding_Classify_GiniBinary) :- open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - train(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, perceptron, 50, 0.0001, Error). + initAndBuildModel(gini_binary, Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0, 0.95, 5000, 100, 100, 10, 100), + classify([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, PredicList, ProbsList), + print('\nPredictions: '), + print(PredicList), + print('\nProbabilities: '), + print(ProbsList). + +test(hoeffding_Classify_InfoHoeffding) :- + open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,10, Data), + initAndBuildModel(info_hoeffding, Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0, 0.95, 5000, 100, 100, 10, 100), + classify([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, PredicList, ProbsList), + print('\nPredictions: '), + print(PredicList), + print('\nProbabilities: '), + print(ProbsList). + +test(hoeffding_Classify_InfoBinary) :- + open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,10, Data), + initAndBuildModel(info_binary, Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0, 0.95, 5000, 100, 100, 10, 100), + classify([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, PredicList, ProbsList), + print('\nPredictions: '), + print(PredicList), + print('\nProbabilities: '), + print(ProbsList). :- end_tests(classify). @@ -78,29 +167,38 @@ test(testDescription4, [true(Error =:= 0.9797958971132711)]) :- %% Failure Tests -test(testDescription, [error(domain_error('expectation' , culprit), _)]) :- - reset_Model_No_Train(perceptron), - train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,0,0,0], 2, culprit, 50, 0.0001, _). - -test(testDescription2, [error(_,system_error('The values of the Label have to start at 0 and be >= 0 and < the given numClass!'))]) :- - reset_Model_No_Train(perceptron), - train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,2], 2, perceptron, 50, 0.0001, _). +test(hoeffding_Train_With_Wrong_Label_Dims1, [error(_,system_error('Labels Vector is too short or its values are incorrect: should fit into [0,numClasses)!'))]) :- + reset_Model, + train([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, [0,1,0,0,0], 0). + +%% If the label vector is to long it seems to cause no problems +test(hoeffding_Train_With_Wrong_Label_Dims2) :- + reset_Model, + train([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, [0,1,0,1,0,0,1], 0). + +%% The same when the label values are out of range +test(hoeffding_Train_With_Wrong_Label_Value) :- + reset_Model, + train([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, [0,-1,0,-1], 0). + +test(hoeffding_Train_With_Too_Many_Label_Value, [error(_,system_error('The values of the Label have to start at 0 and be >= 0 and < the given numClass!'))]) :- + reset_Model, + train([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, [1,1,0,2], 0). +test(hoeffding_Train_Bad_Data_Dims) :- + reset_Model, + train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,1], 0). -%% Successful Tests -test(testDescription3, [true(Error =:= 1)]) :- - reset_Model_No_Train(perceptron), - train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,0,0,0], 2, perceptron, 50, 0.0001, Error). +%% Successful Tests -test(testDescription4, [true(Error =:= 0.9797958971132711)]) :- - reset_Model_No_Train(perceptron), - open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), - take_csv_row(File, skipFirstRow,10, Data), - train(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, perceptron, 50, 0.0001, Error). +test(testDescription3) :- + reset_Model, + train([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, [0,0,1,1,0], 1), + train([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, [0,0,1,1,0], 0). :- end_tests(train). run_hoeffding_tree_tests :- - run_tests. + run_tests(train). diff --git a/src/methods/kde/kde.cpp b/src/methods/kde/kde.cpp index 6609138288d30f55d1049222e6103e5fc66689fb..9e10401e91f4dc11e938d00fce844554d72d1b03 100644 --- a/src/methods/kde/kde.cpp +++ b/src/methods/kde/kde.cpp @@ -67,21 +67,22 @@ void initAndBuildModel(double bandwidth, double relError, double absError, } else { - raisePrologSystemExeption("The given KernelType is unknown!"); + raisePrologDomainExeption(kernelType, 4, "The given KernelType is unknown!", "initAndBuildModel"); + return; } // select the treeType mlpack::kde::KDEModel::TreeTypes treeT; - if (strcmp(treeType, "kd-tree") == 0) + if (strcmp(treeType, "kd_tree") == 0) { treeT = KDEModel::KD_TREE; } - else if (strcmp(treeType, "ball-tree") == 0) + else if (strcmp(treeType, "ball_tree") == 0) { treeT = KDEModel::BALL_TREE; } - else if (strcmp(treeType, "cover-tree") == 0) + else if (strcmp(treeType, "cover_tree") == 0) { treeT = KDEModel::COVER_TREE; } @@ -89,42 +90,43 @@ void initAndBuildModel(double bandwidth, double relError, double absError, { treeT = KDEModel::OCTREE; } - else if (strcmp(treeType, "r-tree") == 0) + else if (strcmp(treeType, "r_tree") == 0) { treeT = KDEModel::R_TREE; } else { - raisePrologSystemExeption("The given TreeType is unknown!"); + raisePrologDomainExeption(treeType, 5, "The given TreeType is unknown!", "initAndBuildModel"); + return; } - - kdeModel = KDEModel(bandwidth, relError, absError, kernelT, treeT, (monteCarlo == 1), mcProb, initialSampleSize, mcEntryCoef, mcBreakCoef); + + try + { + kdeModel = KDEModel(bandwidth, relError, absError, kernelT, treeT, (monteCarlo == 1), mcProb, initialSampleSize, mcEntryCoef, mcBreakCoef); + kdeModel.BuildModel(move(reference)); + } + catch(const std::exception& e) + { + raisePrologSystemExeption(e.what()); + return; + } - if (strcmp(algorithm, "dual-tree") == 0) + if (strcmp(algorithm, "dual_tree") == 0) { KDEMode& mode = kdeModel.Mode(); mode = KDEMode::DUAL_TREE_MODE; } - else if (strcmp(algorithm, "single-tree") == 0) + else if (strcmp(algorithm, "single_tree") == 0) { KDEMode& mode = kdeModel.Mode(); mode = KDEMode::SINGLE_TREE_MODE; } else { - raisePrologSystemExeption("The given Algorithm is unknown!"); - } - - - try - { - kdeModel.BuildModel(move(reference)); - } - catch(const std::exception& e) - { - raisePrologSystemExeption(e.what()); + raisePrologDomainExeption(algorithm, 6, "The given Algorithm is unknown!", "initAndBuildModel"); + return; } } @@ -151,6 +153,7 @@ void evaluateWithQuery(float *querySetMatArr, SP_integer querySetMatSize, SP_int catch(const std::exception& e) { raisePrologSystemExeption(e.what()); + return; } @@ -178,6 +181,7 @@ void evaluateNoQuery(float **estimationsArr, SP_integer *estimationsArrSize) catch(const std::exception& e) { raisePrologSystemExeption(e.what()); + return; } diff --git a/src/methods/kde/kde_test.pl b/src/methods/kde/kde_test.pl index 991662cb5826b0f56210923192bb681d2c5260ff..ba0891761a995b3d8061aed24c7af077217e577b 100644 --- a/src/methods/kde/kde_test.pl +++ b/src/methods/kde/kde_test.pl @@ -7,98 +7,295 @@ :- use_module('../../helper_files/helper.pl'). reset_Model :- - initModel(1,0,50,0.0001). + initAndBuildModel(1.0, 0.05, 0.0, gaussian, kd_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). %% -%% TESTING predicate initAndBuildModel/10 +%% TESTING predicate initAndBuildModel/13 %% :- begin_tests(initAndBuildModel). %% Failure Tests - -test(testDescription, [error(domain_error('expectation' , culprit), _)]) :- - reset_Model_No_Train(perceptron), - train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,0,0,0], 2, culprit, 50, 0.0001, _). - -test(testDescription2, [error(_,system_error('The values of the Label have to start at 0 and be >= 0 and < the given numClass!'))]) :- - reset_Model_No_Train(perceptron), - train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,2], 2, perceptron, 50, 0.0001, _). + +%% only raises an exeption if the model hasnt been initilized once, so only after fully reseting the tests. +test(kde_EvaluateWithQuery_Befor_Init, [error(_, system_error('no KDE model initialized'))]) :- + evaluateWithQuery([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, _). + +%% only raises an exeption if the model hasnt been initilized once, so only after fully reseting the tests. +test(kde_EvaluateNoQuery_Befor_Init, [error(_, system_error('no KDE model initialized'))]) :- + evaluateNoQuery(_). + +test(kde_Init_Negative_Bandwidth, fail) :- + initAndBuildModel(-1.0, 0.05, 0.0, gaussian, kd_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Bad_RelError, fail) :- + initAndBuildModel(1.0, -0.05, 0.0, gaussian, kd_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 1.05, 0.0, gaussian, kd_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Negative_AbsError, fail) :- + initAndBuildModel(1.0, 0.05, -1.0, gaussian, kd_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Wrong_KernelType, [error(domain_error('The given KernelType is unknown!' , wrongType), _)]) :- + initAndBuildModel(1.0, 0.05, 0.0, wrongType, kd_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Wrong_TreeType, [error(domain_error('The given TreeType is unknown!' , wrongType), _)]) :- + initAndBuildModel(1.0, 0.05, 0.0, gaussian, wrongType, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Wrong_Algorithm, [error(domain_error('The given Algorithm is unknown!' , wrongType), _)]) :- + initAndBuildModel(1.0, 0.05, 0.0, gaussian, kd_tree, wrongType, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Bad_McProb, fail) :- + initAndBuildModel(1.0, 0.05, 0.0, gaussian, kd_tree, dual_tree, 0, -0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, gaussian, kd_tree, dual_tree, 0, 1.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Negative_InitialSampleSize, fail) :- + initAndBuildModel(1.0, 0.05, 0.0, gaussian, kd_tree, dual_tree, 0, 0.95, -100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Negative_MCEntryCoef, fail) :- + initAndBuildModel(1.0, 0.05, 0.0, gaussian, kd_tree, dual_tree, 0, 0.95, 100, 0.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Bad_MCBreakCoef, fail) :- + initAndBuildModel(1.0, 0.05, 0.0, gaussian, kd_tree, dual_tree, 0, 0.95, 100, 3.0, -0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, gaussian, kd_tree, dual_tree, 0, 0.95, 100, 3.0, 1.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). %% Successful Tests -test(testDescription3, [true(Error =:= 1)]) :- - reset_Model_No_Train(perceptron), - train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,0,0,0], 2, perceptron, 50, 0.0001, Error). +%% Gaussian Kernel +test(kde_Init_Gaussian_KDTREE) :- + initAndBuildModel(1.0, 0.05, 0.0, gaussian, kd_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, gaussian, kd_tree, single_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Gaussian_BALLTREE) :- + initAndBuildModel(1.0, 0.05, 0.0, gaussian, ball_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, gaussian, ball_tree, single_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Gaussian_COVERTREE) :- + initAndBuildModel(1.0, 0.05, 0.0, gaussian, cover_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, gaussian, cover_tree, single_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Gaussian_OCTREE) :- + initAndBuildModel(1.0, 0.05, 0.0, gaussian, octree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, gaussian, octree, single_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Gaussian_RTREE) :- + initAndBuildModel(1.0, 0.05, 0.0, gaussian, r_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, gaussian, r_tree, single_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + + + +%% Epanechnikov Kernel +test(kde_Init_Epanechnikov_KDTREE) :- + initAndBuildModel(1.0, 0.05, 0.0, epanechnikov, kd_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, epanechnikov, kd_tree, single_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Epanechnikov_BALLTREE) :- + initAndBuildModel(1.0, 0.05, 0.0, epanechnikov, ball_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, epanechnikov, ball_tree, single_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Epanechnikov_COVERTREE) :- + initAndBuildModel(1.0, 0.05, 0.0, epanechnikov, cover_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, epanechnikov, cover_tree, single_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Epanechnikov_OCTREE) :- + initAndBuildModel(1.0, 0.05, 0.0, epanechnikov, octree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, epanechnikov, octree, single_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Epanechnikov_RTREE) :- + initAndBuildModel(1.0, 0.05, 0.0, epanechnikov, r_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, epanechnikov, r_tree, single_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + -test(testDescription4, [true(Error =:= 0.9797958971132711)]) :- - reset_Model_No_Train(perceptron), + +%% Laplacian Kernel +test(kde_Init_Laplacian_KDTREE) :- + initAndBuildModel(1.0, 0.05, 0.0, laplacian, kd_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, laplacian, kd_tree, single_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Laplacian_BALLTREE) :- + initAndBuildModel(1.0, 0.05, 0.0, laplacian, ball_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, laplacian, ball_tree, single_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Laplacian_COVERTREE) :- + initAndBuildModel(1.0, 0.05, 0.0, laplacian, cover_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, laplacian, cover_tree, single_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Laplacian_OCTREE) :- + initAndBuildModel(1.0, 0.05, 0.0, laplacian, octree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, laplacian, octree, single_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Laplacian_RTREE) :- + initAndBuildModel(1.0, 0.05, 0.0, laplacian, r_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, laplacian, r_tree, single_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + + + +%% Spherical Kernel +test(kde_Init_Spherical_KDTREE) :- + initAndBuildModel(1.0, 0.05, 0.0, spherical, kd_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, spherical, kd_tree, single_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Spherical_BALLTREE) :- + initAndBuildModel(1.0, 0.05, 0.0, spherical, ball_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, spherical, ball_tree, single_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Spherical_COVERTREE) :- + initAndBuildModel(1.0, 0.05, 0.0, spherical, cover_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, spherical, cover_tree, single_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Spherical_OCTREE) :- + initAndBuildModel(1.0, 0.05, 0.0, spherical, octree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, spherical, octree, single_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Spherical_RTREE) :- + initAndBuildModel(1.0, 0.05, 0.0, spherical, r_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, spherical, r_tree, single_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + + +%% Triangular Kernel +test(kde_Init_Triangular_KDTREE) :- + initAndBuildModel(1.0, 0.05, 0.0, triangular, kd_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, triangular, kd_tree, single_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Triangular_BALLTREE) :- + initAndBuildModel(1.0, 0.05, 0.0, triangular, ball_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, triangular, ball_tree, single_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Triangular_COVERTREE) :- + initAndBuildModel(1.0, 0.05, 0.0, triangular, cover_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, triangular, cover_tree, single_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Triangular_OCTREE) :- + initAndBuildModel(1.0, 0.05, 0.0, triangular, octree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, triangular, octree, single_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + +test(kde_Init_Triangular_RTREE) :- + initAndBuildModel(1.0, 0.05, 0.0, triangular, r_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3), + initAndBuildModel(1.0, 0.05, 0.0, triangular, r_tree, single_tree, 0, 0.95, 100, 3.0, 0.4, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3). + + + +test(kde_Init_CSV_Input) :- open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - train(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, perceptron, 50, 0.0001, Error). + initAndBuildModel(2.2, 0.25, 0.5, gaussian, kd_tree, dual_tree, 1, 0.75, 50, 2.0, 0.2, + Data, 4). :- end_tests(initAndBuildModel). %% -%% TESTING predicate evaluateWithQuery/10 +%% TESTING predicate evaluateWithQuery/3 %% :- begin_tests(evaluateWithQuery). %% Failure Tests - -test(testDescription, [error(domain_error('expectation' , culprit), _)]) :- - reset_Model_No_Train(perceptron), - train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,0,0,0], 2, culprit, 50, 0.0001, _). - -test(testDescription2, [error(_,system_error('The values of the Label have to start at 0 and be >= 0 and < the given numClass!'))]) :- - reset_Model_No_Train(perceptron), - train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,2], 2, perceptron, 50, 0.0001, _). +test(kde_EvalWithQuery_Wrong_Query_Dims, [error(_, system_error('cannot evaluate KDE model: querySet and referenceSet dimensions don\'t match'))]) :- + reset_Model, + evaluateWithQuery([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, Estimation), + print('\nEstimation: '), + print(Estimation). %% Successful Tests -test(testDescription3, [true(Error =:= 1)]) :- - reset_Model_No_Train(perceptron), - train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,0,0,0], 2, perceptron, 50, 0.0001, Error). +test(kde_EvalWithQuery) :- + reset_Model, + evaluateWithQuery([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5], 3, Estimation), + print('\nEstimation: '), + print(Estimation). -test(testDescription4, [true(Error =:= 0.9797958971132711)]) :- - reset_Model_No_Train(perceptron), +test(kde_EvalWithQuery_CSV_Input) :- open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - train(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, perceptron, 50, 0.0001, Error). + initAndBuildModel(2.2, 0.25, 0.5, gaussian, kd_tree, dual_tree, 1, 0.75, 50, 2.0, 0.2, + Data, 4), + evaluateWithQuery([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, Estimation), + print('\nEstimation: '), + print(Estimation). :- end_tests(evaluateWithQuery). %% -%% TESTING predicate evaluateNoQuery/10 +%% TESTING predicate evaluateNoQuery/1 %% :- begin_tests(evaluateNoQuery). %% Failure Tests - -test(testDescription, [error(domain_error('expectation' , culprit), _)]) :- - reset_Model_No_Train(perceptron), - train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,0,0,0], 2, culprit, 50, 0.0001, _). - -test(testDescription2, [error(_,system_error('The values of the Label have to start at 0 and be >= 0 and < the given numClass!'))]) :- - reset_Model_No_Train(perceptron), - train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,2], 2, perceptron, 50, 0.0001, _). %% Successful Tests -test(testDescription3, [true(Error =:= 1)]) :- - reset_Model_No_Train(perceptron), - train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,0,0,0], 2, perceptron, 50, 0.0001, Error). - -test(testDescription4, [true(Error =:= 0.9797958971132711)]) :- - reset_Model_No_Train(perceptron), - open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), - take_csv_row(File, skipFirstRow,10, Data), - train(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, perceptron, 50, 0.0001, Error). +test(kde_EvalNoQuery) :- + reset_Model, + evaluateNoQuery(Estimation), + print('\nEstimation: '), + print(Estimation). :- end_tests(evaluateNoQuery). diff --git a/src/methods/kernel_pca/kernel_pca.cpp b/src/methods/kernel_pca/kernel_pca.cpp index 374ce418380e5698692dee6600a3f7d374f21bd3..65af3b53bb827fdf900fcd594c21e62b1067d09a 100644 --- a/src/methods/kernel_pca/kernel_pca.cpp +++ b/src/methods/kernel_pca/kernel_pca.cpp @@ -23,7 +23,7 @@ using namespace mlpack::kernel; template<typename KernelType> -void useNystroemKernelPCA(char const *nystroemMethod, KernelType kernel, bool centerTranformedData, mat data, mat transformedDataReturnMat, vec eigvalReturnVector, mat eigvecReturnMat, size_t returnDim) +bool useNystroemKernelPCA(char const *nystroemMethod, KernelType kernel, bool centerTranformedData, mat data, mat transformedDataReturnMat, vec eigvalReturnVector, mat eigvecReturnMat, size_t returnDim) { if (strcmp(nystroemMethod, "kmeans") == 0) { @@ -42,8 +42,10 @@ void useNystroemKernelPCA(char const *nystroemMethod, KernelType kernel, bool ce } else { - raisePrologDomainExeption(nystroemMethod, 4, "The given NystoemMethod is unkown!", "kernel_pca"); + raisePrologDomainExeption(nystroemMethod, 4, "The given NystroemMethod is unknown!", "kernel_pca"); + return false; } + return true; } // TODO: @@ -62,7 +64,7 @@ void kernel_pca(char const *kernel, SP_integer centerTranformedData, SP_integer float **transformedDataMatArr, SP_integer *transformedDataMatColNum, SP_integer *transformedDataMatRowNum, float **eigvalArr, SP_integer *eigvalArrSize, float **eigvecMatArr, SP_integer *eigvecMatColNum, SP_integer *eigvecMatRowNum, - SP_integer *newDimension) + SP_integer newDimension) { // convert the Prolog array to arma::mat mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum); @@ -75,20 +77,19 @@ void kernel_pca(char const *kernel, SP_integer centerTranformedData, SP_integer // create the ReturnMat mat eigvecReturnMat; - size_t returnDim = 0; - if (strcmp(kernel, "linear") == 0) { LinearKernel lk; if(useNystroem == 1) { - useNystroemKernelPCA<LinearKernel>(nystroemMethod, lk, (centerTranformedData == 1), data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, returnDim); + if(!useNystroemKernelPCA<LinearKernel>(nystroemMethod, lk, (centerTranformedData == 1), data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, newDimension)) + return; } else { - KernelPCA<LinearKernel, NaiveKernelRule<LinearKernel>>(lk, (centerTranformedData == 1)) - .Apply(data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, returnDim); + KernelPCA<LinearKernel>(lk, (centerTranformedData == 1)) + .Apply(data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, newDimension); } } else if (strcmp(kernel, "polynomial") == 0) @@ -96,12 +97,13 @@ void kernel_pca(char const *kernel, SP_integer centerTranformedData, SP_integer PolynomialKernel pk(degree, offset); if(useNystroem == 1) { - useNystroemKernelPCA<PolynomialKernel>(nystroemMethod, pk, (centerTranformedData == 1), data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, returnDim); + if(!useNystroemKernelPCA<PolynomialKernel>(nystroemMethod, pk, (centerTranformedData == 1), data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, newDimension)) + return; } else { - KernelPCA<PolynomialKernel, NaiveKernelRule<PolynomialKernel>>(pk, (centerTranformedData == 1)) - .Apply(data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, returnDim); + KernelPCA<PolynomialKernel>(pk, (centerTranformedData == 1)) + .Apply(data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, newDimension); } } else if (strcmp(kernel, "cosine") == 0) @@ -109,12 +111,13 @@ void kernel_pca(char const *kernel, SP_integer centerTranformedData, SP_integer CosineDistance cd; if(useNystroem == 1) { - useNystroemKernelPCA<CosineDistance>(nystroemMethod, cd, (centerTranformedData == 1), data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, returnDim); + if(!useNystroemKernelPCA<CosineDistance>(nystroemMethod, cd, (centerTranformedData == 1), data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, newDimension)) + return; } else { - KernelPCA<CosineDistance, NaiveKernelRule<CosineDistance>>(cd, (centerTranformedData == 1)) - .Apply(data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, returnDim); + KernelPCA<CosineDistance>(cd, (centerTranformedData == 1)) + .Apply(data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, newDimension); } } else if (strcmp(kernel, "gaussian") == 0) @@ -122,12 +125,13 @@ void kernel_pca(char const *kernel, SP_integer centerTranformedData, SP_integer GaussianKernel gk(bandwidth); if(useNystroem == 1) { - useNystroemKernelPCA<GaussianKernel>(nystroemMethod, gk, (centerTranformedData == 1), data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, returnDim); + if(!useNystroemKernelPCA<GaussianKernel>(nystroemMethod, gk, (centerTranformedData == 1), data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, newDimension)) + return; } else { - KernelPCA<GaussianKernel, NaiveKernelRule<GaussianKernel>>(gk, (centerTranformedData == 1)) - .Apply(data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, returnDim); + KernelPCA<GaussianKernel>(gk, (centerTranformedData == 1)) + .Apply(data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, newDimension); } } else if (strcmp(kernel, "epanechnikov") == 0) @@ -135,12 +139,13 @@ void kernel_pca(char const *kernel, SP_integer centerTranformedData, SP_integer EpanechnikovKernel ek(bandwidth); if(useNystroem == 1) { - useNystroemKernelPCA<EpanechnikovKernel>(nystroemMethod, ek, (centerTranformedData == 1), data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, returnDim); + if(!useNystroemKernelPCA<EpanechnikovKernel>(nystroemMethod, ek, (centerTranformedData == 1), data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, newDimension)) + return; } else { - KernelPCA<EpanechnikovKernel, NaiveKernelRule<EpanechnikovKernel>>(ek, (centerTranformedData == 1)) - .Apply(data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, returnDim); + KernelPCA<EpanechnikovKernel>(ek, (centerTranformedData == 1)) + .Apply(data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, newDimension); } } else if (strcmp(kernel, "laplacian") == 0) @@ -148,12 +153,13 @@ void kernel_pca(char const *kernel, SP_integer centerTranformedData, SP_integer LaplacianKernel tk(bandwidth); if(useNystroem == 1) { - useNystroemKernelPCA<LaplacianKernel>(nystroemMethod, tk, (centerTranformedData == 1), data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, returnDim); + if(!useNystroemKernelPCA<LaplacianKernel>(nystroemMethod, tk, (centerTranformedData == 1), data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, newDimension)) + return; } else { - KernelPCA<LaplacianKernel, NaiveKernelRule<LaplacianKernel>>(tk, (centerTranformedData == 1)) - .Apply(data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, returnDim); + KernelPCA<LaplacianKernel>(tk, (centerTranformedData == 1)) + .Apply(data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, newDimension); } } else if (strcmp(kernel, "hyptan") == 0) @@ -161,19 +167,35 @@ void kernel_pca(char const *kernel, SP_integer centerTranformedData, SP_integer HyperbolicTangentKernel htk(scale, offset); if(useNystroem == 1) { - useNystroemKernelPCA<HyperbolicTangentKernel>(nystroemMethod, htk, (centerTranformedData == 1), data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, returnDim); + if(!useNystroemKernelPCA<HyperbolicTangentKernel>(nystroemMethod, htk, (centerTranformedData == 1), data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, newDimension)) + return; } else { - KernelPCA<HyperbolicTangentKernel, NaiveKernelRule<HyperbolicTangentKernel>>(htk, (centerTranformedData == 1)) - .Apply(data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, returnDim); + KernelPCA<HyperbolicTangentKernel>(htk, (centerTranformedData == 1)) + .Apply(data, transformedDataReturnMat, eigvalReturnVector, eigvecReturnMat, newDimension); } } else { raisePrologDomainExeption(kernel, 1, "The given Kernel is unkown!", "kernel_pca"); + return; + } + + if (newDimension < eigvecReturnMat.n_rows && newDimension > 0 && !useNystroem) + transformedDataReturnMat.shed_rows(newDimension, transformedDataReturnMat.n_rows - 1); + else + { + transformedDataReturnMat.shed_rows(data.n_rows, transformedDataReturnMat.n_rows - 1); } + if(isnan(transformedDataReturnMat[0])) + { + raisePrologSystemExeption("Matrix contains nan!"); + return; + } + + // return the transformedData Matrix returnMatrixInformation(transformedDataReturnMat, transformedDataMatArr, transformedDataMatColNum, transformedDataMatRowNum); @@ -182,6 +204,4 @@ void kernel_pca(char const *kernel, SP_integer centerTranformedData, SP_integer // return the eigvec Matrix returnMatrixInformation(eigvecReturnMat, eigvecMatArr, eigvecMatColNum, eigvecMatRowNum); - - *newDimension = returnDim; -} \ No newline at end of file +} diff --git a/src/methods/kernel_pca/kernel_pca.pl b/src/methods/kernel_pca/kernel_pca.pl index 62772b73c2ea978dfe1c36d47a5d2b4e41985678..01a1c62f7af1e806edf43c94a85b11b25728bb32 100644 --- a/src/methods/kernel_pca/kernel_pca.pl +++ b/src/methods/kernel_pca/kernel_pca.pl @@ -43,6 +43,8 @@ kernel_pca(Kernel, CenterTransformedData, UseNystroem, NystroemMethod, Degree, O EigVecList, EigVecCols, NewDimension) :- Bandwidth > 0.0, + NewDimension >= 0, + Bandwidth =< DataRows, convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), kernel_pcaI(Kernel, CenterTransformedData, UseNystroem, NystroemMethod, Degree, Offset, Bandwidth, Scale, X, Xsize, Xrownum, @@ -60,7 +62,7 @@ foreign(kernel_pca, c, kernel_pcaI( +string, +integer, +integer, +string, -pointer(float_array), -integer, -integer, -pointer(float_array), -integer, -pointer(float_array), -integer, -integer, - -integer)). + +integer)). %% Defines the functions that get connected from main.cpp diff --git a/src/methods/kernel_pca/kernel_pca_test.pl b/src/methods/kernel_pca/kernel_pca_test.pl index 92735f99beb513796c6a0afef6e12b411e217689..f0c7864a9ff9c746e4749ead75fca94843bfe94e 100644 --- a/src/methods/kernel_pca/kernel_pca_test.pl +++ b/src/methods/kernel_pca/kernel_pca_test.pl @@ -6,8 +6,6 @@ :- use_module(kernel_pca). :- use_module('../../helper_files/helper.pl'). -reset_Model :- - initModel(1,0,50,0.0001). %% %% TESTING predicate kernel_pca/16 @@ -15,27 +13,167 @@ reset_Model :- :- begin_tests(kernel_pca). %% Failure Tests - -test(testDescription, [error(domain_error('expectation' , culprit), _)]) :- - reset_Model_No_Train(perceptron), - train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,0,0,0], 2, culprit, 50, 0.0001, _). - -test(testDescription2, [error(_,system_error('The values of the Label have to start at 0 and be >= 0 and < the given numClass!'))]) :- - reset_Model_No_Train(perceptron), - train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,2], 2, perceptron, 50, 0.0001, _). + + +test(kernel_pca_Init_Wrong_Kernel, [error(domain_error('The given Kernel is unkown!' , wrongType), _)]) :- + kernel_pca(wrongType, 0, 0, kmeans, 1.0, 0.0, 1.0, 1.0, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, _, _, _, _, _, 0). + +test(kernel_pca_Init_Wrong_NystroemMethod, [error(domain_error('The given NystroemMethod is unknown!' , wrongType), _)]) :- + kernel_pca(linear, 0, 1, wrongType, 1.0, 0.0, 1.0, 1.0, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, _, _, _, _, _, 0). + +test(kernel_pca_Zero_Bandwidth, fail) :- + kernel_pca(linear, 0, 0, kmeans, 1.0, 0.0, 0.0, 1.0, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, _, _, _, _, _, 0). %% Successful Tests -test(testDescription3, [true(Error =:= 1)]) :- - reset_Model_No_Train(perceptron), - train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,0,0,0], 2, perceptron, 50, 0.0001, Error). +test(kernel_pca_Linear_Random) :- + kernel_pca(linear, 0, 0, random, 1.0, 0.0, 1.0, 1.0, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, TransformedList, _, EigValList, EigVecList, _, 0), + print('\nTransformedData: '), + print(TransformedList), + print('\nEigenValues: '), + print(EigValList), + print('\nEigenVectors: '), + print(EigVecList). + +test(kernel_pca_Linear_Ordered) :- + kernel_pca(linear, 0, 0, ordered, 1.0, 0.0, 1.0, 1.0, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, TransformedList, _, EigValList, EigVecList, _, 0), + print('\nTransformedData: '), + print(TransformedList), + print('\nEigenValues: '), + print(EigValList), + print('\nEigenVectors: '), + print(EigVecList). + +test(kernel_pca_Linear_Kmeans) :- + kernel_pca(linear, 0, 0, kmeans, 1.0, 0.0, 1.0, 1.0, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, TransformedList, _, EigValList, EigVecList, _, 0), + print('\nTransformedData: '), + print(TransformedList), + print('\nEigenValues: '), + print(EigValList), + print('\nEigenVectors: '), + print(EigVecList). + +test(kernel_pca_Gaussian) :- + kernel_pca(gaussian, 0, 0, random, 1.0, 0.0, 1.0, 1.0, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, _, _, _, _, _, 0), + kernel_pca(gaussian, 0, 0, ordered, 1.0, 0.0, 1.0, 1.0, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, _, _, _, _, _, 0), + kernel_pca(gaussian, 0, 0, kmeans, 1.0, 0.0, 1.0, 1.0, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, TransformedList, _, EigValList, EigVecList, _, 0), + print('\nTransformedData: '), + print(TransformedList), + print('\nEigenValues: '), + print(EigValList), + print('\nEigenVectors: '), + print(EigVecList). + +test(kernel_pca_Polynomial) :- + kernel_pca(polynomial, 0, 0, random, 1.0, 0.0, 1.0, 1.0, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, _, _, _, _, _, 0), + kernel_pca(polynomial, 0, 0, ordered, 1.0, 0.0, 1.0, 1.0, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, _, _, _, _, _, 0), + kernel_pca(polynomial, 0, 0, kmeans, 1.0, 0.0, 1.0, 1.0, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, TransformedList, _, EigValList, EigVecList, _, 0), + print('\nTransformedData: '), + print(TransformedList), + print('\nEigenValues: '), + print(EigValList), + print('\nEigenVectors: '), + print(EigVecList). + +test(kernel_pca_Hyptan, [error(_, system_error('Matrix contains nan!'))]) :- + kernel_pca(hyptan, 0, 0, random, 1.0, 0.0, 1.0, 1.0, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, _, _, _, _, _, 0), + kernel_pca(hyptan, 0, 0, ordered, 1.0, 0.0, 1.0, 1.0, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, _, _, _, _, _, 0), + kernel_pca(hyptan, 0, 0, kmeans, 1.0, 0.0, 1.0, 1.0, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, TransformedList, _, EigValList, EigVecList, _, 0), + print('\nTransformedData: '), + print(TransformedList), + print('\nEigenValues: '), + print(EigValList), + print('\nEigenVectors: '), + print(EigVecList). + +test(kernel_pca_Laplacian) :- + kernel_pca(laplacian, 0, 0, random, 1.0, 0.0, 1.0, 1.0, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, _, _, _, _, _, 0), + kernel_pca(laplacian, 0, 0, ordered, 1.0, 0.0, 1.0, 1.0, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, _, _, _, _, _, 0), + kernel_pca(laplacian, 0, 0, kmeans, 1.0, 0.0, 1.0, 1.0, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, TransformedList, _, EigValList, EigVecList, _, 0), + print('\nTransformedData: '), + print(TransformedList), + print('\nEigenValues: '), + print(EigValList), + print('\nEigenVectors: '), + print(EigVecList). + +test(kernel_pca_Epanechnikov) :- + kernel_pca(epanechnikov, 0, 0, random, 1.0, 0.0, 1.0, 1.0, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, _, _, _, _, _, 0), + kernel_pca(epanechnikov, 0, 0, ordered, 1.0, 0.0, 1.0, 1.0, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, _, _, _, _, _, 0), + kernel_pca(epanechnikov, 0, 0, kmeans, 1.0, 0.0, 1.0, 1.0, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, TransformedList, _, EigValList, EigVecList, _, 0), + print('\nTransformedData: '), + print(TransformedList), + print('\nEigenValues: '), + print(EigValList), + print('\nEigenVectors: '), + print(EigVecList). + +test(kernel_pca_Cosine) :- + kernel_pca(cosine, 0, 0, random, 1.0, 0.0, 1.0, 1.0, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, _, _, _, _, _, 0), + kernel_pca(cosine, 0, 0, ordered, 1.0, 0.0, 1.0, 1.0, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, _, _, _, _, _, 0), + kernel_pca(cosine, 0, 0, kmeans, 1.0, 0.0, 1.0, 1.0, + [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, TransformedList, _, EigValList, EigVecList, _, 0), + print('\nTransformedData: '), + print(TransformedList), + print('\nEigenValues: '), + print(EigValList), + print('\nEigenVectors: '), + print(EigVecList). + + +test(kernel_pca_CSV_Input) :- + open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,10, Data), + kernel_pca(linear, 0, 0, kmeans, 1.0, 0.0, 1.0, 1.0, Data, 4, TransformedList, _, EigValList, EigVecList, _, 0), + print('\nTransformedData: '), + print(TransformedList), + print('\nEigenValues: '), + print(EigValList), + print('\nEigenVectors: '), + print(EigVecList). + +test(kernel_pca_CSV_Input_Same_NewDims) :- + open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,10, Data), + kernel_pca(linear, 0, 0, kmeans, 1.0, 0.0, 1.0, 1.0, Data, 4, TransformedList, _, EigValList, EigVecList, _, 4), + print('\nTransformedData: '), + print(TransformedList), + print('\nEigenValues: '), + print(EigValList), + print('\nEigenVectors: '), + print(EigVecList). -test(testDescription4, [true(Error =:= 0.9797958971132711)]) :- - reset_Model_No_Train(perceptron), +test(kernel_pca_CSV_Input_Smaller_NewDims) :- open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - train(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, perceptron, 50, 0.0001, Error). + kernel_pca(linear, 0, 0, kmeans, 1.0, 0.0, 1.0, 1.0, Data, 4, TransformedList, _, EigValList, EigVecList, _, 2), + print('\nTransformedData: '), + print(TransformedList), + print('\nEigenValues: '), + print(EigValList), + print('\nEigenVectors: '), + print(EigVecList). :- end_tests(kernel_pca). diff --git a/src/methods/lars/lars.cpp b/src/methods/lars/lars.cpp index 1528da25bcf07dc0f7d0fc8021375aad37fefc15..ee00d5030328aa99c5226fa7de65c3e59f9ae9d6 100644 --- a/src/methods/lars/lars.cpp +++ b/src/methods/lars/lars.cpp @@ -153,7 +153,7 @@ double computeError(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMa if(dataMatSize / dataMatRowNum != responsesArrSize) { cout << "Target dim doesnt fit to the Data dim" << endl; - return; + return 0.0; } // convert the Prolog array to arma::mat mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum); @@ -221,7 +221,7 @@ double train(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum if(dataMatSize / dataMatRowNum != responsesArrSize) { cout << "Target dim doesnt fit to the Data dim" << endl; - return; + return 0.0; } // convert the Prolog array to arma::mat mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum); @@ -239,4 +239,4 @@ double train(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum // return the Vector returnVectorInformation(betaReturnVector, betaArr, betaArrSize); return error; -} \ No newline at end of file +} diff --git a/test_all.pl b/test_all.pl index 2b45b697f29b8b36e5a08d19df96a9c9e7595ecb..57c8267d4ae62cda7872619ae5814985a9d7a1cd 100644 --- a/test_all.pl +++ b/test_all.pl @@ -1,9 +1,15 @@ +:- use_module(library(plunit)). + + +%% Just compile this file and call run_tests. to run every tests + + :- use_module('src/methods/adaboost/adaboost_test.pl'). -:- use_module('src/methods/approx_kfn/approx_kfn_test.pl'). +%%:- use_module('src/methods/approx_kfn/approx_kfn_test.pl'). -:- use_module('src/methods/bayesian_linear_regression/bayesian_linear_regression_test.pl'). +%%:- use_module('src/methods/bayesian_linear_regression/bayesian_linear_regression_test.pl'). :- use_module('src/methods/dbscan/dbscan_test.pl'). @@ -13,83 +19,53 @@ :- use_module('src/methods/fastmks/fastmks_test.pl'). -:- use_module('src/methods/hoeffding_tree/hoeffding_tree_test.pl'). +%%:- use_module('src/methods/hoeffding_tree/hoeffding_tree_test.pl'). :- use_module('src/methods/kde/kde_test.pl'). :- use_module('src/methods/kernel_pca/kernel_pca_test.pl'). -:- use_module('src/methods/kfn/kfn_test.pl'). +%%:- use_module('src/methods/kfn/kfn_test.pl'). -:- use_module('src/methods/kmeans/kmeans_test.pl'). +%%:- use_module('src/methods/kmeans/kmeans_test.pl'). -:- use_module('src/methods/knn/knn_test.pl'). +%%:- use_module('src/methods/knn/knn_test.pl'). -:- use_module('src/methods/lars/lars_test.pl'). +%%:- use_module('src/methods/lars/lars_test.pl'). -:- use_module('src/methods/linear_regression/linear_regression_test.pl'). +%%:- use_module('src/methods/linear_regression/linear_regression_test.pl'). -:- use_module('src/methods/linear_SVM/linear_SVM_test.pl'). +%%:- use_module('src/methods/linear_SVM/linear_SVM_test.pl'). -:- use_module('src/methods/lmnn/lmnn_test.pl'). +%%:- use_module('src/methods/lmnn/lmnn_test.pl'). -:- use_module('src/methods/local_coordinate_coding/local_coordinate_coding_test.pl'). +%%:- use_module('src/methods/local_coordinate_coding/local_coordinate_coding_test.pl'). -:- use_module('src/methods/logistic_regression/logistic_regression_test.pl'). +%%:- use_module('src/methods/logistic_regression/logistic_regression_test.pl'). -:- use_module('src/methods/lsh/lsh_test.pl'). +%%:- use_module('src/methods/lsh/lsh_test.pl'). -:- use_module('src/methods/mean_shift/mean_shift_test.pl'). +%%:- use_module('src/methods/mean_shift/mean_shift_test.pl'). -:- use_module('src/methods/naive_bayes_classifier/naive_bayes_classifier_test.pl'). +%%:- use_module('src/methods/naive_bayes_classifier/naive_bayes_classifier_test.pl'). -:- use_module('src/methods/nca/nca_test.pl'). +%%:- use_module('src/methods/nca/nca_test.pl'). -:- use_module('src/methods/nmf/nmf_test.pl'). +%%:- use_module('src/methods/nmf/nmf_test.pl'). -:- use_module('src/methods/pca/pca_test.pl'). +%%:- use_module('src/methods/pca/pca_test.pl'). -:- use_module('src/methods/perceptron/perceptron_test.pl'). +%%:- use_module('src/methods/perceptron/perceptron_test.pl'). -:- use_module('src/methods/radical/radical_test.pl'). +%%:- use_module('src/methods/radical/radical_test.pl'). -:- use_module('src/methods/random_forest/random_forest_test.pl'). +%%:- use_module('src/methods/random_forest/random_forest_test.pl'). -:- use_module('src/methods/softmax_regression/softmax_regression_test.pl'). +%%:- use_module('src/methods/softmax_regression/softmax_regression_test.pl'). -:- use_module('src/methods/sparse_coding/sparse_coding_test.pl'). +%% better to run the parse_coding tests alone because the c++ Method writes out alot of Debug messages that make the tests hard to read. +%%:- use_module('src/methods/sparse_coding/sparse_coding_test.pl'). :- use_module('src/helper_files/helper_tests.pl'). -run :- - run_adaboost_tests, - run_approx_kfn_tests, - run_bayesian_linear_regression_tests, - run_dbscan_tests, - run_decision_tree_tests, - run_emst_tests, - run_fastmks_tests, - run_hoeffding_tree_tests, - run_kde_tests, - run_kernel_pca_tests, - run_kfn_tests, - run_kmeans_tests, - run_knn_tests, - run_lars_tests, - run_linear_regression_tests, - run_linear_SVM_tests, - run_lmnn_tests, - run_local_coordinate_coding_tests, - run_logistic_regression_tests, - run_lsh_tests, - run_mean_shift_tests, - run_naive_bayes_classifier_tests, - run_nca_tests, - run_nmf_tests, - run_pca_tests, - run_perceptron_tests, - run_radical_tests, - run_random_forest_tests, - run_softmax_regression_tests, - run_sparse_coding_tests, - run_helper_tests. \ No newline at end of file +