From 194e8e1c693e2a82497e54c250ebc446239a022f Mon Sep 17 00:00:00 2001 From: Jakhes <dean.schmitz@schmitzbauer.de> Date: Wed, 9 Nov 2022 14:59:03 +0100 Subject: [PATCH] Changing Naming schema for the predicates --- src/methods/adaboost/adaboost.pl | 40 ++-- src/methods/adaboost/adaboost_test.pl | 179 ++++++++-------- .../bayesian_linear_regression.pl | 44 ++-- .../bayesian_linear_regression_test.pl | 196 +++++++++--------- src/methods/decision_tree/decision_tree.pl | 16 +- .../decision_tree/decision_tree_test.pl | 92 ++++---- src/methods/fastmks/fastmks.pl | 12 +- src/methods/fastmks/fastmks_test.pl | 56 ++--- src/methods/hoeffding_tree/hoeffding_tree.pl | 12 +- .../hoeffding_tree/hoeffding_tree_test.pl | 98 ++++----- src/methods/kde/kde.pl | 12 +- src/methods/kde/kde_test.pl | 158 +++++++------- src/methods/kernel_pca/kernel_pca.pl | 4 +- src/methods/kfn/kfn.pl | 12 +- src/methods/kfn/kfn_test.pl | 164 +++++++-------- src/methods/knn/knn.pl | 12 +- src/methods/knn/knn_test.pl | 178 ++++++++-------- src/methods/lars/lars.pl | 48 ++--- src/methods/lars/lars_test.pl | 14 +- src/methods/linear_SVM/linear_SVM.pl | 24 +-- src/methods/linear_SVM/linear_SVM_test.pl | 140 ++++++------- .../linear_regression/linear_regression.pl | 32 +-- .../local_coordinate_coding.pl | 24 +-- .../local_coordinate_coding_test.pl | 2 +- .../logistic_regression.pl | 28 +-- .../logistic_regression_test.pl | 2 +- src/methods/lsh/lsh.pl | 16 +- src/methods/lsh/lsh_test.pl | 66 +++--- .../naive_bayes_classifier.pl | 32 +-- .../naive_bayes_classifier_test.pl | 114 +++++----- src/methods/perceptron/perceptron.pl | 24 +-- src/methods/perceptron/perceptron_test.pl | 96 ++++----- src/methods/radical/radical.pl | 4 +- src/methods/radical/radical_test.pl | 18 +- src/methods/random_forest/random_forest.pl | 32 +-- .../random_forest/random_forest_test.pl | 156 +++++++------- .../softmax_regression/softmax_regression.pl | 32 +-- .../softmax_regression_test.pl | 148 ++++++------- src/methods/sparse_coding/sparse_coding.pl | 18 +- .../sparse_coding/sparse_coding_test.pl | 82 ++++---- 40 files changed, 1219 insertions(+), 1218 deletions(-) diff --git a/src/methods/adaboost/adaboost.pl b/src/methods/adaboost/adaboost.pl index f7416a9..a12de42 100644 --- a/src/methods/adaboost/adaboost.pl +++ b/src/methods/adaboost/adaboost.pl @@ -1,11 +1,11 @@ -:- module(adaboost, [ initModelWithTraining/7, - initModelNoTraining/2, - classify/5, - numClasses/1, - getTolerance/1, - modifyTolerance/1, - train/8]). +:- module(adaboost, [ adaboost_initModelWithTraining/7, + adaboost_initModelNoTraining/2, + adaboost_classify/5, + adaboost_numClasses/1, + adaboost_getTolerance/1, + adaboost_modifyTolerance/1, + adaboost_train/8]). %% requirements of library(struct) :- load_files(library(str_decl), @@ -38,7 +38,7 @@ %% %% Initiates the Adaboostmodel and trains it, so classify can be used immediately. %% -initModelWithTraining(MatList, MatRows, VecList, NumClasses, Learner, Iterations, Tolerance) :- +adaboost_initModelWithTraining(MatList, MatRows, VecList, NumClasses, Learner, Iterations, Tolerance) :- NumClasses >= 0, Iterations >= 0, Tolerance > 0, @@ -46,11 +46,11 @@ initModelWithTraining(MatList, MatRows, VecList, NumClasses, Learner, Iterations convert_list_to_float_array(VecList, array(Ysize, Y)), initModelWithTrainingI(X, Xsize, Xrownum, Y, Ysize, NumClasses, Learner, Iterations, Tolerance). -foreign(initModelWithTraining, c, initModelWithTrainingI(+pointer(float_array), +integer, +integer, - +pointer(float_array), +integer, - +integer, - +string, - +integer , +float32)). +foreign(initModelWithTraining, c, initModelWithTrainingI( +pointer(float_array), +integer, +integer, + +pointer(float_array), +integer, + +integer, + +string, + +integer , +float32)). @@ -64,7 +64,7 @@ foreign(initModelWithTraining, c, initModelWithTrainingI(+pointer(float_array), %% Needs to be called first before all other predicates exept initModelWithTraining! %% Initiates the Adaboostmodel but doesnt train it, so train has to be used first before classify can be used. %% -initModelNoTraining(Tolerance, Learner) :- +adaboost_initModelNoTraining(Tolerance, Learner) :- Tolerance > 0, initModelNoTrainingI(Tolerance, Learner). @@ -81,7 +81,7 @@ foreign(initModelNoTraining, c, initModelNoTrainingI(+float32, +string)). %% --Description-- %% Classifies the given data into the number of classes the model was trained for. %% -classify(TestList, TestRows, PredicList, ProbsList, ZRows) :- +adaboost_classify(TestList, TestRows, PredicList, ProbsList, ZRows) :- convert_list_to_float_array(TestList, TestRows, array(Xsize, Xrownum, X)), classifyI(X, Xsize, Xrownum, Y, Ysize, Z, ZCols, ZRows), convert_float_array_to_list(Y, Ysize, PredicList), @@ -102,7 +102,7 @@ foreign(classify, c, classifyI( +pointer(float_array), +integer, +integer, %% --Description-- %% Returns the amount of classes defined in the model for classification. %% -numClasses(ClassesNum) :- +adaboost_numClasses(ClassesNum) :- numClassesI(ClassesNum). foreign(numClasses, c, numClassesI([-integer])). @@ -116,7 +116,7 @@ foreign(numClasses, c, numClassesI([-integer])). %% --Description-- %% Returns the tolerance of the model. %% -getTolerance(Tolerance) :- +adaboost_getTolerance(Tolerance) :- getToleranceI(Tolerance). foreign(getTolerance, c, getToleranceI([-float32])). @@ -130,7 +130,7 @@ foreign(getTolerance, c, getToleranceI([-float32])). %% --Description-- %% Modifies the tolerance of the model. %% -modifyTolerance(NewTolerance) :- +adaboost_modifyTolerance(NewTolerance) :- NewTolerance > 0, modifyToleranceI(NewTolerance). @@ -149,7 +149,7 @@ foreign(modifyTolerance, c, modifyToleranceI(+float32)). %% float double upper bound training error %% %% --Description-- -train(MatList, MatRows, VecList, NumClasses, Learner, Iterations, Tolerance, Error) :- +adaboost_train(MatList, MatRows, VecList, NumClasses, Learner, Iterations, Tolerance, Error) :- NumClasses >= 0, Iterations >= 0, Tolerance >= 0, @@ -157,7 +157,7 @@ train(MatList, MatRows, VecList, NumClasses, Learner, Iterations, Tolerance, Err convert_list_to_float_array(VecList, array(Ysize, Y)), trainI(X, Xsize, Xrownum, Y, Ysize, NumClasses, Learner, Iterations, Tolerance, Error). -foreign(train, c, trainI( +pointer(float_array), +integer, +integer, +foreign(train, c, trainI( +pointer(float_array), +integer, +integer, +pointer(float_array), +integer, +integer, +string, diff --git a/src/methods/adaboost/adaboost_test.pl b/src/methods/adaboost/adaboost_test.pl index 1c1cae0..fe9a54f 100644 --- a/src/methods/adaboost/adaboost_test.pl +++ b/src/methods/adaboost/adaboost_test.pl @@ -11,308 +11,309 @@ reset_Model_No_Train(Learner) :- - initModelNoTraining(0.0001, Learner). + adaboost_initModelNoTraining(0.0001, Learner). reset_Model_With_Train(Learner) :- - initModelWithTraining([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, 1, 0], 2, Learner, 50, 0.0001). + adaboost_initModelWithTraining([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, 1, 0], 2, Learner, 50, 0.0001). %% -%% TESTING predicate initModelWithTraining/7 +%% TESTING predicate adaboost_initModelWithTraining/7 %% -:- begin_tests(initModelWithTraining). +:- begin_tests(adaboost_initModelWithTraining). %% Failure Tests test(initModelWithTraining_WrongInputTypes, fail) :- - initModelWithTraining(wrong, 3, [0.2,0.2,0.2,0.2], 2, perceptron, 50, 0.0001). + adaboost_initModelWithTraining(wrong, 3, [0.2,0.2,0.2,0.2], 2, perceptron, 50, 0.0001). test(initModelWithTraining_WrongTol, fail) :- - initModelWithTraining([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, 1, 0], -2, perceptron, 50, 0.0001). + adaboost_initModelWithTraining([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, 1, 0], -2, perceptron, 50, 0.0001). test(initModelWithTraining_WrongLearner, [error(domain_error('perceptron or decision_stump' ,wrongLearner), _)]) :- - initModelWithTraining([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, 1, 0], 2, wrongLearner, 50, 0.0001). + adaboost_initModelWithTraining([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, 1, 0], 2, wrongLearner, 50, 0.0001). test(initModelWithTraining_WrongIterations, fail) :- - initModelWithTraining([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, 1, 0], 2, perceptron, -50, 0.0001). + adaboost_initModelWithTraining([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, 1, 0], 2, perceptron, -50, 0.0001). test(initModelWithTraining_WrongTol, fail) :- - initModelWithTraining([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, 1, 0], 2, perceptron, 50, -10.0). + adaboost_initModelWithTraining([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, 1, 0], 2, perceptron, 50, -10.0). test(initModelWithTraining_MissmatchingLabels) :- - initModelWithTraining([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, 1, 0, 1 ,1], 2, perceptron, 50, 0.0001). + adaboost_initModelWithTraining([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, 1, 0, 1 ,1], 2, perceptron, 50, 0.0001). %% Successful Tests test(initModelWithTraining_Perceptron) :- - initModelWithTraining([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, 1, 0], 2, perceptron, 50, 0.0001). + adaboost_initModelWithTraining([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, 1, 0], 2, perceptron, 50, 0.0001). test(initModelWithTraining_DecisionStump) :- - initModelWithTraining([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3], 3, [0, 0, 1], 2, decision_stump, 50, 0.0001). + adaboost_initModelWithTraining([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3], 3, [0, 0, 1], 2, decision_stump, 50, 0.0001). + +:- end_tests(adaboost_initModelWithTraining). -:- end_tests(initModelWithTraining). %% -%% TESTING predicate initModelNoTraining/2 +%% TESTING predicate adaboost_initModelNoTraining/2 %% -:- begin_tests(initModelNoTrain). +:- begin_tests(adaboost_initModelNoTraining). %% Failure Tests test(initModelNoTraining_WrongLearner, [error(domain_error('perceptron or decision_stump' ,wrongLearner), _)]) :- - initModelNoTraining(0.0001, wrongLearner). + adaboost_initModelNoTraining(0.0001, wrongLearner). test(initModelNoTraining_WrongTol, fail) :- - initModelNoTraining(-1.0, perceptron). + adaboost_initModelNoTraining(-1.0, perceptron). %% Successful Tests test(initModelNoTraining_Perceptron) :- - initModelNoTraining(0.001, perceptron). + adaboost_initModelNoTraining(0.001, perceptron). test(initModelNoTraining_DecisionStump) :- - initModelNoTraining(0.000014, decision_stump). + adaboost_initModelNoTraining(0.000014, decision_stump). -:- end_tests(initModelNoTrain). +:- end_tests(adaboost_initModelNoTraining). %% -%% TESTING predicate classify/8 +%% TESTING predicate adaboost_classify/8 %% -:- begin_tests(classify). +:- begin_tests(adaboost_classify). %% Failure Tests test(classify_on_untrained_model, [error(_,system_error('The model is not trained!'))]) :- reset_Model_No_Train(perceptron), - classify([3, 2, 0, 5, 1, 4, 0, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, _, _, _). + adaboost_classify([3, 2, 0, 5, 1, 4, 0, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, _, _, _). test(classify_with_bad_data_input_perceptron, [error(_,system_error('The given data matrix has incorrect dimensions compared to the training data!'))]) :- reset_Model_With_Train(perceptron), - classify([3, 2, 0, 5, 1, 4, 0, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 2, _, _, _). + adaboost_classify([3, 2, 0, 5, 1, 4, 0, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 2, _, _, _). %% should cause an exeption but doesnt TODO: test(classify_with_bad_data_input_decision_stump) :- reset_Model_With_Train(decision_stump), - classify([3, 2, 0, 5, 1, 4, 0, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 5, _, _, _). + adaboost_classify([3, 2, 0, 5, 1, 4, 0, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 5, _, _, _). %% Successful Tests test(classify_perceptron) :- reset_Model_No_Train(perceptron), take_rows_from_iris_CSV(10, Records), - train(Records, 4, [0,1,0,1,1,0,1,1,1,0], 2, perceptron, 50, 0.0001, _), - classify([3, 2, 0, 5, 1, 4, 0, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, + adaboost_train(Records, 4, [0,1,0,1,1,0,1,1,1,0], 2, perceptron, 50, 0.0001, _), + adaboost_classify([3, 2, 0, 5, 1, 4, 0, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, [1.0,1.0,1.0,1.0,0.0], [[0.0,1.0],[0.0,1.0],[0.0,1.0],[0.0,1.0],[1.0,0.0]], 2). test(classify_decision_stump) :- reset_Model_No_Train(decision_stump), take_rows_from_iris_CSV(10, Records), - train(Records, 4, [0,1,0,1,1,0,1,1,1,0], 2, decision_stump, 50, 0.0001, _), - classify([3, 2, 0, 5, 1, 4, 0, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, + adaboost_train(Records, 4, [0,1,0,1,1,0,1,1,1,0], 2, decision_stump, 50, 0.0001, _), + adaboost_classify([3, 2, 0, 5, 1, 4, 0, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, [1.0,1.0,1.0,1.0,1.0], [[0.0,1.0],[0.0,1.0],[0.0,1.0],[0.0,1.0],[0.0,1.0]], 2). -:- end_tests(classify). +:- end_tests(adaboost_classify). %% -%% TESTING predicate numClasses/1 +%% TESTING predicate adaboost_numClasses/1 %% -:- begin_tests(numClasses). +:- begin_tests(adaboost_numClasses). test(numClasses_Perceptron_NoTrain, [true(Amount =:= 0)]) :- reset_Model_No_Train(perceptron), - numClasses(Amount). + adaboost_numClasses(Amount). test(numClasses_Decision_Stump_NoTrain, [true(Amount =:= 0)]) :- reset_Model_No_Train(decision_stump), - numClasses(Amount). + adaboost_numClasses(Amount). test(numClasses_Perceptron_WithTrain, [true(Amount =:= 2)]) :- reset_Model_With_Train(perceptron), - numClasses(Amount). + adaboost_numClasses(Amount). test(numClasses_Decision_Stump_WithTrain, [true(Amount =:= 2)]) :- reset_Model_With_Train(decision_stump), - numClasses(Amount). + adaboost_numClasses(Amount). test(numClasses_Custom_NumClasses, [true(Amount =:= 3)]) :- - initModelWithTraining([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, 1, 0], 3, perceptron, 50, 0.0001), - numClasses(Amount). + adaboost_initModelWithTraining([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, 1, 0], 3, perceptron, 50, 0.0001), + adaboost_numClasses(Amount). test(numClasses_afterTrain_Perceptron, [true(Amount =:= 2)]) :- reset_Model_No_Train(perceptron), take_rows_from_iris_CSV(10, Records), - train(Records, 4, [0,1,0,1,1,0,1,1,1,0], 2, perceptron, 50, 0.0001, _), - numClasses(Amount). + adaboost_train(Records, 4, [0,1,0,1,1,0,1,1,1,0], 2, perceptron, 50, 0.0001, _), + adaboost_numClasses(Amount). -:- end_tests(numClasses). +:- end_tests(adaboost_numClasses). %% -%% TESTING predicate getTolerance/1 +%% TESTING predicate adaboost_getTolerance/1 %% -:- begin_tests(getTolerance). +:- begin_tests(adaboost_getTolerance). test(getTolerance_Perceptron_NoTrain, [true(Amount =:= 0.0001)]) :- reset_Model_No_Train(perceptron), - getTolerance(Amount). + adaboost_getTolerance(Amount). test(getTolerance_Decision_Stump_NoTrain, [true(Amount =:= 0.0001)]) :- reset_Model_No_Train(decision_stump), - getTolerance(Amount). + adaboost_getTolerance(Amount). test(getTolerance_Perceptron_WithTrain, [true(Amount =:= 0.0001)]) :- reset_Model_With_Train(perceptron), - getTolerance(Amount). + adaboost_getTolerance(Amount). test(getTolerance_Decision_Stump_WithTrain, [true(Amount =:= 0.0001)]) :- reset_Model_With_Train(decision_stump), - getTolerance(Amount). + adaboost_getTolerance(Amount). test(getTolerance_Custom_Tolerance, [true(Amount =:= 0.0009)]) :- - initModelWithTraining([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, 1, 0], 3, perceptron, 50, 0.0009), - getTolerance(Amount). + adaboost_initModelWithTraining([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, 1, 0], 3, perceptron, 50, 0.0009), + adaboost_getTolerance(Amount). test(getTolerance_afterTrain, [true(Amount =:= 0.0005)]) :- reset_Model_No_Train(perceptron), take_rows_from_iris_CSV(10, Records), - train(Records, 4, [0,1,0,1,1,0,1,1,1,0], 2, perceptron, 50, 0.0005, _), - getTolerance(Amount). + adaboost_train(Records, 4, [0,1,0,1,1,0,1,1,1,0], 2, perceptron, 50, 0.0005, _), + adaboost_getTolerance(Amount). -:- end_tests(getTolerance). +:- end_tests(adaboost_getTolerance). %% -%% TESTING predicate modifyTolerance/1 +%% TESTING predicate adaboost_modifyTolerance/1 %% -:- begin_tests(modifyTolerance). +:- begin_tests(adaboost_modifyTolerance). %% Failure Tests test(modifyTolerance_With_Negative_Input, fail) :- reset_Model_No_Train(perceptron), - modifyTolerance(-0.02). + adaboost_modifyTolerance(-0.02). %% Successful Tests test(modifyTolerance_Perceptron_NoTrain, [true(Amount =:= 0.02)]) :- reset_Model_No_Train(perceptron), - modifyTolerance(0.02), - getTolerance(Amount). + adaboost_modifyTolerance(0.02), + adaboost_getTolerance(Amount). test(modifyTolerance_Decision_Stump_NoTrain, [true(Amount =:= 0.02)]) :- reset_Model_No_Train(decision_stump), - modifyTolerance(0.02), - getTolerance(Amount). + adaboost_modifyTolerance(0.02), + adaboost_getTolerance(Amount). test(modifyTolerance_Perceptron_WithTrain, [true(Amount =:= 0.02)]) :- reset_Model_With_Train(perceptron), - modifyTolerance(0.02), - getTolerance(Amount). + adaboost_modifyTolerance(0.02), + adaboost_getTolerance(Amount). test(modifyTolerance_Decision_Stump_WithTrain, [true(Amount =:= 0.02)]) :- reset_Model_With_Train(decision_stump), - modifyTolerance(0.02), - getTolerance(Amount). + adaboost_modifyTolerance(0.02), + adaboost_getTolerance(Amount). test(modifyTolerance_Custom_Tolerance, [true(Amount =:= 0.02)]) :- - initModelWithTraining([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, 1, 0], 3, perceptron, 50, 0.0001), - modifyTolerance(0.02), - getTolerance(Amount). + adaboost_initModelWithTraining([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, 1, 0], 3, perceptron, 50, 0.0001), + adaboost_modifyTolerance(0.02), + adaboost_getTolerance(Amount). test(modifyTolerance_afterTrain, [true(Amount =:= 0.02)]) :- reset_Model_No_Train(perceptron), take_rows_from_iris_CSV(10, Records), - train(Records, 4, [0,1,0,1,1,0,1,1,1,0], 2, perceptron, 50, 0.0001, _), - modifyTolerance(0.02), - getTolerance(Amount). + adaboost_train(Records, 4, [0,1,0,1,1,0,1,1,1,0], 2, perceptron, 50, 0.0001, _), + adaboost_modifyTolerance(0.02), + adaboost_getTolerance(Amount). -:- end_tests(modifyTolerance). +:- end_tests(adaboost_modifyTolerance). %% -%% TESTING predicate train/8 +%% TESTING predicate adaboost_train/8 %% -:- begin_tests(train). +:- begin_tests(adaboost_train). %% Failure Tests test(train_With_Bad_NumClass_Input, fail) :- 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, _). + adaboost_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, _). test(train_With_Bad_Learner_Input, [error(domain_error('perceptron or decision_stump' ,wrongLearner), _)]) :- 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, wrongLearner, 50, 0.0001, _). + adaboost_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, wrongLearner, 50, 0.0001, _). test(train_With_Bad_Iterations_Input, fail) :- 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, _). + adaboost_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, _). test(train_With_Bad_Tol_Input, fail) :- 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, _). + adaboost_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, _). test(train_With_Bad_Labels_Too_Many_Classes, [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, _). + adaboost_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_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, _). + adaboost_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_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, _). + adaboost_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, _). %% seems to be allowed test(train_With_Too_Many_Labels) :- 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,0,0,1], 2, perceptron, 50, 0.0001, _). + adaboost_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,0,0,1], 2, perceptron, 50, 0.0001, _). test(train_With_Too_Little_Labels, [error(_,system_error('The given Labels Vector is too short!'))]) :- 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], 2, decision_stump, 50, 0.0001, _). + adaboost_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], 2, decision_stump, 50, 0.0001, _). test(train_With_Negative_RowNumber, fail) :- 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,0,0,0], 2, decision_stump, 50, 0.0001, _). + adaboost_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, decision_stump, 50, 0.0001, _). %% Successful Tests test(train_With_Direct_Input_Perceptron, [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). + adaboost_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(train_With_Data_From_CSV_Perceptron, [true(Error =:= 0.9797958971132711)]) :- reset_Model_No_Train(perceptron), take_rows_from_iris_CSV(10, Records), - train(Records, 4, [0,1,0,1,1,0,1,1,1,0], 2, perceptron, 50, 0.0001, Error). + adaboost_train(Records, 4, [0,1,0,1,1,0,1,1,1,0], 2, perceptron, 50, 0.0001, Error). test(train_With_Direct_Input_Decision_Stump, [true(Error =:= 1)]) :- 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,0,0,0], 2, decision_stump, 50, 0.0001, Error). + adaboost_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, decision_stump, 50, 0.0001, Error). test(train_With_Data_From_CSV_Decision_Stump, [true(Error =:= 0.9797958971132711)]) :- reset_Model_No_Train(decision_stump), take_rows_from_iris_CSV(10, Records), - train(Records, 4, [0,1,0,1,1,0,1,1,1,0], 2, decision_stump, 50, 0.0001, Error). + adaboost_train(Records, 4, [0,1,0,1,1,0,1,1,1,0], 2, decision_stump, 50, 0.0001, Error). test(train_After_InitTrain_Perceptron, [true(Error =:= 1)]) :- reset_Model_With_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], 3, perceptron, 100, 0.01, Error). + adaboost_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], 3, perceptron, 100, 0.01, Error). test(train_After_InitTrain_Decision_Stump, [true(Error =:= 1)]) :- reset_Model_With_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,0,0,0], 3, decision_stump, 100, 0.01, Error). + adaboost_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], 3, decision_stump, 100, 0.01, Error). -:- end_tests(train). +:- end_tests(adaboost_train). run_adaboost_tests :- run_tests. diff --git a/src/methods/bayesian_linear_regression/bayesian_linear_regression.pl b/src/methods/bayesian_linear_regression/bayesian_linear_regression.pl index 410a4dd..794e130 100644 --- a/src/methods/bayesian_linear_regression/bayesian_linear_regression.pl +++ b/src/methods/bayesian_linear_regression/bayesian_linear_regression.pl @@ -1,15 +1,15 @@ -:- module(bayesian_linear_regression, [ initModel/4, - alpha/1, - beta/1, - dataOffset/1, - dataScale/1, - omega/1, - predict/3, - predictWithStd/4, - rmse/4, - train/3, - variance/1]). +:- module(bayesian_linear_regression, [ blr_initModel/4, + blr_alpha/1, + blr_beta/1, + blr_dataOffset/1, + blr_dataScale/1, + blr_omega/1, + blr_predict/3, + blr_predictWithStd/4, + blr_rmse/4, + blr_train/3, + blr_variance/1]). :- load_files(library(str_decl), [when(compile_time), if(changed)]). @@ -39,7 +39,7 @@ %% Initiates the Model so now train/5 can be called. %% Before predict/5 or predictWitStd/7 can be used train/5 has to be called before %% -initModel(CenterData, ScaleData, NIterMax, Tol) :- +blr_initModel(CenterData, ScaleData, NIterMax, Tol) :- NIterMax >= 0, Tol > 0, initModelI(CenterData, ScaleData, NIterMax, Tol). @@ -58,7 +58,7 @@ foreign(initModel, c, initModelI( +integer, %% Get the precision (or inverse variance) of the gaussian prior. %% train/5 should be called before. %% -alpha(Alpha) :- +blr_alpha(Alpha) :- alphaI(Alpha). foreign(alpha, c, alphaI([-float32])). @@ -73,7 +73,7 @@ foreign(alpha, c, alphaI([-float32])). %% Get the precision (or inverse variance) beta of the model. %% train/5 should be called before. %% -beta(Beta) :- +blr_beta(Beta) :- betaI(Beta). foreign(beta, c, betaI([-float32])). @@ -87,7 +87,7 @@ foreign(beta, c, betaI([-float32])). %% --Description-- %% Get the mean vector computed on the features over the training points. %% -dataOffset(ResponsesList) :- +blr_dataOffset(ResponsesList) :- dataOffsetI(X, Xsize), convert_float_array_to_list(X, Xsize, ResponsesList). @@ -102,7 +102,7 @@ foreign(dataOffset, c, dataOffsetI(-pointer(float_array), -integer)). %% --Description-- %% Get the vector of standard deviations computed on the features over the training points. %% -dataScale(DataOffsetList) :- +blr_dataScale(DataOffsetList) :- dataScaleI(X, Xsize), convert_float_array_to_list(X, Xsize, DataOffsetList). @@ -117,7 +117,7 @@ foreign(dataScale, c, dataScaleI(-pointer(float_array), -integer)). %% --Description-- %% Get the solution vector. %% -omega(OmegaList) :- +blr_omega(OmegaList) :- omegaI(X, Xsize), convert_float_array_to_list(X, Xsize, OmegaList). @@ -133,7 +133,7 @@ foreign(omega, c, omegaI(-pointer(float_array), -integer)). %% --Description-- %% Predict yi for each data point in the given data matrix using the currently-trained Bayesian Ridge model. %% -predict(PointsList, PointsRows, PredictionsList) :- +blr_predict(PointsList, PointsRows, PredictionsList) :- convert_list_to_float_array(PointsList, PointsRows, array(Xsize, Xrows, X)), predictI(X, Xsize, Xrows, Y, Ysize), convert_float_array_to_list(Y, Ysize, PredictionsList). @@ -152,7 +152,7 @@ foreign(predict, c, predictI( +pointer(float_array), +integer, +integer, %% --Description-- %% Predict yi and the standard deviation of the predictive posterior distribution for each data point in the given data matrix, using the currently-trained Bayesian Ridge estimator. %% -predictWithStd(PointsList, PointsRows, PredictionsList, STDList) :- +blr_predictWithStd(PointsList, PointsRows, PredictionsList, STDList) :- convert_list_to_float_array(PointsList, PointsRows, array(Xsize, Xrows, X)), predictWithStdI(X, Xsize, Xrows, Y, Ysize, Z, Zsize), convert_float_array_to_list(Y, Ysize, PredictionsList), @@ -173,7 +173,7 @@ foreign(predictWithStd, c, predictWithStdI( +pointer(float_array), +integer, %% --Description-- %% Compute the Root Mean Square Error between the predictions returned by the model and the true responses. %% -rmse(DataList, DataRows, ResponsesList, RMSE) :- +blr_rmse(DataList, DataRows, ResponsesList, RMSE) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrows, X)), convert_list_to_float_array(ResponsesList, array(Ysize, Y)), rmseI(X, Xsize, Xrows, Y, Ysize, RMSE). @@ -193,7 +193,7 @@ foreign(rmse, c, rmseI(+pointer(float_array), +integer, +integer, %% Run BayesianLinearRegression. %% The input matrix (like all mlpack matrices) should be column-major each column is an observation and each row is a dimension. %% -train(DataList, DataRows, ResponsesList) :- +blr_train(DataList, DataRows, ResponsesList) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrows, X)), convert_list_to_float_array(ResponsesList, array(Ysize, Y)), trainI(X, Xsize, Xrows, Y, Ysize). @@ -211,7 +211,7 @@ foreign(train, c, trainI( +pointer(float_array), +integer, +integer, %% Get the estimate variance. %% train/5 should be called before. %% -variance(Variance) :- +blr_variance(Variance) :- varianceI(Variance). foreign(variance, c, varianceI([-float32])). 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 62eb00c..6f7fa10 100644 --- a/src/methods/bayesian_linear_regression/bayesian_linear_regression_test.pl +++ b/src/methods/bayesian_linear_regression/bayesian_linear_regression_test.pl @@ -9,211 +9,211 @@ reset_Model :- - initModel(1,0,50,0.0001). + blr_initModel(1,0,50,0.0001). %% -%% TESTING predicate initModel/4 +%% TESTING predicate blr_initModel/4 %% -:- begin_tests(initModel). +:- begin_tests(blr_initModel). %% Failure Tests test(bay_lin_reg_InitModel_Negative_NIterMax, fail) :- - initModel(0,0,-50,0.0001). + blr_initModel(0,0,-50,0.0001). test(bay_lin_reg_InitModel_Negative_Tolerance, fail) :- - initModel(0,0,50,-0.0001). + blr_initModel(0,0,50,-0.0001). %% Successful Tests test(bay_lin_reg_InitModel_Default_Inputs) :- - initModel(1,0,50,0.0001). + blr_initModel(1,0,50,0.0001). test(bay_lin_reg_InitModel_Alternative_Inputs) :- - initModel(1,1,0,0.0071). + blr_initModel(1,1,0,0.0071). -:- end_tests(initModel). +:- end_tests(blr_initModel). %% -%% TESTING predicate alpha/1 +%% TESTING predicate blr_alpha/1 %% -:- begin_tests(alpha). +:- begin_tests(blr_alpha). %% Failure Tests test(bay_lin_reg_Alpha_Wrong_Input, fail) :- reset_Model, - alpha(1). + blr_alpha(1). %% Successful Tests test(bay_lin_reg_Alpha_Std_init, [true(Alpha =:= 0.0)]) :- reset_Model, - alpha(Alpha). + blr_alpha(Alpha). test(bay_lin_reg_Alpha_After_Train, [true(Alpha =:= 0.12986500952614138)]) :- 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]), - alpha(Alpha). + blr_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]), + blr_alpha(Alpha). -:- end_tests(alpha). +:- end_tests(blr_alpha). %% -%% TESTING predicate beta/1 +%% TESTING predicate blr_beta/1 %% -:- begin_tests(beta). +:- begin_tests(blr_beta). %% Failure Tests test(bay_lin_reg_Beta_Wrong_Input, fail) :- reset_Model, - beta(1). + blr_beta(1). %% Successful Tests test(bay_lin_reg_Beta_Std_init, [true(Beta =:= 0.0)]) :- reset_Model, - beta(Beta). + blr_beta(Beta). test(bay_lin_reg_Beta_After_Train, [true(Beta =:= 2.317989668988762E+31)]) :- 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]), - beta(Beta). + blr_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]), + blr_beta(Beta). -:- end_tests(beta). +:- end_tests(blr_beta). %% -%% TESTING predicate dataOffset/1 +%% TESTING predicate blr_dataOffset/1 %% -:- begin_tests(dataOffset). +:- begin_tests(blr_dataOffset). %% Failure Tests test(bay_lin_reg_DataOffset_Before_Train, [error(_,system_error('The Model is not Trained!'))]) :- reset_Model, - dataOffset(_). + blr_dataOffset(_). %% Successful Tests test(bay_lin_reg_DataOffset_DirektInput) :- 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]), - dataOffset(ResponsesOffsetList), + blr_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]), + blr_dataOffset(ResponsesOffsetList), print('\nResponsesOffset: '), print(ResponsesOffsetList). test(bay_lin_reg_DataOffset_CSV_Input) :- open('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]), - dataOffset(ResponsesOffsetList), + blr_train(Data, 4, [0,1,0,1,1,0,1,1,1,0]), + blr_dataOffset(ResponsesOffsetList), print('\nResponsesOffset: '), print(ResponsesOffsetList). -:- end_tests(dataOffset). +:- end_tests(blr_dataOffset). %% -%% TESTING predicate dataScale/1 +%% TESTING predicate blr_dataScale/1 %% -:- begin_tests(dataScale). +:- begin_tests(blr_dataScale). %% Failure Tests test(bay_lin_reg_DataScale_Before_Train, [error(_,system_error('The Model is not Trained!'))]) :- reset_Model, - dataScale(_). + blr_dataScale(_). %% Successful Tests test(bay_lin_reg_DataScale_DirektInput) :- 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]), - dataScale(DataOffsetList), + blr_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]), + blr_dataScale(DataOffsetList), print('\nDataOffset: '), print(DataOffsetList). test(bay_lin_reg_DataScale_CSV_Input) :- open('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]), - dataScale(DataOffsetList), + blr_train(Data, 4, [0,1,0,1,1,0,1,1,1,0]), + blr_dataScale(DataOffsetList), print('\nDataOffset: '), print(DataOffsetList). -:- end_tests(dataScale). +:- end_tests(blr_dataScale). %% -%% TESTING predicate omega/1 +%% TESTING predicate blr_omega/1 %% -:- begin_tests(omega). +:- begin_tests(blr_omega). %% Failure Tests test(bay_lin_reg_Omega_Before_Train, [error(_,system_error('The Model is not Trained!'))]) :- reset_Model, - omega(_). + blr_omega(_). %% Successful Tests test(bay_lin_reg_Omega_DirektInput) :- 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]), - omega(OmegaList), + blr_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]), + blr_omega(OmegaList), print('\nOmega: '), print(OmegaList). test(bay_lin_reg_Omega_CSV_Input) :- open('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]), - omega(OmegaList), + blr_train(Data, 4, [0,1,0,1,1,0,1,1,1,0]), + blr_omega(OmegaList), print('\nOmega: '), print(OmegaList). -:- end_tests(omega). +:- end_tests(blr_omega). %% -%% TESTING predicate predict/3 +%% TESTING predicate blr_predict/3 %% -:- begin_tests(predict). +:- begin_tests(blr_predict). %% Failure Tests test(bay_lin_reg_Predict_Before_Train, [error(_,system_error('The Model is not Trained!'))]) :- reset_Model, - predict([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, _). + blr_predict([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(bay_lin_reg_Predict_Different_Dims_Than_Trained, [error(_,system_error('each_col(): incompatible size; expected 4x1, got 3x1'))]) :- 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]), - predict([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, _). + blr_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]), + blr_predict([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, _). %% Successful Tests test(bay_lin_reg_Predict_Direct_Input) :- 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]), - predict([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, PredictionsList), + blr_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]), + blr_predict([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, PredictionsList), print('\nPredictions: '), print(PredictionsList). @@ -221,38 +221,38 @@ test(bay_lin_reg_Predict_CSV_Input) :- reset_Model, open('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]), - predict([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, PredictionsList), + blr_train(Data, 4, [0,1,0,1,1,0,1,1,1,0]), + blr_predict([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, PredictionsList), print('\nPredictions: '), print(PredictionsList). -:- end_tests(predict). +:- end_tests(blr_predict). %% -%% TESTING predicate predictWithStd/3 +%% TESTING predicate blr_predictWithStd/3 %% -:- begin_tests(predictWithStd). +:- begin_tests(blr_predictWithStd). %% Failure Tests test(bay_lin_reg_PredictWithStd_Before_Train, [error(_,system_error('The Model is not Trained!'))]) :- reset_Model, - predictWithStd([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, _, _). + blr_predictWithStd([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(bay_lin_reg_PredictWithStd_Different_Dims_Than_Trained, [error(_,system_error('each_col(): incompatible size; expected 4x1, got 3x1'))]) :- 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]), - predictWithStd([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, _, _). + blr_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]), + blr_predictWithStd([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, _, _). %% Successful Tests test(bay_lin_reg_PredictWithStd_Direct_Input) :- 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]), - predictWithStd([3, 2, 0, 5, 1, 4, 0, 0, 4, 3, 3, 5, 0, 5, 5], 3, PredictionsList, STDList), + blr_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]), + blr_predictWithStd([3, 2, 0, 5, 1, 4, 0, 0, 4, 3, 3, 5, 0, 5, 5], 3, PredictionsList, STDList), print('\nPredictions: '), print(PredictionsList), print('\nSTD: '), @@ -262,63 +262,63 @@ test(bay_lin_reg_PredictWithStd_CSV_Input) :- reset_Model, open('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]), - predictWithStd([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, PredictionsList, STDList), + blr_train(Data, 4, [0,1,0,1,1,0,1,1,1,0]), + blr_predictWithStd([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, PredictionsList, STDList), print('\nPredictions: '), print(PredictionsList), print('\nSTD: '), print(STDList). -:- end_tests(predictWithStd). +:- end_tests(blr_predictWithStd). %% -%% TESTING predicate rmse/4 +%% TESTING predicate blr_rmse/4 %% -:- begin_tests(rmse). +:- begin_tests(blr_rmse). %% Failure Tests test(bay_lin_reg_RMSE_Before_Train, [error(_,system_error('The Model is not Trained!'))]) :- reset_Model, - rmse([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], _). + blr_rmse([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], _). test(bay_lin_reg_RMSE_Too_Small_Label_Dims, [error(_,system_error('subtraction: incompatible matrix dimensions: 1x2 and 1x4'))]) :- 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]), - rmse([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], _). + blr_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]), + blr_rmse([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], _). test(bay_lin_reg_RMSE_Too_Large_Label_Dims, [error(_,system_error('subtraction: incompatible matrix dimensions: 1x6 and 1x4'))]) :- 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]), - rmse([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,1,0,0,0], _). + blr_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]), + blr_rmse([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,1,0,0,0], _). %% doesnt cause an exception test(bay_lin_reg_RMSE_Wrong_Label_Value) :- 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]), - rmse([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,5,0,-1], _). + blr_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]), + blr_rmse([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,5,0,-1], _). test(bay_lin_reg_RMSE_Wrong_Data_Dims, [error(_,system_error('each_col(): incompatible size; expected 4x1, got 3x1'))]) :- 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]), - rmse([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, [0,1,0,1], _). + blr_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]), + blr_rmse([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, [0,1,0,1], _). test(bay_lin_reg_RMSE_Wrong_Amount_Off_DataPoints, [error(_,system_error('subtraction: incompatible matrix dimensions: 1x10 and 1x5'))]) :- reset_Model, open('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]), - rmse([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,1,0,1,1,1,0], _). + blr_train(Data, 4, [0,1,0,1,1,0,1,1,1,0]), + blr_rmse([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,1,0,1,1,1,0], _). %% Successful Tests test(bay_lin_reg_RMSE_Direct_Input) :- 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]), - rmse([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], RMSE), + blr_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]), + blr_rmse([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], RMSE), print('\nRMSE: '), print(RMSE). @@ -326,71 +326,71 @@ test(bay_lin_reg_RMSE_CSV_Input) :- reset_Model, open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,5, Data), - train(Data, 4, [0,1,0,1,1]), - rmse([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,1], RMSE), + blr_train(Data, 4, [0,1,0,1,1]), + blr_rmse([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,1], RMSE), print('\nRMSE: '), print(RMSE). -:- end_tests(rmse). +:- end_tests(blr_rmse). %% -%% TESTING predicate train/3 +%% TESTING predicate blr_train/3 %% -:- begin_tests(train). +:- begin_tests(blr_train). %% Failure Tests test(bay_lin_reg_Train_Too_Small_Label_Dims, [error(_,system_error('Target dim doesnt fit to the Data dim'))]) :- 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]). + blr_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]). test(bay_lin_reg_Train_Too_Large_Label_Dims, [error(_,system_error('Target dim doesnt fit to the Data dim'))]) :- 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,0,1,0,0,0]). + blr_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,1,0,0,0]). %% doesnt cause an Exception test(bay_lin_reg_Train_Wrong_Label_Value) :- 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,5,0,-1]). + blr_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,5,0,-1]). %% Successful Tests test(bay_lin_reg_Train_Direct_Input) :- 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]). + blr_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]). test(bay_lin_reg_Train_CSV_Input) :- reset_Model, open('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]). + blr_train(Data, 4, [0,1,0,1,1,0,1,1,1,0]). -:- end_tests(train). +:- end_tests(blr_train). %% -%% TESTING predicate variance/1 +%% TESTING predicate blr_variance/1 %% -:- begin_tests(variance). +:- begin_tests(blr_variance). %% Failure Tests test(bay_lin_reg_Variance_Before_Train, [error(_,system_error('The Model is not Trained!'))]) :- reset_Model, - variance(_). + blr_variance(_). %% Successful Tests test(bay_lin_reg_Variance_After_Train, [true(Variance =:= 4.3140830754274083E-32)]) :- 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]), - variance(Variance). + blr_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]), + blr_variance(Variance). -:- end_tests(variance). +:- end_tests(blr_variance). run_bayesian_linear_regression_tests :- diff --git a/src/methods/decision_tree/decision_tree.pl b/src/methods/decision_tree/decision_tree.pl index 3bcb22a..1622953 100644 --- a/src/methods/decision_tree/decision_tree.pl +++ b/src/methods/decision_tree/decision_tree.pl @@ -1,8 +1,8 @@ -:- module(decision_tree, [ initModel/7, - classifyPoint/3, - classifyMatrix/5, - train/8]). +:- module(decision_tree, [ decision_tree_initModel/7, + decision_tree_classifyPoint/3, + decision_tree_classifyMatrix/5, + decision_tree_train/8]). %% requirements of library(struct) :- load_files(library(str_decl), @@ -34,7 +34,7 @@ %% Construct the decision tree on the given data and labels, assuming that the data is all of the numeric type. %% Setting minimumLeafSize and minimumGainSplit too small may cause the tree to overfit, but setting them too large may cause it to underfit. %% -initModel(DataList, DataRows, LabelsList, NumClasses, MinimumLeafSize, MinimumGainSplit, MaximumDepth) :- +decision_tree_initModel(DataList, DataRows, LabelsList, NumClasses, MinimumLeafSize, MinimumGainSplit, MaximumDepth) :- NumClasses >= 0, MinimumLeafSize > 0, MinimumGainSplit > 0.0, @@ -59,7 +59,7 @@ foreign(initModel, c, initModelI( +pointer(float_array), +integer, +intege %% --Description-- %% Classify the given point and also return estimates of the probability for each class in the given vector. %% -classifyPoint(DataList, Prediction, AssignList) :- +decision_tree_classifyPoint(DataList, Prediction, AssignList) :- convert_list_to_float_array(DataList, array(Xsize, X)), classifyPointI(X, Xsize, Prediction, Y, Ysize), convert_float_array_to_list(Y, Ysize, AssignList). @@ -79,7 +79,7 @@ foreign(classifyPoint, c, classifyPointI(+pointer(float_array), +integer, %% --Description-- %% Classify the given points and also return estimates of the probabilities for each class in the given matrix. %% -classifyMatrix(DataList, DataRows, PredictionList, ProbsList, ZCols) :- +decision_tree_classifyMatrix(DataList, DataRows, PredictionList, ProbsList, ZCols) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrows, X)), classifyMatrixI(X, Xsize, Xrows, Y, Ysize, Z, ZCols, ZRows), convert_float_array_to_list(Y, Ysize, PredictionList), @@ -105,7 +105,7 @@ foreign(classifyMatrix, c, classifyMatrixI( +pointer(float_array), +integer %% Train the decision tree on the given data, assuming that all dimensions are numeric. %% This will overwrite the given model. Setting minimumLeafSize and minimumGainSplit too small may cause the tree to overfit, but setting them too large may cause it to underfit. %% -train(DataList, DataRows, LabelsList, NumClasses, MinimumLeafSize, MinimumGainSplit, MaximumDepth, Entropy) :- +decision_tree_train(DataList, DataRows, LabelsList, NumClasses, MinimumLeafSize, MinimumGainSplit, MaximumDepth, Entropy) :- NumClasses >= 0, MinimumLeafSize > 0, MinimumGainSplit > 0.0, diff --git a/src/methods/decision_tree/decision_tree_test.pl b/src/methods/decision_tree/decision_tree_test.pl index 712d1c1..c5ed2ac 100644 --- a/src/methods/decision_tree/decision_tree_test.pl +++ b/src/methods/decision_tree/decision_tree_test.pl @@ -7,59 +7,59 @@ :- use_module('../../helper_files/helper.pl'). reset_Model_With_Train :- - initModel([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,0], 2, 10, 0.5, 0). + decision_tree_initModel([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,0], 2, 10, 0.5, 0). %% -%% TESTING predicate initModel/7 +%% TESTING predicate decision_tree_initModel/7 %% -:- begin_tests(initModel). +:- begin_tests(decision_tree_initModel). %% Failure Tests test(decision_tree_Negative_NumClass, fail) :- - initModel([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], -1, 1, 0.5, 0). + decision_tree_initModel([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], -1, 1, 0.5, 0). test(decision_tree_Negative_LeafSize, fail) :- - initModel([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], 1, -1, 0.5, 0). + decision_tree_initModel([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], 1, -1, 0.5, 0). test(decision_tree_Negative_GainSplit, fail) :- - initModel([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], 1, 1, -0.5, 0). + decision_tree_initModel([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], 1, 1, -0.5, 0). test(decision_tree_Too_High_GainSplit, fail) :- - initModel([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], 1, 1, 1.5, 0). + decision_tree_initModel([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], 1, 1, 1.5, 0). test(decision_tree_Negative_MaxDepth, fail) :- - initModel([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], 1, 1, 0.5, -1). + decision_tree_initModel([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], 1, 1, 0.5, -1). test(decision_tree_Init_With_Wrong_Label_Dims1, [error(_,system_error('Labels Vector is too short or its values are incorrect: should fit into [0,numClasses)!'))]) :- - initModel([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], 1, 1, 0.5, 1). + decision_tree_initModel([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], 1, 1, 0.5, 1). %% If the label vector is to long it seems to cause no problems test(decision_tree_Init_With_Wrong_Label_Dims2) :- - initModel([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,0,0], 1, 1, 0.5, 1). + decision_tree_initModel([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,0,0], 1, 1, 0.5, 1). %% The same when the label values are out of range test(decision_tree_Init_With_Wrong_Label_Value) :- - initModel([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,5,0,-1], 1, 1, 0.5, 1). + decision_tree_initModel([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,5,0,-1], 1, 1, 0.5, 1). %% Successful Tests test(initModel_Direkt_Input_Use) :- - initModel([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, 10, 0.5, 0). + decision_tree_initModel([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, 10, 0.5, 0). test(initModel_Direkt_CSV_Use) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initModel(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 2, 0.7, 3). + decision_tree_initModel(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 2, 0.7, 3). -:- end_tests(initModel). +:- end_tests(decision_tree_initModel). %% -%% TESTING predicate classifyPoint/3 +%% TESTING predicate decision_tree_classifyPoint/3 %% -:- begin_tests(classifyPoint). +:- begin_tests(decision_tree_classifyPoint). %% Failure Tests @@ -67,7 +67,7 @@ test(initModel_Direkt_CSV_Use) :- %% so im not certain if this should be forced to fail test(classify_Point_With_Wrong_Dims) :- reset_Model_With_Train, - classifyPoint([5.1,3.5,1.4,1.2,3.3], Prediction, AssignList), + decision_tree_classifyPoint([5.1,3.5,1.4,1.2,3.3], Prediction, AssignList), print(Prediction), print('\n'), print(AssignList). @@ -77,25 +77,25 @@ test(classify_Point_With_Wrong_Dims) :- test(classify_Point1) :- reset_Model_With_Train, - classifyPoint([5.1,3.5,1.4], Prediction, AssignList), + decision_tree_classifyPoint([5.1,3.5,1.4], Prediction, AssignList), print(Prediction), print('\n'), print(AssignList). test(classify_Point2) :- reset_Model_With_Train, - classifyPoint([6.2,1.9,2.3], Prediction, AssignList), + decision_tree_classifyPoint([6.2,1.9,2.3], Prediction, AssignList), print(Prediction), print('\n'), print(AssignList). -:- end_tests(classifyPoint). +:- end_tests(decision_tree_classifyPoint). %% -%% TESTING predicate classifyMatrix/4 +%% TESTING predicate decision_tree_classifyMatrix/4 %% -:- begin_tests(classifyMatrix). +:- begin_tests(decision_tree_classifyMatrix). %% Failure Tests @@ -103,7 +103,7 @@ test(classify_Point2) :- %% so im not certain if this should be forced to fail test(classify_Matrix_With_Wrong_Dims1) :- reset_Model_With_Train, - classifyMatrix([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 5, PredictionList, ProbsList, _), + decision_tree_classifyMatrix([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 5, PredictionList, ProbsList, _), print(PredictionList), print('\n'), print(ProbsList). @@ -112,7 +112,7 @@ test(classify_Matrix_With_Wrong_Dims1) :- %% so im not certain if this should be forced to fail test(classify_Matrix_With_Wrong_Dims2) :- reset_Model_With_Train, - classifyMatrix([3, 2, 0, 5, 1, 4, 0, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 2, PredictionList, ProbsList, _), + decision_tree_classifyMatrix([3, 2, 0, 5, 1, 4, 0, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 2, PredictionList, ProbsList, _), print(PredictionList), print('\n'), print(ProbsList). @@ -121,22 +121,22 @@ test(classify_Matrix_With_Wrong_Dims2) :- %% Successful Tests test(classify_Matrix_Wierd_Trained_Labels) :- - initModel([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,5,0,-1], 1, 1, 0.5, 1), - classifyMatrix([5.1,3.5,1.4, 5.1,3.5,1.4, 5.1,3.5,1.4, 5.1,3.5,1.4, 5.1,3.5,1.4], 3, PredictionList, ProbsList, _), + decision_tree_initModel([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,5,0,-1], 1, 1, 0.5, 1), + decision_tree_classifyMatrix([5.1,3.5,1.4, 5.1,3.5,1.4, 5.1,3.5,1.4, 5.1,3.5,1.4, 5.1,3.5,1.4], 3, PredictionList, ProbsList, _), print(PredictionList), print('\n'), print(ProbsList). test(classify_Matrix_Direkt_Input1) :- reset_Model_With_Train, - classifyMatrix([5.1,3.5,1.4, 5.1,3.5,1.4, 5.1,3.5,1.4, 5.1,3.5,1.4, 5.1,3.5,1.4], 3, PredictionList, ProbsList, _), + decision_tree_classifyMatrix([5.1,3.5,1.4, 5.1,3.5,1.4, 5.1,3.5,1.4, 5.1,3.5,1.4, 5.1,3.5,1.4], 3, PredictionList, ProbsList, _), print(PredictionList), print('\n'), print(ProbsList). test(classify_Matrix_Direkt_Input2) :- reset_Model_With_Train, - classifyMatrix([2, 2, 3, 5, 1, 4, 1, 1, 4, 0, 3, 5, 0, 5, 5], 3, PredictionList, ProbsList, _), + decision_tree_classifyMatrix([2, 2, 3, 5, 1, 4, 1, 1, 4, 0, 3, 5, 0, 5, 5], 3, PredictionList, ProbsList, _), print(PredictionList), print('\n'), print(ProbsList). @@ -144,69 +144,69 @@ test(classify_Matrix_Direkt_Input2) :- test(classify_Matrix_CSV_Trained) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,30, Data), - train(Data, 4, [0,1,0,1,1,0,1,1,1,0, 0,1,0,1,1,0,1,1,1,0, 0,1,0,1,1,0,1,1,1,0], 2, 5, 0.0007, 0, _), - classifyMatrix([2, 2, 3, 5, 1, 4, 1, 1, 4, 0, 3, 5, 0, 5, 5, 2, 2, 6, 0, 1], 4, PredictionList, ProbsList, _), + decision_tree_train(Data, 4, [0,1,0,1,1,0,1,1,1,0, 0,1,0,1,1,0,1,1,1,0, 0,1,0,1,1,0,1,1,1,0], 2, 5, 0.0007, 0, _), + decision_tree_classifyMatrix([2, 2, 3, 5, 1, 4, 1, 1, 4, 0, 3, 5, 0, 5, 5, 2, 2, 6, 0, 1], 4, PredictionList, ProbsList, _), print(PredictionList), print('\n'), print(ProbsList). -:- end_tests(classifyMatrix). +:- end_tests(decision_tree_classifyMatrix). %% -%% TESTING predicate train/8 +%% TESTING predicate decision_tree_train/8 %% -:- begin_tests(train). +:- begin_tests(decision_tree_train). %% Failure Tests test(decision_tree_Train_Negative_NumClass, fail) :- - 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], -1, 1, 0.5, 0, _). + decision_tree_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], -1, 1, 0.5, 0, _). test(decision_tree_Train_Negative_LeafSize, fail) :- - 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], 1, -1, 0.5, 0, _). + decision_tree_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], 1, -1, 0.5, 0, _). test(decision_tree_Train_Negative_GainSplit, fail) :- - 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], 1, 1, -0.5, 0, _). + decision_tree_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], 1, 1, -0.5, 0, _). test(decision_tree_Train_Too_High_GainSplit, fail) :- - 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], 1, 1, 1.5, 0, _). + decision_tree_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], 1, 1, 1.5, 0, _). test(decision_tree_Train_Negative_MaxDepth, fail) :- - 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], 1, 1, 0.5, -1, _). + decision_tree_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], 1, 1, 0.5, -1, _). test(decision_tree_Train_Wrong_Label_Dims1, [error(_,system_error('DecisionTree::Train(): number of points (4) does not match number of labels (2)!\n'))]) :- - 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], 1, 1, 0.5, 1, _). + decision_tree_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], 1, 1, 0.5, 1, _). test(decision_tree_Train_Wrong_Label_Dims2, [error(_,system_error('DecisionTree::Train(): number of points (4) does not match number of labels (6)!\n'))]) :- - 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,0,0], 1, 1, 0.5, 1, _). + decision_tree_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,0,0], 1, 1, 0.5, 1, _). %% there seems to be no check for the label values test(decision_tree_Train_Wrong_Labels) :- - 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, [-1,0,0,5], 1, 1, 0.5, 1, _). + decision_tree_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, [-1,0,0,5], 1, 1, 0.5, 1, _). %% Successful Tests test(initModel_Direkt_Input_Use, [true(Entropy =:= 0.0)]) :- - 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, 10, 0.5, 0, Entropy). + decision_tree_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, 10, 0.5, 0, Entropy). test(initModel_Direkt_CSV_Use, [true(Entropy =:= 0.48)]) :- open('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, 2, 0.7, 3, Entropy). + decision_tree_train(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 2, 0.7, 3, Entropy). test(initModel_Direkt_Input_Use, [true(Entropy =:= 0.0)]) :- reset_Model_With_Train, - 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], 3, 10, 0.7, 0, Entropy). + decision_tree_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], 3, 10, 0.7, 0, Entropy). test(initModel_Direkt_CSV_Use, [true(Entropy =:= 0.3767195767195767)]) :- reset_Model_With_Train, open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,30, Data), - train(Data, 4, [0,1,0,1,1,0,1,1,1,0, 0,1,0,1,1,0,1,1,1,0, 0,1,0,1,1,0,1,1,1,0], 2, 5, 0.0005, 0, Entropy). + decision_tree_train(Data, 4, [0,1,0,1,1,0,1,1,1,0, 0,1,0,1,1,0,1,1,1,0, 0,1,0,1,1,0,1,1,1,0], 2, 5, 0.0005, 0, Entropy). -:- end_tests(train). +:- end_tests(decision_tree_train). run_decision_tree_tests :- run_tests. diff --git a/src/methods/fastmks/fastmks.pl b/src/methods/fastmks/fastmks.pl index 0923570..6529734 100644 --- a/src/methods/fastmks/fastmks.pl +++ b/src/methods/fastmks/fastmks.pl @@ -1,7 +1,7 @@ -:- module(fastmks, [ initModel/10, - searchWithQuery/8, - searchNoQuery/5]). +:- module(fastmks, [ fastmks_initModel/10, + fastmks_searchWithQuery/8, + fastmks_searchNoQuery/5]). %% requirements of library(struct) :- load_files(library(str_decl), @@ -35,7 +35,7 @@ %% --Description-- %% Initializes the model on the given reference set. %% -initModel(DataList, DataRows, Kernel, Degree, Offset, Bandwidth, Scale, SingleMode, Naive, Base) :- +fastmks_initModel(DataList, DataRows, Kernel, Degree, Offset, Bandwidth, Scale, SingleMode, Naive, Base) :- Base > 1.0, Bandwidth > 0.0, convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrows, X)), @@ -61,7 +61,7 @@ foreign(initModel, c, initModelI( +pointer(float_array), +integer, +intege %% --Description-- %% Search with a different query set. %% -searchWithQuery(DataList, DataRows, K, IndicesList, YCols, KernelsList, ZCols, Base) :- +fastmks_searchWithQuery(DataList, DataRows, K, IndicesList, YCols, KernelsList, ZCols, Base) :- K > 0, Base > 1.0, convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrows, X)), @@ -87,7 +87,7 @@ foreign(searchWithQuery, c, searchWithQueryI( +pointer(float_array), +integer, %% --Description-- %% Search with the reference set as the query set. %% -searchNoQuery(K, IndicesList, YCols, KernelsList, ZCols) :- +fastmks_searchNoQuery(K, IndicesList, YCols, KernelsList, ZCols) :- K > 0, searchNoQueryI(K, Y, YCols, YRows, Z, ZCols, ZRows), convert_float_array_to_2d_list(Y, YCols, YRows, IndicesList), diff --git a/src/methods/fastmks/fastmks_test.pl b/src/methods/fastmks/fastmks_test.pl index 1d5aeeb..386121e 100644 --- a/src/methods/fastmks/fastmks_test.pl +++ b/src/methods/fastmks/fastmks_test.pl @@ -9,29 +9,29 @@ reset_Model :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initModel(Data, 4, linear, 0.0, 0.0, 1.0, 0.0, 0, 0, 1.2). + fastmks_initModel(Data, 4, linear, 0.0, 0.0, 1.0, 0.0, 0, 0, 1.2). %% -%% TESTING predicate initModel/10 +%% TESTING predicate fastmks_initModel/10 %% -:- begin_tests(initModel). +:- begin_tests(fastmks_initModel). %% Failure Tests test(searchWithQuery_Fastmks_Search_Before_Init, [error(_,system_error('The Model hasnt been trained yet!'))]) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,5, Data), - searchWithQuery(Data, 4, 2, _, _, _, _, 1.1). + fastmks_searchWithQuery(Data, 4, 2, _, _, _, _, 1.1). test(searchNoQuery_Fastmks_Search_Before_Init, [error(_,system_error('The Model hasnt been trained yet!'))]) :- - searchNoQuery(2, _, _, _, _). + fastmks_searchNoQuery(2, _, _, _, _). test(initModel_Fatsmks_WrongKernel_Input, [error(domain_error('The given kernel is unkown!' , wrongKernel), _)]) :- - initModel([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, wrongKernel, 0.0, 0.0, 1.0, 0.0, 0, 0, 1.2). + fastmks_initModel([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, wrongKernel, 0.0, 0.0, 1.0, 0.0, 0, 0, 1.2). test(initModel_Fatsmks_Bad_Base_Input, fail) :- - initModel([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, linear, 0.0, 0.0, 1.0, 0.0, 0, 0, -0.1). + fastmks_initModel([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, linear, 0.0, 0.0, 1.0, 0.0, 0, 0, -0.1). %% Successful Tests @@ -39,45 +39,45 @@ test(initModel_Fatsmks_Bad_Base_Input, fail) :- test(iniModel_Fastmks_Linear) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initModel(Data, 4, linear, 0.0, 0.0, 1.0, 0.0, 0, 0, 1.5). + fastmks_initModel(Data, 4, linear, 0.0, 0.0, 1.0, 0.0, 0, 0, 1.5). test(iniModel_Fastmks_Polynomial) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initModel(Data, 4, polynomial, 0.0, 0.0, 1.0, 0.0, 0, 0, 1.5). + fastmks_initModel(Data, 4, polynomial, 0.0, 0.0, 1.0, 0.0, 0, 0, 1.5). test(iniModel_Fastmks_Cosine) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initModel(Data, 4, cosine, 0.0, 0.0, 1.0, 0.0, 0, 0, 1.5). + fastmks_initModel(Data, 4, cosine, 0.0, 0.0, 1.0, 0.0, 0, 0, 1.5). test(iniModel_Fastmks_Gaussian) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initModel(Data, 4, gaussian, 0.5, 0.5, 0.5, 0.5, 0, 0, 1.5). + fastmks_initModel(Data, 4, gaussian, 0.5, 0.5, 0.5, 0.5, 0, 0, 1.5). test(iniModel_Fastmks_Epanechnikov) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initModel(Data, 4, epanechnikov, 0.0, 0.0, 1.0, 0.0, 0, 0, 1.5). + fastmks_initModel(Data, 4, epanechnikov, 0.0, 0.0, 1.0, 0.0, 0, 0, 1.5). test(iniModel_Fastmks_Triangular) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initModel(Data, 4, triangular, 0.0, 0.0, 1.0, 0.0, 0, 0, 1.5). + fastmks_initModel(Data, 4, triangular, 0.0, 0.0, 1.0, 0.0, 0, 0, 1.5). test(iniModel_Fastmks_Hyptan) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initModel(Data, 4, hyptan, 0.0, 0.0, 1.0, 1.0, 0, 0, 1.5). + fastmks_initModel(Data, 4, hyptan, 0.0, 0.0, 1.0, 1.0, 0, 0, 1.5). -:- end_tests(initModel). +:- end_tests(fastmks_initModel). %% -%% TESTING predicate searchWithQuery/8 +%% TESTING predicate fastmks_searchWithQuery/8 %% -:- begin_tests(searchWithQuery). +:- begin_tests(fastmks_searchWithQuery). %% Failure Tests @@ -85,20 +85,20 @@ test(searchWithQuery_Fastmks_Negative_K, fail) :- reset_Model, open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,5, Data), - searchWithQuery(Data, 4, -2, _, _, _, _, 1.1). + fastmks_searchWithQuery(Data, 4, -2, _, _, _, _, 1.1). test(searchWithQuery_Fastmks_Negative_Base, fail) :- reset_Model, open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,5, Data), - searchWithQuery(Data, 4, 2, _, _, _, _, -1.1). + fastmks_searchWithQuery(Data, 4, 2, _, _, _, _, -1.1). %% Successful Tests test(searchWithQuery_Fastmks_New_Query) :- reset_Model, - searchWithQuery([3, 2, 0, 5, 1, 4, 0, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, 2, IndicesList, _, KernelsList, _, 1.1), + fastmks_searchWithQuery([3, 2, 0, 5, 1, 4, 0, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, 2, IndicesList, _, KernelsList, _, 1.1), print('Indices:\n'), print(IndicesList), print('Kernels:\n'), @@ -108,32 +108,32 @@ test(searchWithQuery_Fastmks_Training_Data_Query) :- reset_Model, open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,5, Data), - searchWithQuery(Data, 4, 2, IndicesList, _, KernelsList, _, 1.1), + fastmks_searchWithQuery(Data, 4, 2, IndicesList, _, KernelsList, _, 1.1), print('Indices:\n'), print(IndicesList), print('Kernels:\n'), print(KernelsList). -:- end_tests(searchWithQuery). +:- end_tests(fastmks_searchWithQuery). %% -%% TESTING predicate searchNoQuery/5 +%% TESTING predicate fastmks_searchNoQuery/5 %% -:- begin_tests(searchNoQuery). +:- begin_tests(fastmks_searchNoQuery). %% Failure Tests test(searchNoQuery_Fastmks_Negative_K, fail) :- reset_Model, - searchNoQuery(-2, _, _, _, _). + fastmks_searchNoQuery(-2, _, _, _, _). %% Successful Tests test(testDescription) :- reset_Model, - searchNoQuery(2, IndicesList, _, KernelsList, _), + fastmks_searchNoQuery(2, IndicesList, _, KernelsList, _), print('Indices:\n'), print(IndicesList), print('Kernels:\n'), @@ -141,13 +141,13 @@ test(testDescription) :- test(testDescription) :- reset_Model, - searchNoQuery(5, IndicesList, _, KernelsList, _), + fastmks_searchNoQuery(5, IndicesList, _, KernelsList, _), print('Indices:\n'), print(IndicesList), print('Kernels:\n'), print(KernelsList). -:- end_tests(searchNoQuery). +:- end_tests(fastmks_searchNoQuery). run_fastmks_tests :- run_tests. diff --git a/src/methods/hoeffding_tree/hoeffding_tree.pl b/src/methods/hoeffding_tree/hoeffding_tree.pl index 9996abf..e656d2c 100644 --- a/src/methods/hoeffding_tree/hoeffding_tree.pl +++ b/src/methods/hoeffding_tree/hoeffding_tree.pl @@ -1,7 +1,7 @@ -:- module(hoeffding_tree, [ initAndBuildModel/12, - classify/4, - train/4]). +:- module(hoeffding_tree, [ hoeffding_tree_initAndBuildModel/12, + hoeffding_tree_classify/4, + hoeffding_tree_train/4]). %% requirements of library(struct) :- load_files(library(str_decl), @@ -38,7 +38,7 @@ %% Construct the Hoeffding tree with the given parameters and given training data. %% The tree may be trained either in batch mode (which looks at all points before splitting, and propagates these points to the created children for further training), or in streaming mode, where each point is only considered once. (In general, batch mode will give better-performing trees, but will have higher memory and runtime costs for the same dataset.) %% -initAndBuildModel(TreeType, DataList, DataRows, LabelsList, NumClasses, BatchTraining, SuccessProbability, MaxSamples, CheckInterval, MinSamples, Bins, ObservationsBeforeBinning) :- +hoeffding_tree_initAndBuildModel(TreeType, DataList, DataRows, LabelsList, NumClasses, BatchTraining, SuccessProbability, MaxSamples, CheckInterval, MinSamples, Bins, ObservationsBeforeBinning) :- NumClasses >= 0, SuccessProbability >= 0, SuccessProbability =< 1, @@ -69,7 +69,7 @@ foreign(initAndBuildModel, c, initAndBuildModelI( +string, %% Classify the given points, using this node and the entire (sub)tree beneath it. %% The predicted labels for each point are returned, as well as an estimate of the probability that the prediction is correct for each point. This estimate is simply the MajorityProbability for the leaf that each point bins to. %% -classify(TestList, TestRows, PredicList, ProbsList) :- +hoeffding_tree_classify(TestList, TestRows, PredicList, ProbsList) :- convert_list_to_float_array(TestList, TestRows, array(Xsize, Xrownum, X)), classifyI(X, Xsize, Xrownum, Y, Ysize, Z, Zsize), convert_float_array_to_list(Y, Ysize, PredicList), @@ -92,7 +92,7 @@ foreign(classify, c, classifyI( +pointer(float_array), +integer, +integer, %% Train in streaming mode on the given dataset. %% This takes one pass. Be sure that initAndBuildModel/14 has been called first! %% -train(DataList, DataRows, LabelsList, BatchTraining) :- +hoeffding_tree_train(DataList, DataRows, LabelsList, BatchTraining) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(LabelsList, array(Ysize, Y)), trainI(X, Xsize, Xrownum, Y, Ysize, BatchTraining). diff --git a/src/methods/hoeffding_tree/hoeffding_tree_test.pl b/src/methods/hoeffding_tree/hoeffding_tree_test.pl index 75280e5..e03e532 100644 --- a/src/methods/hoeffding_tree/hoeffding_tree_test.pl +++ b/src/methods/hoeffding_tree/hoeffding_tree_test.pl @@ -9,106 +9,106 @@ reset_Model :- open('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). + hoeffding_tree_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 +%% TESTING predicate hoeffding_tree_initAndBuildModel/12 %% -:- begin_tests(initAndBuildModel). +:- begin_tests(hoeffding_tree_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, _, _). + hoeffding_tree_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(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). + hoeffding_tree_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). + hoeffding_tree_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). + hoeffding_tree_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), + hoeffding_tree_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). + hoeffding_tree_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). + hoeffding_tree_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). + hoeffding_tree_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). + hoeffding_tree_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). + hoeffding_tree_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_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). + hoeffding_tree_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). + hoeffding_tree_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). + hoeffding_tree_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). + hoeffding_tree_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(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). + hoeffding_tree_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('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). + hoeffding_tree_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). + hoeffding_tree_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_GiniBinary_CSV_Input) :- open('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). + hoeffding_tree_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). + hoeffding_tree_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('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). + hoeffding_tree_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). + hoeffding_tree_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('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). + hoeffding_tree_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). +:- end_tests(hoeffding_tree_initAndBuildModel). %% -%% TESTING predicate classify/4 +%% TESTING predicate hoeffding_tree_classify/4 %% -:- begin_tests(classify). +:- begin_tests(hoeffding_tree_classify). %% Failure Tests 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), + hoeffding_tree_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: '), @@ -120,8 +120,8 @@ test(hoeffding_Classify_Different_Dims_To_Train, [error(_,system_error('Labels V test(hoeffding_Classify_GiniHoeffding) :- open('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), + hoeffding_tree_initAndBuildModel(gini_hoeffding, Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0, 0.95, 5000, 100, 100, 10, 100), + hoeffding_tree_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: '), @@ -130,8 +130,8 @@ test(hoeffding_Classify_GiniHoeffding) :- test(hoeffding_Classify_GiniBinary) :- open('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), - classify([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, PredicList, ProbsList), + hoeffding_tree_initAndBuildModel(gini_binary, Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0, 0.95, 5000, 100, 100, 10, 100), + hoeffding_tree_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: '), @@ -140,8 +140,8 @@ test(hoeffding_Classify_GiniBinary) :- test(hoeffding_Classify_InfoHoeffding) :- open('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), + hoeffding_tree_initAndBuildModel(info_hoeffding, Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0, 0.95, 5000, 100, 100, 10, 100), + hoeffding_tree_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: '), @@ -150,55 +150,55 @@ test(hoeffding_Classify_InfoHoeffding) :- test(hoeffding_Classify_InfoBinary) :- open('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), + hoeffding_tree_initAndBuildModel(info_binary, Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0, 0.95, 5000, 100, 100, 10, 100), + hoeffding_tree_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). +:- end_tests(hoeffding_tree_classify). %% -%% TESTING predicate train/4 +%% TESTING predicate hoeffding_tree_train/4 %% -:- begin_tests(train). +:- begin_tests(hoeffding_tree_train). %% Failure Tests 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). + hoeffding_tree_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). + hoeffding_tree_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). + hoeffding_tree_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). + hoeffding_tree_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). + hoeffding_tree_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) :- 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). + hoeffding_tree_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), + hoeffding_tree_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). +:- end_tests(hoeffding_tree_train). run_hoeffding_tree_tests :- - run_tests(train). + run_tests(hoeffding_tree_train). diff --git a/src/methods/kde/kde.pl b/src/methods/kde/kde.pl index cec5862..1a2951a 100644 --- a/src/methods/kde/kde.pl +++ b/src/methods/kde/kde.pl @@ -1,7 +1,7 @@ -:- module(kde, [ initAndBuildModel/13, - evaluateWithQuery/3, - evaluateNoQuery/1]). +:- module(kde, [ kde_initAndBuildModel/13, + kde_evaluateWithQuery/3, + kde_evaluateNoQuery/1]). %% requirements of library(struct) :- load_files(library(str_decl), @@ -39,7 +39,7 @@ %% --Description-- %% Build the KDE model with the given parameters and then trains it with the given reference data. %% -initAndBuildModel(Bandwidth, RelError, AbsError, KernelType, TreeType, Algorithm, MonteCarlo, McProb, InitialSampleSize, MCEntryCoef, MCBreakCoef, DataList, DataRows) :- +kde_initAndBuildModel(Bandwidth, RelError, AbsError, KernelType, TreeType, Algorithm, MonteCarlo, McProb, InitialSampleSize, MCEntryCoef, MCBreakCoef, DataList, DataRows) :- Bandwidth > 0.0, RelError >= 0.0, RelError =< 1.0, AbsError >= 0.0, @@ -67,7 +67,7 @@ foreign(initAndBuildModel, c, initAndBuildModelI(+float32, +float32, +float32, %% --Description-- %% initAndBuildModel/14 has to be called before. %% -evaluateWithQuery(QueryList, QueryRows, EstimationList) :- +kde_evaluateWithQuery(QueryList, QueryRows, EstimationList) :- convert_list_to_float_array(QueryList, QueryRows, array(Xsize, Xrownum, X)), evaluateWithQueryI(X, Xsize, Xrownum, Y, Ysize), convert_float_array_to_list(Y, Ysize, EstimationList). @@ -87,7 +87,7 @@ foreign(evaluateWithQuery, c, evaluateWithQueryI(+pointer(float_array), +integer %% If possible, it returns normalized estimations. %% initAndBuildModel/14 has to be called before. %% -evaluateNoQuery(EstimationList) :- +kde_evaluateNoQuery(EstimationList) :- evaluateNoQueryI(Y, Ysize), convert_float_array_to_list(Y, Ysize, EstimationList). diff --git a/src/methods/kde/kde_test.pl b/src/methods/kde/kde_test.pl index 6e8beba..be92448 100644 --- a/src/methods/kde/kde_test.pl +++ b/src/methods/kde/kde_test.pl @@ -7,61 +7,61 @@ :- use_module('../../helper_files/helper.pl'). reset_Model :- - initAndBuildModel(1.0, 0.05, 0.0, gaussian, kd_tree, dual_tree, 0, 0.95, 100, 3.0, 0.4, + kde_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/13 +%% TESTING predicate kde_initAndBuildModel/13 %% -:- begin_tests(initAndBuildModel). +:- begin_tests(kde_initAndBuildModel). %% Failure Tests 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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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). @@ -69,164 +69,164 @@ test(kde_Init_Bad_MCBreakCoef, fail) :- %% 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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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). %% 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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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, + kde_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). @@ -234,21 +234,21 @@ test(kde_Init_Triangular_RTREE) :- test(kde_Init_CSV_Input) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initAndBuildModel(2.2, 0.25, 0.5, gaussian, kd_tree, dual_tree, 1, 0.75, 50, 2.0, 0.2, + kde_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). +:- end_tests(kde_initAndBuildModel). %% -%% TESTING predicate evaluateWithQuery/3 +%% TESTING predicate kde_evaluateWithQuery/3 %% -:- begin_tests(evaluateWithQuery). +:- begin_tests(kde_evaluateWithQuery). %% Failure Tests 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), + kde_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). @@ -257,26 +257,26 @@ test(kde_EvalWithQuery_Wrong_Query_Dims, [error(_, system_error('cannot evaluate test(kde_EvalWithQuery) :- reset_Model, - evaluateWithQuery([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5], 3, Estimation), + kde_evaluateWithQuery([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5], 3, Estimation), print('\nEstimation: '), print(Estimation). test(kde_EvalWithQuery_CSV_Input) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initAndBuildModel(2.2, 0.25, 0.5, gaussian, kd_tree, dual_tree, 1, 0.75, 50, 2.0, 0.2, + kde_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), + kde_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). +:- end_tests(kde_evaluateWithQuery). %% -%% TESTING predicate evaluateNoQuery/1 +%% TESTING predicate kde_evaluateNoQuery/1 %% -:- begin_tests(evaluateNoQuery). +:- begin_tests(kde_evaluateNoQuery). %% Failure Tests @@ -285,11 +285,11 @@ test(kde_EvalWithQuery_CSV_Input) :- test(kde_EvalNoQuery) :- reset_Model, - evaluateNoQuery(Estimation), + kde_evaluateNoQuery(Estimation), print('\nEstimation: '), print(Estimation). -:- end_tests(evaluateNoQuery). +:- end_tests(kde_evaluateNoQuery). run_kde_tests :- run_tests. diff --git a/src/methods/kernel_pca/kernel_pca.pl b/src/methods/kernel_pca/kernel_pca.pl index 01a1c62..687b496 100644 --- a/src/methods/kernel_pca/kernel_pca.pl +++ b/src/methods/kernel_pca/kernel_pca.pl @@ -27,12 +27,12 @@ %% float32 bandwidth needed by gaussian, epanechnikov, laplacian, %% float32 scale needed by hyptan, %% mat data +%% int newDimension %% %% --Output-- %% mat transformedData, %% vec eigenValues, -%% mat eigenVectores, -%% int newDimension +%% mat eigenVectores %% %% --Description-- %% This program performs Kernel Principal Components Analysis (KPCA) on the specified dataset with the specified kernel. This will transform the data onto the kernel principal components, and optionally reduce the dimensionality by ignoring the kernel principal components with the smallest eigenvalues. diff --git a/src/methods/kfn/kfn.pl b/src/methods/kfn/kfn.pl index 21fc2b8..8a5f21c 100644 --- a/src/methods/kfn/kfn.pl +++ b/src/methods/kfn/kfn.pl @@ -1,7 +1,7 @@ -:- module(kfn, [ initAndBuildModel/7, - searchWithQuery/7, - searchNoQuery/5]). +:- module(kfn, [ kfn_initAndBuildModel/7, + kfn_searchWithQuery/7, + kfn_searchNoQuery/5]). %% requirements of library(struct) :- load_files(library(str_decl), @@ -33,7 +33,7 @@ %% --Description-- %% Initialize the Model and build it. %% -initAndBuildModel(TreeType, SearchMode, RandomBasis, LeafSize, Epsilon, ReferenceList, ReferenceRows) :- +kfn_initAndBuildModel(TreeType, SearchMode, RandomBasis, LeafSize, Epsilon, ReferenceList, ReferenceRows) :- LeafSize >= 1, Epsilon >= 0, convert_list_to_float_array(ReferenceList, ReferenceRows, array(Xsize, Xrownum, X)), @@ -56,7 +56,7 @@ foreign(initAndBuildModel, c, initAndBuildModelI(+string, +string, %% --Description-- %% Perform neighbor search on the queryset. %% -searchWithQuery(QueryList, QueryRows, K, NeighborsList, YCols, DistancesList, ZCols) :- +kfn_searchWithQuery(QueryList, QueryRows, K, NeighborsList, YCols, DistancesList, ZCols) :- K > 0, convert_list_to_float_array(QueryList, QueryRows, array(Xsize, Xrownum, X)), searchWithQueryI(X, Xsize, Xrownum, K, Y, YCols, YRows, Z, ZCols, ZRows), @@ -80,7 +80,7 @@ foreign(searchWithQuery, c, searchWithQueryI( +pointer(float_array), +integer, %% --Description-- %% Perform monochromatic neighbor search. %% -searchNoQuery(K, NeighborsList, YCols, DistancesList, ZCols) :- +kfn_searchNoQuery(K, NeighborsList, YCols, DistancesList, ZCols) :- K > 0, searchNoQueryI(K, Y, YCols, YRows, Z, ZCols, ZRows), convert_float_array_to_2d_list(Y, YCols, YRows, NeighborsList), diff --git a/src/methods/kfn/kfn_test.pl b/src/methods/kfn/kfn_test.pl index 035a06a..d15258f 100644 --- a/src/methods/kfn/kfn_test.pl +++ b/src/methods/kfn/kfn_test.pl @@ -7,149 +7,149 @@ :- use_module('../../helper_files/helper.pl'). reset_Model :- - initAndBuildModel(kd, dual_tree, 0, 20, 0.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). + kfn_initAndBuildModel(kd, dual_tree, 0, 20, 0.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). %% -%% TESTING predicate initAndBuildModel/9 +%% TESTING predicate kfn_initAndBuildModel/9 %% -:- begin_tests(initAndBuildModel). +:- begin_tests(kfn_initAndBuildModel). %% Failure Tests test(kfn_InitAndBuildModel_Wrong_TreeType_Input, [error(domain_error('The given TreeType is unknown!' , wrongInput), _)]) :- - initAndBuildModel(wrongInput, dual_tree, 0, 20, 0.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). + kfn_initAndBuildModel(wrongInput, dual_tree, 0, 20, 0.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). test(kfn_InitAndBuildModel_Wrong_SearchMode_Input, [error(domain_error('The given SearchMode is unknown!' , wrongInput), _)]) :- - initAndBuildModel(kd, wrongInput, 0, 20, 0.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). + kfn_initAndBuildModel(kd, wrongInput, 0, 20, 0.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). test(kfn_InitAndBuildModel_Negative_LeafSize, fail) :- - initAndBuildModel(kd, dual_tree, 0, 0, 0.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). + kfn_initAndBuildModel(kd, dual_tree, 0, 0, 0.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). test(kfn_InitAndBuildModel_Negative_Epsilon, fail) :- - initAndBuildModel(kd, dual_tree, 0, 20, -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). + kfn_initAndBuildModel(kd, dual_tree, 0, 20, -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). %% Successful Tests test(kfn_InitAndBuildModel_KD) :- - initAndBuildModel(kd, naive, 0, 20, 0.005, [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(kd, single_tree, 0, 20, 0.005, [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(kd, dual_tree, 0, 20, 0.005, [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(kd, greedy, 0, 20, 0.005, [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). + kfn_initAndBuildModel(kd, naive, 0, 20, 0.005, [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), + kfn_initAndBuildModel(kd, single_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(kd, dual_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(kd, greedy, 0, 20, 0.005, [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(kfn_InitAndBuildModel_VP) :- - initAndBuildModel(vp, naive, 0, 20, 0.005, [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(vp, single_tree, 0, 20, 0.005, [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(vp, dual_tree, 0, 20, 0.005, [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(vp, greedy, 0, 20, 0.005, [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). + kfn_initAndBuildModel(vp, naive, 0, 20, 0.005, [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), + kfn_initAndBuildModel(vp, single_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(vp, dual_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(vp, greedy, 0, 20, 0.005, [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(kfn_InitAndBuildModel_RP) :- - initAndBuildModel(rp, naive, 0, 20, 0.005, [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(rp, single_tree, 0, 20, 0.005, [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(rp, dual_tree, 0, 20, 0.005, [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(rp, greedy, 0, 20, 0.005, [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). + kfn_initAndBuildModel(rp, naive, 0, 20, 0.005, [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), + kfn_initAndBuildModel(rp, single_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(rp, dual_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(rp, greedy, 0, 20, 0.005, [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(kfn_InitAndBuildModel_MAX_RP) :- - initAndBuildModel(max_rp, naive, 0, 20, 0.005, [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(max_rp, single_tree, 0, 20, 0.005, [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(max_rp, dual_tree, 0, 20, 0.005, [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(max_rp, greedy, 0, 20, 0.005, [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). + kfn_initAndBuildModel(max_rp, naive, 0, 20, 0.005, [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), + kfn_initAndBuildModel(max_rp, single_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(max_rp, dual_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(max_rp, greedy, 0, 20, 0.005, [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(kfn_InitAndBuildModel_UB) :- - initAndBuildModel(ub, naive, 0, 20, 0.005, [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(ub, single_tree, 0, 20, 0.005, [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(ub, dual_tree, 0, 20, 0.005, [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(ub, greedy, 0, 20, 0.005, [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). + kfn_initAndBuildModel(ub, naive, 0, 20, 0.005, [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), + kfn_initAndBuildModel(ub, single_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(ub, dual_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(ub, greedy, 0, 20, 0.005, [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(kfn_InitAndBuildModel_COVER) :- - initAndBuildModel(cover, naive, 0, 20, 0.005, [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(cover, single_tree, 0, 20, 0.005, [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(cover, dual_tree, 0, 20, 0.005, [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(cover, greedy, 0, 20, 0.005, [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). + kfn_initAndBuildModel(cover, naive, 0, 20, 0.005, [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), + kfn_initAndBuildModel(cover, single_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(cover, dual_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(cover, greedy, 0, 20, 0.005, [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(kfn_InitAndBuildModel_R) :- - initAndBuildModel(r, naive, 0, 20, 0.005, [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(r, single_tree, 0, 20, 0.005, [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(r, dual_tree, 0, 20, 0.005, [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(r, greedy, 0, 20, 0.005, [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). + kfn_initAndBuildModel(r, naive, 0, 20, 0.005, [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), + kfn_initAndBuildModel(r, single_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(r, dual_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(r, greedy, 0, 20, 0.005, [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(kfn_InitAndBuildModel_R_STAR) :- - initAndBuildModel(r_star, naive, 0, 20, 0.005, [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(r_star, single_tree, 0, 20, 0.005, [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(r_star, dual_tree, 0, 20, 0.005, [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(r_star, greedy, 0, 20, 0.005, [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). + kfn_initAndBuildModel(r_star, naive, 0, 20, 0.005, [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), + kfn_initAndBuildModel(r_star, single_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(r_star, dual_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(r_star, greedy, 0, 20, 0.005, [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(kfn_InitAndBuildModel_X) :- - initAndBuildModel(x, naive, 0, 20, 0.005, [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(x, single_tree, 0, 20, 0.005, [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(x, dual_tree, 0, 20, 0.005, [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(x, greedy, 0, 20, 0.005, [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). + kfn_initAndBuildModel(x, naive, 0, 20, 0.005, [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), + kfn_initAndBuildModel(x, single_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(x, dual_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(x, greedy, 0, 20, 0.005, [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(kfn_InitAndBuildModel_BALL) :- - initAndBuildModel(ball, naive, 0, 20, 0.005, [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(ball, single_tree, 0, 20, 0.005, [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(ball, dual_tree, 0, 20, 0.005, [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(ball, greedy, 0, 20, 0.005, [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). + kfn_initAndBuildModel(ball, naive, 0, 20, 0.005, [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), + kfn_initAndBuildModel(ball, single_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(ball, dual_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(ball, greedy, 0, 20, 0.005, [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(kfn_InitAndBuildModel_Hilbert_R) :- - initAndBuildModel(hilbert_r, naive, 0, 20, 0.005, [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(hilbert_r, single_tree, 0, 20, 0.005, [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(hilbert_r, dual_tree, 0, 20, 0.005, [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(hilbert_r, greedy, 0, 20, 0.005, [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). + kfn_initAndBuildModel(hilbert_r, naive, 0, 20, 0.005, [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), + kfn_initAndBuildModel(hilbert_r, single_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(hilbert_r, dual_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(hilbert_r, greedy, 0, 20, 0.005, [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(kfn_InitAndBuildModel_R_Plus) :- - initAndBuildModel(r_plus, naive, 0, 20, 0.005, [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(r_plus, single_tree, 0, 20, 0.005, [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(r_plus, dual_tree, 0, 20, 0.005, [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(r_plus, greedy, 0, 20, 0.005, [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). + kfn_initAndBuildModel(r_plus, naive, 0, 20, 0.005, [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), + kfn_initAndBuildModel(r_plus, single_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(r_plus, dual_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(r_plus, greedy, 0, 20, 0.005, [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(kfn_InitAndBuildModel_R_Plus_Plus) :- - initAndBuildModel(r_plus_plus, naive, 0, 20, 0.005, [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(r_plus_plus, single_tree, 0, 20, 0.005, [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(r_plus_plus, dual_tree, 0, 20, 0.005, [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(r_plus_plus, greedy, 0, 20, 0.005, [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). + kfn_initAndBuildModel(r_plus_plus, naive, 0, 20, 0.005, [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), + kfn_initAndBuildModel(r_plus_plus, single_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(r_plus_plus, dual_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(r_plus_plus, greedy, 0, 20, 0.005, [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(kfn_InitAndBuildModel_OCT) :- - initAndBuildModel(oct, naive, 0, 20, 0.005, [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(oct, single_tree, 0, 20, 0.005, [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(oct, dual_tree, 0, 20, 0.005, [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(oct, greedy, 0, 20, 0.005, [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). + kfn_initAndBuildModel(oct, naive, 0, 20, 0.005, [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), + kfn_initAndBuildModel(oct, single_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(oct, dual_tree, 0, 20, 0.005, [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), + kfn_initAndBuildModel(oct, greedy, 0, 20, 0.005, [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(kfn_InitAndBuildModel_CSV_Input) :- reset_Model, open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initAndBuildModel(kd, dual_tree, 1, 20, 0.005, Data, 4). + kfn_initAndBuildModel(kd, dual_tree, 1, 20, 0.005, Data, 4). -:- end_tests(initAndBuildModel). +:- end_tests(kfn_initAndBuildModel). %% -%% TESTING predicate searchWithQuery/7 +%% TESTING predicate kfn_searchWithQuery/7 %% -:- begin_tests(searchWithQuery). +:- begin_tests(kfn_searchWithQuery). %% Failure Tests test(kfn_SearchWithQuery_Wrong_Query_Dims, [error(_,system_error('Queryset has Dim(4) but the Referenceset has Dim(3)'))]) :- reset_Model, - searchWithQuery([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, 2, _, _, _, _). + kfn_searchWithQuery([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, 2, _, _, _, _). test(kfn_SearchWithQuery_Negative_K, fail) :- reset_Model, - searchWithQuery([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, _, _, _, _). + kfn_searchWithQuery([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, _, _, _, _). test(kfn_SearchWithQuery_Too_Large_K, [error(_,system_error('Requested value of k (10) is greater than the number of points in the reference set (4)'))]) :- reset_Model, - searchWithQuery([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, 10, _, _, _, _). + kfn_searchWithQuery([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, 10, _, _, _, _). %% Successful Tests test(kfn_SearchWithQuery_Normal) :- reset_Model, - searchWithQuery([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, 2, NeighborsList, _, DistancesList, _), + kfn_searchWithQuery([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, 2, NeighborsList, _, DistancesList, _), print('\nNeighbors: '), print(NeighborsList), print('\nDistances: '), @@ -158,38 +158,38 @@ test(kfn_SearchWithQuery_Normal) :- test(kfn_SearchWithQuery_CSV_Input) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initAndBuildModel(kd, dual_tree, 0, 20, 0.0, Data, 4), - searchWithQuery([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, 7, NeighborsList, _, DistancesList, _), + kfn_initAndBuildModel(kd, dual_tree, 0, 20, 0.0, Data, 4), + kfn_searchWithQuery([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, 7, NeighborsList, _, DistancesList, _), print('\nNeighbors: '), print(NeighborsList), print('\nDistances: '), print(DistancesList). -:- end_tests(searchWithQuery). +:- end_tests(kfn_searchWithQuery). %% -%% TESTING predicate searchNoQuery/10 +%% TESTING predicate kfn_searchNoQuery/10 %% -:- begin_tests(searchNoQuery). +:- begin_tests(kfn_searchNoQuery). %% Failure Tests test(kfn_SearchNoQuery_Negative_K, fail) :- reset_Model, - searchNoQuery(-1, _, _, _, _). + kfn_searchNoQuery(-1, _, _, _, _). test(kfn_SearchNoQuery_Too_Large_K, [error(_,system_error('Requested value of k (15) is greater than the number of points in the reference set (4)'))]) :- reset_Model, - searchNoQuery(15, _, _, _, _). + kfn_searchNoQuery(15, _, _, _, _). %% Successful Tests test(kfn_SearchNoQuery_Normal) :- reset_Model, - searchNoQuery(2, NeighborsList, _, DistancesList, _), + kfn_searchNoQuery(2, NeighborsList, _, DistancesList, _), print('\nNeighbors: '), print(NeighborsList), print('\nDistances: '), @@ -198,14 +198,14 @@ test(kfn_SearchNoQuery_Normal) :- test(kfn_SearchNoQuery_CSV_Input) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initAndBuildModel(kd, dual_tree, 0, 20, 0.0, Data, 4), - searchNoQuery(7, NeighborsList, _, DistancesList, _), + kfn_initAndBuildModel(kd, dual_tree, 0, 20, 0.0, Data, 4), + kfn_searchNoQuery(7, NeighborsList, _, DistancesList, _), print('\nNeighbors: '), print(NeighborsList), print('\nDistances: '), print(DistancesList). -:- end_tests(searchNoQuery). +:- end_tests(kfn_searchNoQuery). run_kfn_tests :- run_tests. diff --git a/src/methods/knn/knn.pl b/src/methods/knn/knn.pl index f4d0cac..c410a6c 100644 --- a/src/methods/knn/knn.pl +++ b/src/methods/knn/knn.pl @@ -1,7 +1,7 @@ -:- module(knn, [ initAndBuildModel/9, - searchWithQuery/7, - searchNoQuery/5]). +:- module(knn, [ knn_initAndBuildModel/9, + knn_searchWithQuery/7, + knn_searchNoQuery/5]). %% requirements of library(struct) :- load_files(library(str_decl), @@ -34,7 +34,7 @@ %% --Description-- %% Initialize the Model and build it. %% -initAndBuildModel(TreeType, SearchMode, RandomBasis, LeafSize, Tau, Rho, Epsilon, ReferenceList, ReferenceRows) :- +knn_initAndBuildModel(TreeType, SearchMode, RandomBasis, LeafSize, Tau, Rho, Epsilon, ReferenceList, ReferenceRows) :- LeafSize >= 1, Tau >= 0, Rho >= 0, @@ -60,7 +60,7 @@ foreign(initAndBuildModel, c, initAndBuildModelI( +string, +string, %% --Description-- %% Perform neighbor search on the queryset. %% -searchWithQuery(QueryList, QueryRows, K, NeighborsList, YCols, DistancesList, ZCols) :- +knn_searchWithQuery(QueryList, QueryRows, K, NeighborsList, YCols, DistancesList, ZCols) :- K > 0, convert_list_to_float_array(QueryList, QueryRows, array(Xsize, Xrownum, X)), searchWithQueryI(X, Xsize, Xrownum, K, Y, YCols, YRows, Z, ZCols, ZRows), @@ -83,7 +83,7 @@ foreign(searchWithQuery, c, searchWithQueryI( +pointer(float_array), +integer, %% --Description-- %% Perform monochromatic neighbor search. %% -searchNoQuery(K, NeighborsList, YCols, DistancesList, ZCols) :- +knn_searchNoQuery(K, NeighborsList, YCols, DistancesList, ZCols) :- K > 0, searchNoQueryI(K, Y, YCols, YRows, Z, ZCols, ZRows), convert_float_array_to_2d_list(Y, YCols, YRows, NeighborsList), diff --git a/src/methods/knn/knn_test.pl b/src/methods/knn/knn_test.pl index 6b37752..9372ef8 100644 --- a/src/methods/knn/knn_test.pl +++ b/src/methods/knn/knn_test.pl @@ -7,162 +7,162 @@ :- use_module('../../helper_files/helper.pl'). reset_Model :- - initAndBuildModel(kd, dual_tree, 0, 20, 0.7, 0.0, 0.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). + knn_initAndBuildModel(kd, dual_tree, 0, 20, 0.7, 0.0, 0.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). %% -%% TESTING predicate initAndBuildModel/9 +%% TESTING predicate knn_initAndBuildModel/9 %% -:- begin_tests(initAndBuildModel). +:- begin_tests(knn_initAndBuildModel). %% Failure Tests test(knn_InitAndBuildModel_Wrong_TreeType_Input, [error(domain_error('The given TreeType is unknown!' , wrongInput), _)]) :- - initAndBuildModel(wrongInput, dual_tree, 0, 20, 0.7, 0.0, 0.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). + knn_initAndBuildModel(wrongInput, dual_tree, 0, 20, 0.7, 0.0, 0.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). test(knn_InitAndBuildModel_Wrong_SearchMode_Input, [error(domain_error('The given SearchMode is unknown!' , wrongInput), _)]) :- - initAndBuildModel(kd, wrongInput, 0, 20, 0.7, 0.0, 0.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). + knn_initAndBuildModel(kd, wrongInput, 0, 20, 0.7, 0.0, 0.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). test(knn_InitAndBuildModel_Negative_LeafSize, fail) :- - initAndBuildModel(kd, dual_tree, 0, 0, 0.7, 0.0, 0.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). + knn_initAndBuildModel(kd, dual_tree, 0, 0, 0.7, 0.0, 0.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). test(knn_InitAndBuildModel_Negative_Tau, fail) :- - initAndBuildModel(kd, dual_tree, 0, 20, -0.7, 0.0, 0.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). + knn_initAndBuildModel(kd, dual_tree, 0, 20, -0.7, 0.0, 0.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). test(knn_InitAndBuildModel_Bad_Rho_Input, fail) :- - initAndBuildModel(kd, dual_tree, 0, 20, 0.7, -0.5, 0.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), - initAndBuildModel(kd, dual_tree, 0, 20, 0.7, 1.5, 0.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). + knn_initAndBuildModel(kd, dual_tree, 0, 20, 0.7, -0.5, 0.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), + knn_initAndBuildModel(kd, dual_tree, 0, 20, 0.7, 1.5, 0.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). test(knn_InitAndBuildModel_Negative_Epsilon, fail) :- - initAndBuildModel(kd, dual_tree, 0, 20, 0.7, 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). + knn_initAndBuildModel(kd, dual_tree, 0, 20, 0.7, 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). %% Successful Tests test(knn_InitAndBuildModel_KD) :- - initAndBuildModel(kd, naive, 0, 20, 0.7, 0.01, 0.005, [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(kd, single_tree, 0, 20, 0.7, 0.01, 0.005, [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(kd, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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(kd, greedy, 0, 20, 0.7, 0.01, 0.005, [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). + knn_initAndBuildModel(kd, naive, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(kd, single_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(kd, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(kd, greedy, 0, 20, 0.7, 0.01, 0.005, [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(knn_InitAndBuildModel_VP) :- - initAndBuildModel(vp, naive, 0, 20, 0.7, 0.01, 0.005, [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(vp, single_tree, 0, 20, 0.7, 0.01, 0.005, [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(vp, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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(vp, greedy, 0, 20, 0.7, 0.01, 0.005, [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). + knn_initAndBuildModel(vp, naive, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(vp, single_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(vp, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(vp, greedy, 0, 20, 0.7, 0.01, 0.005, [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(knn_InitAndBuildModel_RP) :- - initAndBuildModel(rp, naive, 0, 20, 0.7, 0.01, 0.005, [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(rp, single_tree, 0, 20, 0.7, 0.01, 0.005, [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(rp, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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(rp, greedy, 0, 20, 0.7, 0.01, 0.005, [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). + knn_initAndBuildModel(rp, naive, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(rp, single_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(rp, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(rp, greedy, 0, 20, 0.7, 0.01, 0.005, [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(knn_InitAndBuildModel_MAX_RP) :- - initAndBuildModel(max_rp, naive, 0, 20, 0.7, 0.01, 0.005, [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(max_rp, single_tree, 0, 20, 0.7, 0.01, 0.005, [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(max_rp, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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(max_rp, greedy, 0, 20, 0.7, 0.01, 0.005, [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). + knn_initAndBuildModel(max_rp, naive, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(max_rp, single_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(max_rp, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(max_rp, greedy, 0, 20, 0.7, 0.01, 0.005, [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(knn_InitAndBuildModel_UB) :- - initAndBuildModel(ub, naive, 0, 20, 0.7, 0.01, 0.005, [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(ub, single_tree, 0, 20, 0.7, 0.01, 0.005, [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(ub, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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(ub, greedy, 0, 20, 0.7, 0.01, 0.005, [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). + knn_initAndBuildModel(ub, naive, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(ub, single_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(ub, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(ub, greedy, 0, 20, 0.7, 0.01, 0.005, [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(knn_InitAndBuildModel_COVER) :- - initAndBuildModel(cover, naive, 0, 20, 0.7, 0.01, 0.005, [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(cover, single_tree, 0, 20, 0.7, 0.01, 0.005, [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(cover, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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(cover, greedy, 0, 20, 0.7, 0.01, 0.005, [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). + knn_initAndBuildModel(cover, naive, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(cover, single_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(cover, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(cover, greedy, 0, 20, 0.7, 0.01, 0.005, [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(knn_InitAndBuildModel_R) :- - initAndBuildModel(r, naive, 0, 20, 0.7, 0.01, 0.005, [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(r, single_tree, 0, 20, 0.7, 0.01, 0.005, [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(r, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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(r, greedy, 0, 20, 0.7, 0.01, 0.005, [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). + knn_initAndBuildModel(r, naive, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(r, single_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(r, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(r, greedy, 0, 20, 0.7, 0.01, 0.005, [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(knn_InitAndBuildModel_R_STAR) :- - initAndBuildModel(r_star, naive, 0, 20, 0.7, 0.01, 0.005, [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(r_star, single_tree, 0, 20, 0.7, 0.01, 0.005, [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(r_star, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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(r_star, greedy, 0, 20, 0.7, 0.01, 0.005, [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). + knn_initAndBuildModel(r_star, naive, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(r_star, single_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(r_star, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(r_star, greedy, 0, 20, 0.7, 0.01, 0.005, [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(knn_InitAndBuildModel_X) :- - initAndBuildModel(x, naive, 0, 20, 0.7, 0.01, 0.005, [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(x, single_tree, 0, 20, 0.7, 0.01, 0.005, [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(x, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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(x, greedy, 0, 20, 0.7, 0.01, 0.005, [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). + knn_initAndBuildModel(x, naive, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(x, single_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(x, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(x, greedy, 0, 20, 0.7, 0.01, 0.005, [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(knn_InitAndBuildModel_BALL) :- - initAndBuildModel(ball, naive, 0, 20, 0.7, 0.01, 0.005, [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(ball, single_tree, 0, 20, 0.7, 0.01, 0.005, [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(ball, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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(ball, greedy, 0, 20, 0.7, 0.01, 0.005, [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). + knn_initAndBuildModel(ball, naive, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(ball, single_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(ball, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(ball, greedy, 0, 20, 0.7, 0.01, 0.005, [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(knn_InitAndBuildModel_Hilbert_R) :- - initAndBuildModel(hilbert_r, naive, 0, 20, 0.7, 0.01, 0.005, [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(hilbert_r, single_tree, 0, 20, 0.7, 0.01, 0.005, [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(hilbert_r, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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(hilbert_r, greedy, 0, 20, 0.7, 0.01, 0.005, [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). + knn_initAndBuildModel(hilbert_r, naive, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(hilbert_r, single_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(hilbert_r, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(hilbert_r, greedy, 0, 20, 0.7, 0.01, 0.005, [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(knn_InitAndBuildModel_R_Plus) :- - initAndBuildModel(r_plus, naive, 0, 20, 0.7, 0.01, 0.005, [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(r_plus, single_tree, 0, 20, 0.7, 0.01, 0.005, [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(r_plus, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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(r_plus, greedy, 0, 20, 0.7, 0.01, 0.005, [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). + knn_initAndBuildModel(r_plus, naive, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(r_plus, single_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(r_plus, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(r_plus, greedy, 0, 20, 0.7, 0.01, 0.005, [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(knn_InitAndBuildModel_R_Plus_Plus) :- - initAndBuildModel(r_plus_plus, naive, 0, 20, 0.7, 0.01, 0.005, [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(r_plus_plus, single_tree, 0, 20, 0.7, 0.01, 0.005, [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(r_plus_plus, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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(r_plus_plus, greedy, 0, 20, 0.7, 0.01, 0.005, [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). + knn_initAndBuildModel(r_plus_plus, naive, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(r_plus_plus, single_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(r_plus_plus, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(r_plus_plus, greedy, 0, 20, 0.7, 0.01, 0.005, [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(knn_InitAndBuildModel_SPILL) :- - initAndBuildModel(spill, naive, 0, 20, 0.7, 0.01, 0.005, [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(spill, single_tree, 0, 20, 0.7, 0.01, 0.005, [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(spill, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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(spill, greedy, 0, 20, 0.7, 0.01, 0.005, [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). + knn_initAndBuildModel(spill, naive, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(spill, single_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(spill, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(spill, greedy, 0, 20, 0.7, 0.01, 0.005, [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(knn_InitAndBuildModel_OCT) :- - initAndBuildModel(oct, naive, 0, 20, 0.7, 0.01, 0.005, [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(oct, single_tree, 0, 20, 0.7, 0.01, 0.005, [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(oct, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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(oct, greedy, 0, 20, 0.7, 0.01, 0.005, [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). + knn_initAndBuildModel(oct, naive, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(oct, single_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(oct, dual_tree, 0, 20, 0.7, 0.01, 0.005, [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), + knn_initAndBuildModel(oct, greedy, 0, 20, 0.7, 0.01, 0.005, [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(knn_InitAndBuildModel_CSV_Input) :- reset_Model, open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initAndBuildModel(kd, dual_tree, 1, 20, 0.7, 0.01, 0.005, Data, 4). + knn_initAndBuildModel(kd, dual_tree, 1, 20, 0.7, 0.01, 0.005, Data, 4). -:- end_tests(initAndBuildModel). +:- end_tests(knn_initAndBuildModel). %% -%% TESTING predicate searchWithQuery/7 +%% TESTING predicate knn_searchWithQuery/7 %% -:- begin_tests(searchWithQuery). +:- begin_tests(knn_searchWithQuery). %% Failure Tests test(knn_SearchWithQuery_Wrong_Query_Dims, [error(_,system_error('Queryset has Dim(4) but the Referenceset has Dim(3)'))]) :- reset_Model, - searchWithQuery([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, 2, _, _, _, _). + knn_searchWithQuery([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, 2, _, _, _, _). test(knn_SearchWithQuery_Negative_K, fail) :- reset_Model, - searchWithQuery([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, _, _, _, _). + knn_searchWithQuery([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, _, _, _, _). test(knn_SearchWithQuery_Too_Large_K, [error(_,system_error('Requested value of k (10) is greater than the number of points in the reference set (4)'))]) :- reset_Model, - searchWithQuery([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, 10, _, _, _, _). + knn_searchWithQuery([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, 10, _, _, _, _). %% Successful Tests test(knn_SearchWithQuery_Normal) :- reset_Model, - searchWithQuery([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, 2, NeighborsList, _, DistancesList, _), + knn_searchWithQuery([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, 2, NeighborsList, _, DistancesList, _), print('\nNeighbors: '), print(NeighborsList), print('\nDistances: '), @@ -171,38 +171,38 @@ test(knn_SearchWithQuery_Normal) :- test(knn_SearchWithQuery_CSV_Input) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initAndBuildModel(kd, dual_tree, 0, 20, 0.7, 0.0, 0.0, Data, 4), - searchWithQuery([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, 7, NeighborsList, _, DistancesList, _), + knn_initAndBuildModel(kd, dual_tree, 0, 20, 0.7, 0.0, 0.0, Data, 4), + knn_searchWithQuery([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, 7, NeighborsList, _, DistancesList, _), print('\nNeighbors: '), print(NeighborsList), print('\nDistances: '), print(DistancesList). -:- end_tests(searchWithQuery). +:- end_tests(knn_searchWithQuery). %% -%% TESTING predicate searchNoQuery/10 +%% TESTING predicate knn_searchNoQuery/10 %% -:- begin_tests(searchNoQuery). +:- begin_tests(knn_searchNoQuery). %% Failure Tests test(knn_SearchNoQuery_Negative_K, fail) :- reset_Model, - searchNoQuery(-1, _, _, _, _). + knn_searchNoQuery(-1, _, _, _, _). test(knn_SearchNoQuery_Too_Large_K, [error(_,system_error('Requested value of k (15) is greater than the number of points in the reference set (4)'))]) :- reset_Model, - searchNoQuery(15, _, _, _, _). + knn_searchNoQuery(15, _, _, _, _). %% Successful Tests test(knn_SearchNoQuery_Normal) :- reset_Model, - searchNoQuery(2, NeighborsList, _, DistancesList, _), + knn_searchNoQuery(2, NeighborsList, _, DistancesList, _), print('\nNeighbors: '), print(NeighborsList), print('\nDistances: '), @@ -211,14 +211,14 @@ test(knn_SearchNoQuery_Normal) :- test(knn_SearchNoQuery_CSV_Input) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initAndBuildModel(kd, dual_tree, 0, 20, 0.7, 0.0, 0.0, Data, 4), - searchNoQuery(7, NeighborsList, _, DistancesList, _), + knn_initAndBuildModel(kd, dual_tree, 0, 20, 0.7, 0.0, 0.0, Data, 4), + knn_searchNoQuery(7, NeighborsList, _, DistancesList, _), print('\nNeighbors: '), print(NeighborsList), print('\nDistances: '), print(DistancesList). -:- end_tests(searchNoQuery). +:- end_tests(knn_searchNoQuery). run_knn_tests :- run_tests. diff --git a/src/methods/lars/lars.pl b/src/methods/lars/lars.pl index a7449f5..d6ac26d 100644 --- a/src/methods/lars/lars.pl +++ b/src/methods/lars/lars.pl @@ -1,16 +1,16 @@ -:- module(lars, [ initModelNoDataNoGram/4, - initModelNoDataWithGram/6, - initModelWithDataNoGram/8, - initModelWithDataWithGram/10, - activeSet/1, - beta/1, - betaPath/2, - computeError/5, - lambdaPath/1, - matUtriCholFactor/2, - predict/4, - train/6]). +:- module(lars, [ lars_initModelNoDataNoGram/4, + lars_initModelNoDataWithGram/6, + lars_initModelWithDataNoGram/8, + lars_initModelWithDataWithGram/10, + lars_activeSet/1, + lars_beta/1, + lars_betaPath/2, + lars_computeError/5, + lars_lambdaPath/1, + lars_matUtriCholFactor/2, + lars_predict/4, + lars_train/6]). :- load_files(library(str_decl), [when(compile_time), if(changed)]). @@ -38,7 +38,7 @@ %% --Description-- %% Only initialize the LARS model. %% -initModelNoDataNoGram(UseCholesky, Lambda1, Lambda2, Tolerance) :- +lars_initModelNoDataNoGram(UseCholesky, Lambda1, Lambda2, Tolerance) :- initModelNoDataNoGramI(UseCholesky, Lambda1, Lambda2, Tolerance). foreign(initModelNoDataNoGram, c, initModelNoDataNoGramI(+integer, @@ -58,7 +58,7 @@ foreign(initModelNoDataNoGram, c, initModelNoDataNoGramI(+integer, %% --Description-- %% Initialize LARS model, and pass in a precalculated Gram matrix but dont train the model. %% -initModelNoDataWithGram(UseCholesky, GramList, GramRows, Lambda1, Lambda2, Tolerance) :- +lars_initModelNoDataWithGram(UseCholesky, GramList, GramRows, Lambda1, Lambda2, Tolerance) :- convert_list_to_float_array(GramList, GramRows, array(Zsize, Zrownum, Z)), initModelNoDataWithGramI(UseCholesky, Z, Zsize, Zrownum, Lambda1, Lambda2, Tolerance). @@ -81,7 +81,7 @@ foreign(initModelNoDataWithGram, c, initModelNoDataWithGramI( +integer, %% --Description-- %% Initialize LARS model, and train the model. %% -initModelWithDataNoGram(DataList, DataRows, ResponsesList, TransposeData, UseCholesky, Lambda1, Lambda2, Tolerance) :- +lars_initModelWithDataNoGram(DataList, DataRows, ResponsesList, TransposeData, UseCholesky, Lambda1, Lambda2, Tolerance) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(ResponsesList, array(Ysize, Y)), initModelWithDataNoGramI(X, Xsize, Xrownum, Y, Ysize, TransposeData, UseCholesky, Lambda1, Lambda2, Tolerance). @@ -109,7 +109,7 @@ foreign(initModelWithDataNoGram, c, initModelWithDataNoGramI( +pointer(float_a %% --Description-- %% Initialize LARS model, pass in a precalculated Gram matrix and train the model. %% -initModelWithDataWithGram(DataList, DataRows, ResponsesList, TransposeData, UseCholesky, GramList, GramRows, Lambda1, Lambda2, Tolerance) :- +lars_initModelWithDataWithGram(DataList, DataRows, ResponsesList, TransposeData, UseCholesky, GramList, GramRows, Lambda1, Lambda2, Tolerance) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(ResponsesList, array(Ysize, Y)), convert_list_to_float_array(GramList, GramRows, array(Zsize, Zrownum, Z)), @@ -132,7 +132,7 @@ foreign(initModelWithDataWithGram, c, initModelWithDataWithGramI(+pointer(float_ %% --Description-- %% Get the set of active dimensions %% -activeSet(ActiveSetList) :- +lars_activeSet(ActiveSetList) :- activeSetI(Y, Ysize), convert_float_array_to_list(Y, Ysize, ActiveSetList). @@ -147,7 +147,7 @@ foreign(activeSet, c, activeSetI(-pointer(float_array), -integer)). %% --Description-- %% Get the solution coefficients. %% -beta(BetaList) :- +lars_beta(BetaList) :- betaI(Y, Ysize), convert_float_array_to_list(Y, Ysize, BetaList). @@ -162,7 +162,7 @@ foreign(beta, c, betaI(-pointer(float_array), -integer)). %% --Description-- %% Get the set of coefficients after each iteration. The solution is the last element. %% -betaPath(BetaList, XCols) :- +lars_betaPath(BetaList, XCols) :- betaPathI(X, XCols, XRows), convert_float_array_to_2d_list(X, XCols, XRows, BetaList). @@ -180,7 +180,7 @@ foreign(betaPath, c, betaPathI(-pointer(float_array), -integer, -integer)). %% --Description-- %% Compute cost error of the given data matrix using the currently-trained LARS model.Only ||y-beta*X||2 is used to calculate cost error. %% -computeError(DataList, DataRows, ResponsesList, RowMajor, Error) :- +lars_computeError(DataList, DataRows, ResponsesList, RowMajor, Error) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(ResponsesList, array(Ysize, Y)), computeErrorI(X, Xsize, Xrownum, Y, Ysize, RowMajor, Error). @@ -199,7 +199,7 @@ foreign(computeError, c, computeErrorI( +pointer(float_array), +integer, +intege %% --Description-- %% Get the set of values for lambda1 after each iteration; the solution is the last element. %% -lambdaPath(LambdaPathList) :- +lars_lambdaPath(LambdaPathList) :- lambdaPathI(Y, Ysize), convert_float_array_to_list(Y, Ysize, LambdaPathList). @@ -214,7 +214,7 @@ foreign(lambdaPath, c, lambdaPathI(-pointer(float_array), -integer)). %% --Description-- %% Get the upper triangular cholesky factor. %% -matUtriCholFactor(FactorList, XCols) :- +lars_matUtriCholFactor(FactorList, XCols) :- matUtriCholFactorI(X, XCols, XRows), convert_float_array_to_2d_list(X, XCols, XRows, FactorList). @@ -231,7 +231,7 @@ foreign(matUtriCholFactor, c, matUtriCholFactorI(-pointer(float_array), -integer %% --Description-- %% Predict y_i for each data point in the given data matrix using the currently-trained LARS model. %% -predict(PointsList, PointsRows, PredicList, RowMajor) :- +lars_predict(PointsList, PointsRows, PredicList, RowMajor) :- convert_list_to_float_array(PointsList, PointsRows, array(Xsize, Xrownum, X)), predictI(X, Xsize, Xrownum, Y, Ysize, RowMajor), convert_float_array_to_list(Y, Ysize, PredicList). @@ -253,7 +253,7 @@ foreign(predict, c, predictI( +pointer(float_array), +integer, +integer, %% --Description-- %% Train the LARS model with the given data. %% -train(DataList, DataRows, ResponsesList, BetaList, RowMajor, Error) :- +lars_train(DataList, DataRows, ResponsesList, BetaList, RowMajor, Error) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(ResponsesList, array(Ysize, Y)), trainI(X, Xsize, Xrownum, Y, Ysize, Z, Zsize, RowMajor, Error), diff --git a/src/methods/lars/lars_test.pl b/src/methods/lars/lars_test.pl index 23e55df..67e2cb1 100644 --- a/src/methods/lars/lars_test.pl +++ b/src/methods/lars/lars_test.pl @@ -9,10 +9,10 @@ :- use_module('../../helper_files/helper.pl'). reset_Model :- - initModelNoDataNoGram(1, 0.1, 0.3, 0.001), + lars_initModelNoDataNoGram(1, 0.1, 0.3, 0.001), 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)), - trainNoBetaReturn(X,Xsize, Xrownum,Y, Ysize, 1, _). + lars_trainNoBetaReturn(X,Xsize, Xrownum,Y, Ysize, 1, _). :- begin_tests(lists). @@ -22,27 +22,27 @@ test(train, [true(A =:= 0)]) :- 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)), - trainNoBetaReturn(X,Xsize, Xrownum,Y, Ysize, 1, A), - predict(X, Xsize,Xrownum, Predic, PredicSize,0), + lars_trainNoBetaReturn(X,Xsize, Xrownum,Y, Ysize, 1, A), + lars_predict(X, Xsize,Xrownum, Predic, PredicSize,0), convert_float_array_to_list(Predic, PredicSize, Result), print(Result). test(activeSet) :- reset_Model, - activeSet(ActSet, ActSetSize), + lars_activeSet(ActSet, ActSetSize), convert_float_array_to_list(ActSet, ActSetSize, Result), print(Result). test(matUtriCholFactor) :- reset_Model, - matUtriCholFactor(Matrix, MatrixColNum, MatrixRowNum), + lars_matUtriCholFactor(Matrix, MatrixColNum, MatrixRowNum), print(MatrixColNum), convert_float_array_to_2d_list(Matrix, MatrixColNum, MatrixRowNum, Results), print(Results). test(betaPath) :- reset_Model, - betaPath(Matrix, MatrixColNum, MatrixRowNum), + lars_betaPath(Matrix, MatrixColNum, MatrixRowNum), print(MatrixColNum), convert_float_array_to_2d_list(Matrix, MatrixColNum, MatrixRowNum, Results), print(Results). diff --git a/src/methods/linear_SVM/linear_SVM.pl b/src/methods/linear_SVM/linear_SVM.pl index 9965310..6959fa4 100644 --- a/src/methods/linear_SVM/linear_SVM.pl +++ b/src/methods/linear_SVM/linear_SVM.pl @@ -1,10 +1,10 @@ -:- module(linear_SVM, [ initModelWithTrain/8, - initModelNoTrain/4, - classify/5, - classifyPoint/2, - computeAccuracy/4, - train/6]). +:- module(linear_SVM, [ linear_SVM_initModelWithTrain/8, + linear_SVM_initModelNoTrain/4, + linear_SVM_classify/5, + linear_SVM_classifyPoint/2, + linear_SVM_computeAccuracy/4, + linear_SVM_train/6]). %% requirements of library(struct) :- load_files(library(str_decl), @@ -36,7 +36,7 @@ %% --Description-- %% Initializes the linear_svm model with the given data and trains it. %% -initModelWithTrain(DataList, DataRows, LabelsList, NumClasses, Lambda, Delta, FitIntercept, Optimizer) :- +linear_SVM_initModelWithTrain(DataList, DataRows, LabelsList, NumClasses, Lambda, Delta, FitIntercept, Optimizer) :- NumClasses >= 0, Lambda >= 0.0, Delta >= 0.0, @@ -62,7 +62,7 @@ foreign(initModelWithTrain, c, initModelWithTrainI( +pointer(float_array), + %% --Description-- %% Initializes the linear_svm model with the given data but doesnt train it. %% -initModelNoTrain(NumClasses, Lambda, Delta, FitIntercept) :- +linear_SVM_initModelNoTrain(NumClasses, Lambda, Delta, FitIntercept) :- NumClasses >= 0, Lambda >= 0.0, Delta >= 0.0, @@ -82,7 +82,7 @@ foreign(initModelNoTrain, c, initModelNoTrainI( +integer, +float32, +float32, %% --Description-- %% Classify the given points, returning class scores and predicted class label for each point. %% -classify(DataList, DataRows, LabelsList, ScoresList, ZCols) :- +linear_SVM_classify(DataList, DataRows, LabelsList, ScoresList, ZCols) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrows, X)), classifyI(X, Xsize, Xrows, Y, Ysize, Z, ZCols, ZRows), convert_float_array_to_list(Y, Ysize, LabelsList), @@ -102,7 +102,7 @@ foreign(classify, c, classifyI( +pointer(float_array), +integer, +integer, %% --Description-- %% Classify the given point. %% -classifyPoint(DataList, Prediction) :- +linear_SVM_classifyPoint(DataList, Prediction) :- convert_list_to_float_array(DataList, array(Xsize, X)), classifyPointI(X, Xsize, Prediction). @@ -121,7 +121,7 @@ foreign(classifyPoint, c, classifyPointI( +pointer(float_array), +integer, %% Computes accuracy of the learned model given the feature data and the labels associated with each data point. %% Predictions are made using the provided data and are compared with the actual labels. %% -computeAccuracy(DataList, DataRows, LabelsList, Accuracy) :- +linear_SVM_computeAccuracy(DataList, DataRows, LabelsList, Accuracy) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(LabelsList, array(Ysize, Y)), computeAccuracyI(X, Xsize, Xrownum, Y, Ysize, Accuracy). @@ -143,7 +143,7 @@ foreign(computeAccuracy, c, computeAccuracyI( +pointer(float_array), +integer, %% --Description-- %% Train the Linear_svm model with the given training data. %% -train(DataList, DataRows, LabelsList, NumClasses, Optimizer, ObjValue) :- +linear_SVM_train(DataList, DataRows, LabelsList, NumClasses, Optimizer, ObjValue) :- NumClasses >= 0, convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(LabelsList, array(Ysize, Y)), diff --git a/src/methods/linear_SVM/linear_SVM_test.pl b/src/methods/linear_SVM/linear_SVM_test.pl index 9ddaa73..3b973e5 100644 --- a/src/methods/linear_SVM/linear_SVM_test.pl +++ b/src/methods/linear_SVM/linear_SVM_test.pl @@ -7,272 +7,272 @@ :- use_module('../../helper_files/helper.pl'). reset_Model_NoTrain :- - initModelNoTrain(2, 0.0001, 1.0, 0). + linear_SVM_initModelNoTrain(2, 0.0001, 1.0, 0). reset_Model_WithTrain :- - initModelWithTrain([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.0001, 1.0, 0, lbfgs). + linear_SVM_initModelWithTrain([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.0001, 1.0, 0, lbfgs). :- begin_tests(lists). %% -%% TESTING predicate initModelWithTrain/8 +%% TESTING predicate linear_SVM_initModelWithTrain/8 %% -:- begin_tests(initModelWithTrain). +:- begin_tests(linear_SVM_initModelWithTrain). %% Failure Tests test(linear_SVM_InitModelWithTrain_Negative_NumClasses, fail) :- - initModelWithTrain([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.0001, 1.0, 0, lbfgs). + linear_SVM_initModelWithTrain([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.0001, 1.0, 0, lbfgs). test(linear_SVM_InitModelWithTrain_Negative_Lambda, fail) :- - initModelWithTrain([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.0001, 1.0, 0, lbfgs). + linear_SVM_initModelWithTrain([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.0001, 1.0, 0, lbfgs). test(linear_SVM_InitModelWithTrain_Negative_Delta, fail) :- - initModelWithTrain([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.0001, -1.0, 0, lbfgs). + linear_SVM_initModelWithTrain([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.0001, -1.0, 0, lbfgs). test(linear_SVM_InitModelWithTrain_Wrong_Optimizer_Input, [error(domain_error('The given Optimizer is unkown!' , wrongInput), _)]) :- - initModelWithTrain([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.0001, 1.0, 0, wrongInput). + linear_SVM_initModelWithTrain([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.0001, 1.0, 0, wrongInput). test(linear_SVM_InitModelWithTrain_Too_Few_Labels, [error(_,system_error('Error'))]) :- - initModelWithTrain([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.0001, 1.0, 0, lbfgs). + linear_SVM_initModelWithTrain([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.0001, 1.0, 0, lbfgs). test(linear_SVM_InitModelWithTrain_Too_Many_Labels, [error(_,system_error('Error'))]) :- - initModelWithTrain([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,1], 2, 0.0001, 1.0, 0, lbfgs). + linear_SVM_initModelWithTrain([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,1], 2, 0.0001, 1.0, 0, lbfgs). test(linear_SVM_InitModelWithTrain_Too_Many_LabelClasses, [error(_,system_error('Error'))]) :- - initModelWithTrain([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,3], 2, 0.0001, 1.0, 0, lbfgs). + linear_SVM_initModelWithTrain([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,3], 2, 0.0001, 1.0, 0, lbfgs). %% Successful Tests test(linear_SVM_InitModelWithTrain_Normal_Use_LBFGS) :- - initModelWithTrain([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.0001, 1.0, 0, lbfgs). + linear_SVM_initModelWithTrain([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.0001, 1.0, 0, lbfgs). test(linear_SVM_InitModelWithTrain_Normal_Use_PSGD) :- - initModelWithTrain([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.0001, 1.0, 0, psgd). + linear_SVM_initModelWithTrain([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.0001, 1.0, 0, psgd). test(linear_SVM_InitModelWithTrain_CSV_Inpupt_LBFGS) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initModelWithTrain(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0.000021, 2.0, 1, lbfgs). + linear_SVM_initModelWithTrain(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0.000021, 2.0, 1, lbfgs). -:- end_tests(initModelWithTrain). +:- end_tests(linear_SVM_initModelWithTrain). %% -%% TESTING predicate initModelNoTrain/4 +%% TESTING predicate linear_SVM_initModelNoTrain/4 %% -:- begin_tests(initModelNoTrain). +:- begin_tests(linear_SVM_initModelNoTrain). %% Failure Tests test(linear_SVM_InitModelNoTrain_Negative_NumClasses, fail) :- - initModelNoTrain(-2, 0.0001, 1.0, 0). + linear_SVM_initModelNoTrain(-2, 0.0001, 1.0, 0). test(linear_SVM_InitModelNoTrain_Negative_Lambda, fail) :- - initModelNoTrain(2, -0.0001, 1.0, 0). + linear_SVM_initModelNoTrain(2, -0.0001, 1.0, 0). test(linear_SVM_InitModelNoTrain_Negative_Delta, fail) :- - initModelNoTrain(2, 0.0001, -1.0, 0). + linear_SVM_initModelNoTrain(2, 0.0001, -1.0, 0). %% Successful Tests test(linear_SVM_InitModelNoTrain_Normal_Use) :- - initModelNoTrain(2, 0.0001, 1.0, 0). + linear_SVM_initModelNoTrain(2, 0.0001, 1.0, 0). test(linear_SVM_InitModelNoTrain_Alternative) :- - initModelNoTrain(2, 0.042, 0.5, 1). + linear_SVM_initModelNoTrain(2, 0.042, 0.5, 1). -:- end_tests(initModelNoTrain). +:- end_tests(linear_SVM_initModelNoTrain). %% -%% TESTING predicate classify/5 +%% TESTING predicate linear_SVM_classify/5 %% -:- begin_tests(classify). +:- begin_tests(linear_SVM_classify). %% Failure Tests test(linear_SVM_Classify_Before_Train, [error(_,system_error('Error'))]) :- reset_Model_NoTrain, - 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, _, _, _). + linear_SVM_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(linear_SVM_Classify_Diffrent_Dims_Than_Train, [error(_,system_error('Error'))]) :- reset_Model_WithTrain, - 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], 4, _, _, _). + linear_SVM_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], 4, _, _, _). %% Successful Tests test(linear_SVM_Classify_Normal_Use_LBFGS) :- - initModelWithTrain([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.0001, 1.0, 0, lbfgs), - 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, LabelsList, ScoresList, _), + linear_SVM_initModelWithTrain([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.0001, 1.0, 0, lbfgs), + linear_SVM_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, LabelsList, ScoresList, _), print('\nLabels: '), print(LabelsList), print('\nScores: '), print(ScoresList). test(linear_SVM_Classify_Normal_Use_PSGD) :- - initModelWithTrain([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.0001, 1.0, 0, psgd), - 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, LabelsList, ScoresList, _), + linear_SVM_initModelWithTrain([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.0001, 1.0, 0, psgd), + linear_SVM_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, LabelsList, ScoresList, _), print('\nLabels: '), print(LabelsList), print('\nScores: '), print(ScoresList). test(linear_SVM_Classify_CSV_Input) :- - initModelWithTrain([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, [0,1,0], 2, 0.0001, 2.0, 1, lbfgs), + linear_SVM_initModelWithTrain([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, [0,1,0], 2, 0.0001, 2.0, 1, lbfgs), open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - classify(Data, 4, LabelsList, ScoresList, _), + linear_SVM_classify(Data, 4, LabelsList, ScoresList, _), print('\nLabels: '), print(LabelsList), print('\nScores: '), print(ScoresList). -:- end_tests(classify). +:- end_tests(linear_SVM_classify). %% -%% TESTING predicate classifyPoint/2 +%% TESTING predicate linear_SVM_classifyPoint/2 %% -:- begin_tests(classifyPoint). +:- begin_tests(linear_SVM_classifyPoint). %% Failure Tests test(linear_SVM_ClassifyPoint_Before_Train, [error(_,system_error('Error'))]) :- reset_Model_NoTrain, - classifyPoint([5.1,3.5,1.4], _). + linear_SVM_classifyPoint([5.1,3.5,1.4], _). test(linear_SVM_ClassifyPoint_Diffrent_Dims_Than_Train, [error(_,system_error('Error'))]) :- reset_Model_WithTrain, - classifyPoint([5.1,3.5,1.4,4.9], _). + linear_SVM_classifyPoint([5.1,3.5,1.4,4.9], _). %% Successful Tests test(linear_SVM_ClassifyPoint_Normal_Use_LBFGS) :- - initModelWithTrain([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.0001, 1.0, 0, lbfgs), - classifyPoint([5.1,3.5,1.4], Label), + linear_SVM_initModelWithTrain([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.0001, 1.0, 0, lbfgs), + linear_SVM_classifyPoint([5.1,3.5,1.4], Label), print('\nLabel: '), print(Label). test(linear_SVM_ClassifyPoint_Normal_Use_PSGD) :- - initModelWithTrain([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.0001, 1.0, 0, psgd), - classifyPoint([5.1,3.5,1.4], Label), + linear_SVM_initModelWithTrain([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.0001, 1.0, 0, psgd), + linear_SVM_classifyPoint([5.1,3.5,1.4], Label), print('\nLabel: '), print(Label). test(linear_SVM_ClassifyPoint_CSV_Input) :- - initModelWithTrain([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, [0,1,0], 2, 0.0001, 2.0, 1, lbfgs), + linear_SVM_initModelWithTrain([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, [0,1,0], 2, 0.0001, 2.0, 1, lbfgs), open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,1, Data), - classifyPoint(Data, Label), + linear_SVM_classifyPoint(Data, Label), print('\nLabel: '), print(Label). -:- end_tests(classifyPoint). +:- end_tests(linear_SVM_classifyPoint). %% -%% TESTING predicate computeAccuracy/4 +%% TESTING predicate linear_SVM_computeAccuracy/4 %% -:- begin_tests(computeAccuracy). +:- begin_tests(linear_SVM_computeAccuracy). %% Failure Tests test(linear_SVM_ComputeAccuracy_Before_Train, [error(_,system_error('Error'))]) :- reset_Model_NoTrain, - computeAccuracy([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], _). + linear_SVM_computeAccuracy([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], _). test(linear_SVM_ComputeAccuracy_Too_Few_Labels, [error(_,system_error('Error'))]) :- reset_Model_WithTrain, - computeAccuracy([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], _). + linear_SVM_computeAccuracy([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], _). test(linear_SVM_ComputeAccuracy_Too_Many_Labels, [error(_,system_error('Error'))]) :- reset_Model_WithTrain, - computeAccuracy([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,1], _). + linear_SVM_computeAccuracy([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,1], _). test(linear_SVM_ComputeAccuracy_Too_Many_LabelClasses, [error(_,system_error('Error'))]) :- reset_Model_WithTrain, - computeAccuracy([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,3], _). + linear_SVM_computeAccuracy([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,3], _). test(linear_SVM_ComputeAccuracy_Wrong_Data_Dims, [error(_,system_error('Error'))]) :- reset_Model_WithTrain, - computeAccuracy([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, [0,1,0], _). + linear_SVM_computeAccuracy([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, [0,1,0], _). %% Successful Tests test(linear_SVM_ComputeAccuracy_Normal_Use_LBFGS) :- - initModelWithTrain([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.0001, 1.0, 0, lbfgs), - computeAccuracy([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], Accuracy), + linear_SVM_initModelWithTrain([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.0001, 1.0, 0, lbfgs), + linear_SVM_computeAccuracy([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], Accuracy), print('\nAccuracy: '), print(Accuracy). test(linear_SVM_ComputeAccuracy_Normal_Use_PSGD) :- - initModelWithTrain([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.0001, 1.0, 0, psgd), - computeAccuracy([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], Accuracy), + linear_SVM_initModelWithTrain([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.0001, 1.0, 0, psgd), + linear_SVM_computeAccuracy([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], Accuracy), print('\nAccuracy: '), print(Accuracy). test(linear_SVM_ComputeAccuracy_CSV_Input) :- - initModelWithTrain([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, [0,1,0], 2, 0.0001, 2.0, 1, lbfgs), + linear_SVM_initModelWithTrain([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, [0,1,0], 2, 0.0001, 2.0, 1, lbfgs), open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,1, Data), - computeAccuracy(Data, 4, [0,1,0,1,1,0,1,1,1,0], Accuracy), + linear_SVM_computeAccuracy(Data, 4, [0,1,0,1,1,0,1,1,1,0], Accuracy), print('\nAccuracy: '), print(Accuracy). -:- end_tests(computeAccuracy). +:- end_tests(linear_SVM_computeAccuracy). %% -%% TESTING predicate train/6 +%% TESTING predicate linear_SVM_train/6 %% -:- begin_tests(train). +:- begin_tests(linear_SVM_train). %% Failure Tests test(linear_SVM_Train_Negative_NumClasses, fail) :- reset_Model_NoTrain, - 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, lbfgs, _). + linear_SVM_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, lbfgs, _). test(linear_SVM_Train_Wrong_Optimizer_Input, [error(domain_error('The given Optimizer is unkown!' , wrongInput), _)]) :- reset_Model_NoTrain, - 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, wrongInput, _). + linear_SVM_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, wrongInput, _). test(linear_SVM_Train_Too_Few_Labels, [error(_,system_error('Error'))]) :- reset_Model_NoTrain, - 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], 2, lbfgs, _). + linear_SVM_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], 2, lbfgs, _). test(linear_SVM_Train_Too_Many_Labels, [error(_,system_error('Error'))]) :- reset_Model_NoTrain, - 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,1], 2, lbfgs, _). + linear_SVM_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,1], 2, lbfgs, _). test(linear_SVM_Train_Too_Many_LabelClasses, [error(_,system_error('Error'))]) :- reset_Model_NoTrain, - 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,2,3], 2, lbfgs, _). + linear_SVM_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,2,3], 2, lbfgs, _). %% Successful Tests test(linear_SVM_Train_Normal_Use_LBFGS) :- reset_Model_NoTrain, - 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, lbfgs, ObjectiveValue), + linear_SVM_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, lbfgs, ObjectiveValue), print('\nObjectiveValue: '), print(ObjectiveValue). test(linear_SVM_Train_Normal_Use_PSGD) :- reset_Model_NoTrain, - 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, psgd, ObjectiveValue), + linear_SVM_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, psgd, ObjectiveValue), print('\nObjectiveValue: '), print(ObjectiveValue). @@ -280,11 +280,11 @@ test(linear_SVM_Train_CSV_Inpupt_LBFGS) :- reset_Model_NoTrain, open('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, lbfgs, ObjectiveValue), + linear_SVM_train(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, lbfgs, ObjectiveValue), print('\nObjectiveValue: '), print(ObjectiveValue). -:- end_tests(train). +:- end_tests(linear_SVM_train). run_linear_SVM_tests :- run_tests. diff --git a/src/methods/linear_regression/linear_regression.pl b/src/methods/linear_regression/linear_regression.pl index cb85d07..dfc1ff8 100644 --- a/src/methods/linear_regression/linear_regression.pl +++ b/src/methods/linear_regression/linear_regression.pl @@ -1,12 +1,12 @@ -:- module(linear_regression, [ initModel/5, - initModelWithWeights/6, - computeError/4, - parameters/1, - modifyParameters/1, - predict/3, - train/5, - trainWithWeights/6]). +:- module(linear_regression, [ linear_regression_initModel/5, + linear_regression_initModelWithWeights/6, + linear_regression_computeError/4, + linear_regression_parameters/1, + linear_regression_modifyParameters/1, + linear_regression_predict/3, + linear_regression_train/5, + linear_regression_trainWithWeights/6]). :- load_files(library(str_decl), [when(compile_time), if(changed)]). @@ -34,7 +34,7 @@ %% --Description-- %% Initializes the linear_regression model and trains it but doesnt include weights. %% -initModel(DataList, DataRows, ResponsesList, Lambda, Intercept) :- +linear_regression_initModel(DataList, DataRows, ResponsesList, Lambda, Intercept) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(ResponsesList, array(Ysize, Y)), initModelI(X, Xsize, Xrownum, Y, Ysize, Lambda, Intercept). @@ -57,7 +57,7 @@ foreign(initModel, c, initModelI( +pointer(float_array), +integer, +intege %% --Description-- %% Initializes the linear_regression model, trains it and adds weights to it. %% -initModelWithWeights(DataList, DataRows, ResponsesList, WeightsList, Lambda, Intercept) :- +linear_regression_initModelWithWeights(DataList, DataRows, ResponsesList, WeightsList, Lambda, Intercept) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(ResponsesList, array(Ysize, Y)), convert_list_to_float_array(WeightsList, array(Zsize, Z)), @@ -80,7 +80,7 @@ foreign(initModelWithWeights, c, initModelWithWeightsI( +pointer(float_a %% --Description-- %% Calculate the L2 squared error on the given predictors and responses using this linear regression model. %% -computeError(DataList, DataRows, ResponsesList, Error) :- +linear_regression_computeError(DataList, DataRows, ResponsesList, Error) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(ResponsesList, array(Ysize, Y)), computeErrorI(X, Xsize, Xrownum, Y, Ysize, Error). @@ -98,7 +98,7 @@ foreign(computeError, c, computeErrorI(+pointer(float_array), +integer, +intege %% --Description-- %% Get the parameters (the b vector). %% -parameters(ParametersList) :- +linear_regression_parameters(ParametersList) :- parametersI(Y, Ysize), convert_float_array_to_list(Y, Ysize, ParametersList). @@ -113,7 +113,7 @@ foreign(parameters, c, parametersI(-pointer(float_array), -integer)). %% --Description-- %% Modify the parameters (the b vector). %% -modifyParameters(ParameterList) :- +linear_regression_modifyParameters(ParameterList) :- convert_list_to_float_array(ParameterList, array(Ysize, Y)), modifyParametersI(Y, Ysize). @@ -129,7 +129,7 @@ foreign(modifyParameters, c, modifyParametersI(+pointer(float_array), +integer) %% --Description-- %% Calculate y_i for each data point in points. %% -predict(PointsList, PointsRows, PredicList) :- +linear_regression_predict(PointsList, PointsRows, PredicList) :- convert_list_to_float_array(PointsList, PointsRows, array(Xsize, Xrownum, X)), predictI(X, Xsize, Xrownum, Y, Ysize), convert_float_array_to_list(Y, Ysize, PredicList). @@ -151,7 +151,7 @@ foreign(predict, c, predictI( +pointer(float_array), +integer, +integer, %% Careful! %% This will completely ignore and overwrite the existing model. This particular implementation does not have an incremental training algorithm. %% -train(DataList, DataRows, ResponsesList, Intercept, Error) :- +linear_regression_train(DataList, DataRows, ResponsesList, Intercept, Error) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(ResponsesList, array(Ysize, Y)), trainI(X, Xsize, Xrownum, Y, Ysize, Intercept, Error). @@ -176,7 +176,7 @@ foreign(train, c, trainI( +pointer(float_array), +integer, +integer, %% Careful! %% This will completely ignore and overwrite the existing model. This particular implementation does not have an incremental training algorithm. %% -trainWithWeights(DataList, DataRows, ResponsesList, WeightsList, Intercept, Error) :- +linear_regression_trainWithWeights(DataList, DataRows, ResponsesList, WeightsList, Intercept, Error) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(ResponsesList, array(Ysize, Y)), convert_list_to_float_array(WeightsList, array(Zsize, Z)), diff --git a/src/methods/local_coordinate_coding/local_coordinate_coding.pl b/src/methods/local_coordinate_coding/local_coordinate_coding.pl index 9c7d2be..97c4580 100644 --- a/src/methods/local_coordinate_coding/local_coordinate_coding.pl +++ b/src/methods/local_coordinate_coding/local_coordinate_coding.pl @@ -1,10 +1,10 @@ -:- module(local_coordinate_coding, [ initModelWithTrain/7, - initModelNoTrain/5, - encode/4, - objective/5, - optimizeDictionary/5, - train/3]). +:- module(local_coordinate_coding, [ lcc_initModelWithTrain/7, + lcc_initModelNoTrain/5, + lcc_encode/4, + lcc_objective/5, + lcc_optimizeDictionary/5, + lcc_train/3]). %% requirements of library(struct) :- load_files(library(str_decl), @@ -35,7 +35,7 @@ %% --Description-- %% Initializes the model and trains it so encode/6 can be called after %% -initModelWithTrain(DataList, DataRows, Normalize, Atoms, Lambda, MaxIterations, Tolerance) :- +lcc_initModelWithTrain(DataList, DataRows, Normalize, Atoms, Lambda, MaxIterations, Tolerance) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), initModelWithTrainI(X, Xsize, Xrownum, Normalize, Atoms, Lambda, MaxIterations, Tolerance). @@ -56,7 +56,7 @@ foreign(initModelWithTrain, c, initModelWithTrainI( +pointer(float_array), + %% --Description-- %% Initializes the model but doesnt train it so train/4 has to be called befor encode/6 can be used. %% -initModelNoTrain(Normalize, Atoms, Lambda, MaxIterations, Tolerance) :- +lcc_initModelNoTrain(Normalize, Atoms, Lambda, MaxIterations, Tolerance) :- initModelNoTrainI(Normalize, Atoms, Lambda, MaxIterations, Tolerance). foreign(initModelNoTrain, c, initModelNoTrainI( +integer, @@ -72,7 +72,7 @@ foreign(initModelNoTrain, c, initModelNoTrainI( +integer, %% --Description-- %% Code each point via distance-weighted LARS. %% -encode(DataList, DataRows, CodesList, YCols) :- +lcc_encode(DataList, DataRows, CodesList, YCols) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrows, X)), encodeI(X, Xsize, Xrows, Y, YCols, YRows), convert_float_array_to_2d_list(Y, YCols, YRows, CodesList). @@ -91,7 +91,7 @@ foreign(encode, c, encodeI( +pointer(float_array), +integer, +integer, %% --Description-- %% Compute objective function given the list of adjacencies. %% -objective(DataList, DataRows, CodesList, ZCols, AdjacenciesList) :- +lcc_objective(DataList, DataRows, CodesList, YCols, AdjacenciesList) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrows, X)), objectiveI(X, Xsize, Xrows, Y, YCols, YRows, Z, Zsize), convert_float_array_to_2d_list(Y, YCols, YRows, CodesList), @@ -112,7 +112,7 @@ foreign(objective, c, objectiveI( +pointer(float_array), +integer, +intege %% --Description-- %% Learn dictionary by solving linear system. %% -optimizeDictionary(DataList, DataRows, CodesList, ZCols, AdjacenciesList) :- +lcc_optimizeDictionary(DataList, DataRows, CodesList, YCols, AdjacenciesList) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrows, X)), optimizeDictionaryI(X, Xsize, Xrows, Y, YCols, YRows, Z, Zsize), convert_float_array_to_2d_list(Y, YCols, YRows, CodesList), @@ -132,7 +132,7 @@ foreign(optimizeDictionary, c, optimizeDictionaryI( +pointer(float_array), + %% --Description-- %% Run local coordinate coding and train the model. %% -train(DataList, DataRows, ReturnValue) :- +lcc_train(DataList, DataRows, ReturnValue) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrows, X)), trainI(X, Xsize, Xrows, ReturnValue). diff --git a/src/methods/local_coordinate_coding/local_coordinate_coding_test.pl b/src/methods/local_coordinate_coding/local_coordinate_coding_test.pl index 5fe6b23..0bdb5de 100644 --- a/src/methods/local_coordinate_coding/local_coordinate_coding_test.pl +++ b/src/methods/local_coordinate_coding/local_coordinate_coding_test.pl @@ -7,7 +7,7 @@ :- use_module('../../helper_files/helper.pl'). reset_Model :- - initModel(1,0,50,0.0001). + lcc_initModel(1,0,50,0.0001). %% %% TESTING predicate predicate/10 diff --git a/src/methods/logistic_regression/logistic_regression.pl b/src/methods/logistic_regression/logistic_regression.pl index 86228c5..ecdc87b 100644 --- a/src/methods/logistic_regression/logistic_regression.pl +++ b/src/methods/logistic_regression/logistic_regression.pl @@ -1,11 +1,11 @@ -:- module(logistic_regression, [ initModelNoOptimizer/4, - initModelWithOptimizer/5, - classifyPoint/3, - classifyMatrix/6, - computeAccuracy/5, - computeError/4, - train/4]). +:- module(logistic_regression, [ logistic_regression_initModelNoOptimizer/4, + logistic_regression_initModelWithOptimizer/5, + logistic_regression_classifyPoint/3, + logistic_regression_classifyMatrix/6, + logistic_regression_computeAccuracy/5, + logistic_regression_computeError/4, + logistic_regression_train/4]). %% requirements of library(struct) :- load_files(library(str_decl), @@ -33,7 +33,7 @@ %% --Description-- %% Initialize the logistic_regression model without specifing a optimizer. %% -initModelNoOptimizer(DataList, DataRows, ResponsesList, Lambda) :- +logistic_regression_initModelNoOptimizer(DataList, DataRows, ResponsesList, Lambda) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(ResponsesList, array(Ysize, Y)), initModelNoOptimizerI(X, Xsize, Xrownum, Y, Ysize, Lambda). @@ -54,7 +54,7 @@ foreign(initModelNoOptimizer, c, initModelNoOptimizerI( +pointer(float_array), + %% --Description-- %% Initialize the logistic_regression model and specify the optimizer. %% -initModelWithOptimizer(DataList, DataRows, ResponsesList, Responses, Lambda) :- +logistic_regression_initModelWithOptimizer(DataList, DataRows, ResponsesList, Responses, Lambda) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(ResponsesList, array(Ysize, Y)), initModelWithOptimizerI(X, Xsize, Xrownum, Y, Ysize, Responses, Lambda). @@ -75,7 +75,7 @@ foreign(initModelWithOptimizer, c, initModelWithOptimizerI( +pointer(float_a %% --Description-- %% Classify the given point. %% -classifyPoint(PointList, DecisionBoundary, PredicLabel) :- +logistic_regression_classifyPoint(PointList, DecisionBoundary, PredicLabel) :- convert_list_to_float_array(PointList, array(Xsize, X)), classifyPointI(X, Xsize, DecisionBoundary, PredicLabel). @@ -95,7 +95,7 @@ foreign(classifyPoint, c, classifyPointI( +pointer(float_array), +integer, %% --Description-- %% Classify the given points, returning the predicted labels for each point. %% -classifyMatrix(DataList, DataRows, PredictionList, ProbsList, ZCols, DecisionBoundary) :- +logistic_regression_classifyMatrix(DataList, DataRows, PredictionList, ProbsList, ZCols, DecisionBoundary) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrows, X)), classifyMatrixI(X, Xsize, Xrows, Y, Ysize, Z, ZCols, ZRows, DecisionBoundary), convert_float_array_to_list(Y, Ysize, PredictionList), @@ -118,7 +118,7 @@ foreign(classifyMatrix, c, classifyMatrixI( +pointer(float_array), +integer, %% --Description-- %% Compute the accuracy of the model on the given predictors and responses, using the given decision boundary. %% -computeAccuracy(DataList, DataRows, ResponsesList, DecisionBoundary, Accuracy) :- +logistic_regression_computeAccuracy(DataList, DataRows, ResponsesList, DecisionBoundary, Accuracy) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(ResponsesList, array(Ysize, Y)), computeAccuracyI(X, Xsize, Xrownum, Y, Ysize, DecisionBoundary, Accuracy). @@ -139,7 +139,7 @@ foreign(computeAccuracy, c, computeAccuracyI( +pointer(float_array), +integer, %% --Description-- %% Compute the error of the model. %% -computeError(DataList, DataRows, ResponsesList, Error) :- +logistic_regression_computeError(DataList, DataRows, ResponsesList, Error) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(ResponsesList, array(Ysize, Y)), computeErrorI(X, Xsize, Xrownum, Y, Ysize, Error). @@ -159,7 +159,7 @@ foreign(computeError, c, computeErrorI( +pointer(float_array), +integer, +intege %% --Description-- %% Train the logistic_regression model on the given input data. %% -train(DataList, DataRows, ResponsesList, Optimizer) :- +logistic_regression_train(DataList, DataRows, ResponsesList, Optimizer) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(ResponsesList, array(Ysize, Y)), trainI(X, Xsize, Xrownum, Y, Ysize, Optimizer). diff --git a/src/methods/logistic_regression/logistic_regression_test.pl b/src/methods/logistic_regression/logistic_regression_test.pl index da8651e..f7d7fac 100644 --- a/src/methods/logistic_regression/logistic_regression_test.pl +++ b/src/methods/logistic_regression/logistic_regression_test.pl @@ -7,7 +7,7 @@ :- use_module('../../helper_files/helper.pl'). reset_Model :- - initModel(1,0,50,0.0001). + logistic_regression_initModel(1,0,50,0.0001). %% %% TESTING predicate predicate/10 diff --git a/src/methods/lsh/lsh.pl b/src/methods/lsh/lsh.pl index 0f6f40d..d0df6d3 100644 --- a/src/methods/lsh/lsh.pl +++ b/src/methods/lsh/lsh.pl @@ -1,8 +1,8 @@ -:- module(lsh, [initAndTrainModel/7, - computeRecall/5, - searchWithQuery/9, - searchNoQuery/7]). +:- module(lsh, [lsh_initAndTrainModel/7, + lsh_computeRecall/5, + lsh_searchWithQuery/9, + lsh_searchNoQuery/7]). %% requirements of library(struct) :- load_files(library(str_decl), @@ -33,7 +33,7 @@ %% --Description-- %% Initiatzes the model and trains it. %% -initAndTrainModel(ReferenceList, ReferenceRows, NumProj, NumTables, HashWidth, SecondHashSize, BucketSize) :- +lsh_initAndTrainModel(ReferenceList, ReferenceRows, NumProj, NumTables, HashWidth, SecondHashSize, BucketSize) :- NumProj >= 0, NumTables >= 0, HashWidth >= 0.0, @@ -56,7 +56,7 @@ foreign(initAndTrainModel, c, initAndTrainModelI(+pointer(float_array), +integer %% --Description-- %% Compute the recall (% of neighbors found) given the neighbors returned by searchWithQuery/12 or searchNoQuery/9 and a "ground truth" set of neighbors. %% -computeRecall(FoundNeighborsList, FoundNeighborsRows, RealNeighborsList, RealNeighborsRows, Percentage) :- +lsh_computeRecall(FoundNeighborsList, FoundNeighborsRows, RealNeighborsList, RealNeighborsRows, Percentage) :- convert_list_to_float_array(FoundNeighborsList, FoundNeighborsRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(RealNeighborsList, RealNeighborsRows, array(Ysize, Yrownum, Y)), computeRecallI(X, Xsize, Xrownum, Y, Ysize, Yrownum, Percentage). @@ -80,7 +80,7 @@ foreign(computeRecall, c, computeRecallI(+pointer(float_array), +integer, +integ %% Compute the nearest neighbors of the points in the given query set and store the output in the given matrices. %% The matrices will be set to the size of n columns by k rows, where n is the number of points in the query dataset and k is the number of neighbors being searched for. %% -searchWithQuery(QueryList, QueryRows, K, ResultingNeighborsList, YCols, DistancesList, ZCols, NumTablesToSearch, T) :- +lsh_searchWithQuery(QueryList, QueryRows, K, ResultingNeighborsList, YCols, DistancesList, ZCols, NumTablesToSearch, T) :- K > 0, NumTablesToSearch >= 0, T >= 0, @@ -109,7 +109,7 @@ foreign(searchWithQuery, c, searchWithQueryI( +pointer(float_array), +integer, %% Compute the nearest neighbors and store the output in the given matrices. %% The matrices will be set to the size of n columns by k rows, where n is the number of points in the query dataset and k is the number of neighbors being searched for. %% -searchNoQuery(K, ResultingNeighborsList, YCols, DistancesList, ZCols, NumTablesToSearch, T) :- +lsh_searchNoQuery(K, ResultingNeighborsList, YCols, DistancesList, ZCols, NumTablesToSearch, T) :- K > 0, NumTablesToSearch >= 0, T >= 0, diff --git a/src/methods/lsh/lsh_test.pl b/src/methods/lsh/lsh_test.pl index d5088a5..5d3a0cc 100644 --- a/src/methods/lsh/lsh_test.pl +++ b/src/methods/lsh/lsh_test.pl @@ -7,146 +7,146 @@ :- use_module('../../helper_files/helper.pl'). reset_Model :- - initAndTrainModel([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, 20, 10, 0.0, 99901, 500). + lsh_initAndTrainModel([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, 20, 10, 0.0, 99901, 500). %% -%% TESTING predicate initAndTrainModel/7 +%% TESTING predicate lsh_initAndTrainModel/7 %% -:- begin_tests(initAndTrainModel). +:- begin_tests(lsh_initAndTrainModel). %% Failure Tests test(lsh_InitAndTrainModel_Negative_NumProj, fail) :- - initAndTrainModel([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, -20, 10, 0.0, 99901, 500). + lsh_initAndTrainModel([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, -20, 10, 0.0, 99901, 500). test(lsh_InitAndTrainModel_Negative_NumTables, fail) :- - initAndTrainModel([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, 20, -10, 0.0, 99901, 500). + lsh_initAndTrainModel([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, 20, -10, 0.0, 99901, 500). test(lsh_InitAndTrainModel_Negative_HashWidth, fail) :- - initAndTrainModel([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, 20, 10, -1.0, 99901, 500). + lsh_initAndTrainModel([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, 20, 10, -1.0, 99901, 500). test(lsh_InitAndTrainModel_Negative_SecondHashSize, fail) :- - initAndTrainModel([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, 20, 10, 0.0, -99901, 500). + lsh_initAndTrainModel([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, 20, 10, 0.0, -99901, 500). test(lsh_InitAndTrainModel_Negative_BucketSize, fail) :- - initAndTrainModel([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, 20, 10, 0.0, 99901, -500). + lsh_initAndTrainModel([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, 20, 10, 0.0, 99901, -500). %% Successful Tests test(lsh_InitAndTrainModel_Normal_Use) :- - initAndTrainModel([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, 20, 10, 0.0, 99901, 500). + lsh_initAndTrainModel([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, 20, 10, 0.0, 99901, 500). test(lsh_InitAndTrainModel_CSV_Input) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - train(Data, 4, 25, 15, 1.5, 99901, 200). + lsh_initAndTrainModel(Data, 4, 25, 15, 1.5, 99901, 200). -:- end_tests(initAndTrainModel). +:- end_tests(lsh_initAndTrainModel). %% -%% TESTING predicate computeRecall/5 +%% TESTING predicate lsh_computeRecall/5 %% -:- begin_tests(computeRecall). +:- begin_tests(lsh_computeRecall). %% Failure Tests test(lsh_ComputeRecall_Wrong_Dimensions, [error(_, system_error('Error'))]) :- reset_Model, - computeRecall([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, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, _). + lsh_computeRecall([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, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, _). %% Successful Tests test(lsh_ComputeRecall_Normal_Use) :- reset_Model, - computeRecall([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, [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, _). + lsh_computeRecall([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, [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, _). -:- end_tests(computeRecall). +:- end_tests(lsh_computeRecall). %% -%% TESTING predicate searchWithQuery/10 +%% TESTING predicate lsh_searchWithQuery/10 %% -:- begin_tests(searchWithQuery). +:- begin_tests(lsh_searchWithQuery). %% Failure Tests test(lsh_SearchWithQuery_Wrong_Dimensions, [error(_, system_error('Error'))]) :- reset_Model, - searchWithQuery([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, 3, _, _, _, _, 0, 0). + lsh_searchWithQuery([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, 3, _, _, _, _, 0, 0). test(lsh_SearchWithQuery_Too_High_K, [error(_, system_error('Error'))]) :- reset_Model, - searchWithQuery([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, 10, _, _, _, _, 0, 0). + lsh_searchWithQuery([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, 10, _, _, _, _, 0, 0). test(lsh_SearchWithQuery_Negative_K, fail) :- reset_Model, - searchWithQuery([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, -3, _, _, _, _, 0, 0). + lsh_searchWithQuery([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, -3, _, _, _, _, 0, 0). test(lsh_SearchWithQuery_Negative_NumTablesToSearch, fail) :- reset_Model, - searchWithQuery([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, 3, _, _, _, _, -10, 0). + lsh_searchWithQuery([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, 3, _, _, _, _, -10, 0). test(lsh_SearchWithQuery_Negative_T, fail) :- reset_Model, - searchWithQuery([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, 3, _, _, _, _, 0, -10). + lsh_searchWithQuery([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, 3, _, _, _, _, 0, -10). %% Successful Tests test(lsh_SearchWithQuery_Normal_Use) :- reset_Model, - searchWithQuery([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, 3, NeighborResultsList, _, DistancesList, _, 0, 0), + lsh_searchWithQuery([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, 3, NeighborResultsList, _, DistancesList, _, 0, 0), print('\nNeighborResults: '), print(NeighborResultsList), print('\nDistances: '), print(DistancesList). -:- end_tests(searchWithQuery). +:- end_tests(lsh_searchWithQuery). %% -%% TESTING predicate searchNoQuery/10 +%% TESTING predicate lsh_searchNoQuery/10 %% -:- begin_tests(searchNoQuery). +:- begin_tests(lsh_searchNoQuery). %% Failure Tests test(lsh_SearchNoQuery_Too_High_K, [error(_, system_error('Error'))]) :- reset_Model, - searchNoQuery(10, _, _, _, _, 0, 0). + lsh_searchNoQuery(10, _, _, _, _, 0, 0). test(lsh_SearchNoQuery_Negative_K, fail) :- reset_Model, - searchNoQuery(-3, _, _, _, _, 0, 0). + lsh_searchNoQuery(-3, _, _, _, _, 0, 0). test(lsh_SearchNoQuery_Negative_NumTablesToSearch, fail) :- reset_Model, - searchNoQuery(3, _, _, _, _, -10, 0). + lsh_searchNoQuery(3, _, _, _, _, -10, 0). test(lsh_SearchNoQuery_Negative_T, fail) :- reset_Model, - searchNoQuery(3, _, _, _, _, 0, -10). + lsh_searchNoQuery(3, _, _, _, _, 0, -10). %% Successful Tests test(lsh_SearchNoQuery_Normal_Use) :- reset_Model, - searchNoQuery(3, NeighborResultsList, _, DistancesList, _, 0, 0), + lsh_searchNoQuery(3, NeighborResultsList, _, DistancesList, _, 0, 0), print('\nNeighborResults: '), print(NeighborResultsList), print('\nDistances: '), print(DistancesList). -:- end_tests(searchNoQuery). +:- end_tests(lsh_searchNoQuery). run_lsh_tests :- run_tests. diff --git a/src/methods/naive_bayes_classifier/naive_bayes_classifier.pl b/src/methods/naive_bayes_classifier/naive_bayes_classifier.pl index 898624d..ea840a4 100644 --- a/src/methods/naive_bayes_classifier/naive_bayes_classifier.pl +++ b/src/methods/naive_bayes_classifier/naive_bayes_classifier.pl @@ -1,13 +1,13 @@ -:- module(naive_bayes_classifier, [ initModelWithTrain/6, - initModelNoTrain/3, +:- module(naive_bayes_classifier, [ nbc_initModelWithTrain/6, + nbc_initModelNoTrain/3, - classifyMatrix/5, - means/2, - probabilities/2, - trainMatrix/5, - trainPoint/2, - variances/2]). + nbc_classifyMatrix/5, + nbc_means/2, + nbc_probabilities/2, + nbc_trainMatrix/5, + nbc_trainPoint/2, + nbc_variances/2]). %% requirements of library(struct) :- load_files(library(str_decl), @@ -37,7 +37,7 @@ %% --Description-- %% Initializes the classifier as per the input and then trains it by calculating the sample mean and variances. %% -initModelWithTrain(DataList, DataRows, LabelsList, NumClasses, IncrementalVar, Epsilon) :- +nbc_initModelWithTrain(DataList, DataRows, LabelsList, NumClasses, IncrementalVar, Epsilon) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(LabelsList, array(Ysize, Y)), initModelWithTrainI(X, Xsize, Xrownum, Y, Ysize, NumClasses, IncrementalVar, Epsilon). @@ -60,7 +60,7 @@ foreign(initModelWithTrain, c, initModelWithTrainI( +pointer(float_array), + %% Initialize the Naive Bayes classifier without performing training. %% All of the parameters of the model will be initialized to zero. Be sure to use train before calling classify, otherwise the results may be meaningless. %% -initModelNoTrain(NumClasses, IncrementalVar, Epsilon) :- +nbc_initModelNoTrain(NumClasses, IncrementalVar, Epsilon) :- NumClasses >= 0, Epsilon >= 0, initModelNoTrainI(NumClasses, IncrementalVar, Epsilon). @@ -95,7 +95,7 @@ foreign(initModelNoTrain, c, initModelNoTrainI( +integer, %% Classify the given points using the trained NaiveBayesClassifier model and also return estimates of the probabilities for each class in the given matrix. %% The predicted labels for each point are stored in the given vector. %% -classifyMatrix(DataList, DataRows, PredictionList, ProbsList, ZCols) :- +nbc_classifyMatrix(DataList, DataRows, PredictionList, ProbsList, ZCols) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrows, X)), classifyMatrixI(X, Xsize, Xrows, Y, Ysize, Z, ZCols, ZRows), convert_float_array_to_list(Y, Ysize, PredictionList), @@ -114,7 +114,7 @@ foreign(classifyMatrix, c, classifyMatrixI( +pointer(float_array), +integer, %% --Description-- %% Get the sample means for each class. %% -means(MeansList, XCols) :- +nbc_means(MeansList, XCols) :- meansI(X, XCols, XRows), convert_float_array_to_2d_list(X, XCols, XRows, MeansList). @@ -129,7 +129,7 @@ foreign(means, c, meansI(-pointer(float_array), -integer, -integer)). %% --Description-- %% Get the sample probabilities for each class. %% -probabilities(ProbabilitiesList, XCols) :- +nbc_probabilities(ProbabilitiesList, XCols) :- probabilitiesI(X, XCols, XRows), convert_float_array_to_2d_list(X, XCols, XRows, ProbabilitiesList). @@ -147,7 +147,7 @@ foreign(probabilities, c, probabilitiesI(-pointer(float_array), -integer, -integ %% --Description-- %% Train the Naive Bayes classifier on the given dataset. The data must be the same dimensionality as the existing model parameters. %% -trainMatrix(DataList, DataRows, LabelsList, NumClasses, IncrementalVar) :- +nbc_trainMatrix(DataList, DataRows, LabelsList, NumClasses, IncrementalVar) :- NumClasses >= 0, convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(LabelsList, array(Ysize, Y)), @@ -169,7 +169,7 @@ foreign(trainMatrix, c, trainMatrixI( +pointer(float_array), +integer, +intege %% Train the Naive Bayes classifier on the given point. %% This will use the incremental algorithm for updating the model parameters. The data must be the same dimensionality as the existing model parameters. %% -trainPoint(DataList, Label) :- +nbc_trainPoint(DataList, Label) :- convert_list_to_float_array(DataList, array(Xsize, X)), trainPointI(X, Xsize, Label). @@ -185,7 +185,7 @@ foreign(trainPoint, c, trainPointI( +pointer(float_array), +integer, %% --Description-- %% Get the sample variances for each class. %% -variances(VariancesList, XCols) :- +nbc_variances(VariancesList, XCols) :- variancesI(X, XCols, XRows), convert_float_array_to_2d_list(X, XCols, XRows, VariancesList). diff --git a/src/methods/naive_bayes_classifier/naive_bayes_classifier_test.pl b/src/methods/naive_bayes_classifier/naive_bayes_classifier_test.pl index 8bc7b33..541088c 100644 --- a/src/methods/naive_bayes_classifier/naive_bayes_classifier_test.pl +++ b/src/methods/naive_bayes_classifier/naive_bayes_classifier_test.pl @@ -7,92 +7,92 @@ :- use_module('../../helper_files/helper.pl'). reset_Model_NoTrain :- - initModelNoTrain(2, 0, 0.000001). + nbc_initModelNoTrain(2, 0, 0.000001). reset_Model_WithTrain :- - initModelWithTrain([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.000001). + nbc_initModelWithTrain([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.000001). %% -%% TESTING predicate initModelNoTrain/3 +%% TESTING predicate nbc_initModelNoTrain/3 %% -:- begin_tests(initModelNoTrain). +:- begin_tests(nbc_initModelNoTrain). %% Failure Tests test(nbc_InitModelNoTrain_Negative_NumClasses, fail) :- - initModelNoTrain(-2, 0, 0.000001). + nbc_initModelNoTrain(-2, 0, 0.000001). test(nbc_InitModelNoTrain_Negative_Epsilon, fail) :- - initModelNoTrain(2, 0, -0.0001). + nbc_initModelNoTrain(2, 0, -0.0001). %% Successful Tests test(nbc_InitModelNoTrain_Normal_Use) :- - initModelNoTrain(2, 0, 0.000001). + nbc_initModelNoTrain(2, 0, 0.000001). -:- end_tests(initModelNoTrain). +:- end_tests(nbc_initModelNoTrain). %% -%% TESTING predicate initModelWithTrain/6 +%% TESTING predicate nbc_initModelWithTrain/6 %% -:- begin_tests(initModelWithTrain). +:- begin_tests(nbc_initModelWithTrain). %% Failure Tests test(nbc_InitModelWithTrain_Negative_NumClasses, fail) :- - initModelWithTrain([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.000001). + nbc_initModelWithTrain([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.000001). test(nbc_InitModelWithTrain_Negative_Epsilon, fail) :- - initModelWithTrain([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.000001). + nbc_initModelWithTrain([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.000001). test(nbc_InitModelWithTrain_Too_Short_Label, [error(_,system_error('Error'))]) :- - initModelWithTrain([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.000001). + nbc_initModelWithTrain([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.000001). test(nbc_InitModelWithTrain_Too_Long_Label, [error(_,system_error('Error'))]) :- - initModelWithTrain([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,1], 2, 0, 0.000001). + nbc_initModelWithTrain([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,1], 2, 0, 0.000001). test(nbc_InitModelWithTrain_Too_Many_Label_Classes, [error(_,system_error('Error'))]) :- - initModelWithTrain([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,3], 2, 0, 0.000001). + nbc_initModelWithTrain([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,3], 2, 0, 0.000001). %% Successful Tests test(nbc_InitModelWithTrain_Normal_Use) :- - initModelWithTrain([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.000001). + nbc_initModelWithTrain([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.000001). test(nbc_InitModelWithTrain_CSV_Input) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initModelWithTrain(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 1, 0.0042). + nbc_initModelWithTrain(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 1, 0.0042). -:- end_tests(initModelWithTrain). +:- end_tests(nbc_initModelWithTrain). %% -%% TESTING predicate classifyMatrix/5 +%% TESTING predicate nbc_classifyMatrix/5 %% -:- begin_tests(classifyMatrix). +:- begin_tests(nbc_classifyMatrix). %% Failure Tests test(nbc_ClassifyMatrix_Before_Train, [error(_,system_error('Error'))]) :- reset_Model_NoTrain, - classifyMatrix([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, _, _, _). + nbc_classifyMatrix([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(nbc_ClassifyMatrix_Diffrent_Dims_To_Train, [error(_,system_error('Error'))]) :- reset_Model_WithTrain, - classifyMatrix([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, _, _, _). + nbc_classifyMatrix([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, _, _, _). %% Successful Tests test(nbc_ClassifyMatrix_Normal_Use) :- reset_Model_WithTrain, - classifyMatrix([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, PredictionList, _, ProbabilitiesList), + nbc_classifyMatrix([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, PredictionList, _, ProbabilitiesList), print('\nPredictions: '), print(PredictionList), print('\nProbabilities: '), @@ -102,25 +102,25 @@ test(nbc_ClassifyMatrix_CSV_Input) :- reset_Model_WithTrain, open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - classifyMatrix(Data, 4, PredictionList, _, ProbabilitiesList), + nbc_classifyMatrix(Data, 4, PredictionList, _, ProbabilitiesList), print('\nPredictions: '), print(PredictionList), print('\nProbabilities: '), print(ProbabilitiesList). -:- end_tests(classifyMatrix). +:- end_tests(nbc_classifyMatrix). %% -%% TESTING predicate means/2 +%% TESTING predicate nbc_means/2 %% -:- begin_tests(means). +:- begin_tests(nbc_means). %% Failure Tests test(nbc_Means_Before_Train, [error(_,system_error('Error'))]) :- reset_Model_NoTrain, - means(MeansList, _), + nbc_means(MeansList, _), print('\nMeans: '), print(MeansList). @@ -129,23 +129,23 @@ test(nbc_Means_Before_Train, [error(_,system_error('Error'))]) :- test(nbc_Means_Normal_Use) :- reset_Model_WithTrain, - means(MeansList, _), + nbc_means(MeansList, _), print('\nMeans: '), print(MeansList). -:- end_tests(means). +:- end_tests(nbc_means). %% -%% TESTING predicate probabilities/2 +%% TESTING predicate nbc_probabilities/2 %% -:- begin_tests(probabilities). +:- begin_tests(nbc_probabilities). %% Failure Tests test(nbc_Probabilities_Before_Train, [error(_,system_error('Error'))]) :- reset_Model_NoTrain, - probabilities(ProbabilitiesList, _), + nbc_probabilities(ProbabilitiesList, _), print('\nProbabilities: '), print(ProbabilitiesList). @@ -154,46 +154,46 @@ test(nbc_Probabilities_Before_Train, [error(_,system_error('Error'))]) :- test(nbc_Probabilities_Normal_Use) :- reset_Model_WithTrain, - probabilities(ProbabilitiesList, _), + nbc_probabilities(ProbabilitiesList, _), print('\nProbabilities: '), print(ProbabilitiesList). -:- end_tests(probabilities). +:- end_tests(nbc_probabilities). %% -%% TESTING predicate trainMatrix/5 +%% TESTING predicate nbc_trainMatrix/5 %% -:- begin_tests(trainMatrix). +:- begin_tests(nbc_trainMatrix). %% Failure Tests test(nbc_TrainMatrix_Negative_NumClasses, fail) :- reset_Model_NoTrain, - trainMatrix([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). + nbc_trainMatrix([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). test(nbc_TrainMatrix_Too_Short_Label, [error(_,system_error('The number of data points does not match the number of labels!'))]) :- reset_Model_NoTrain, - trainMatrix([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). + nbc_trainMatrix([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). test(nbc_TrainMatrix_Too_Long_Label, [error(_,system_error('The number of data points does not match the number of labels!'))]) :- reset_Model_NoTrain, - trainMatrix([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,1], 2, 0). + nbc_trainMatrix([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,1], 2, 0). test(nbc_TrainMatrix_Too_Many_Label_Classes, [error(_,system_error('The given Labels dont fit the format [0,Numclasses-1]!'))]) :- reset_Model_NoTrain, - trainMatrix([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,3], 2, 0). + nbc_trainMatrix([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,3], 2, 0). test(nbc_TrainMatrix_After_InitTrain, [error(_,system_error('addition: incompatible matrix dimensions: 3x1 and 4x1'))]) :- reset_Model_WithTrain, - trainMatrix([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, [0,1,0], 2, 0). + nbc_trainMatrix([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, [0,1,0], 2, 0). %% Successful Tests test(nbc_TrainMatrix_Normal_Use) :- reset_Model_NoTrain, - trainMatrix([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). + nbc_trainMatrix([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). @@ -201,51 +201,51 @@ test(nbc_TrainMatrix_CSV_Input) :- reset_Model_NoTrain, open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - trainMatrix(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0). + nbc_trainMatrix(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0). -:- end_tests(trainMatrix). +:- end_tests(nbc_trainMatrix). %% -%% TESTING predicate trainPoint/5 +%% TESTING predicate nbc_trainPoint/5 %% -:- begin_tests(trainPoint). +:- begin_tests(nbc_trainPoint). %% Failure Tests test(nbc_TrainPoint_Bad_Label, [error(_,system_error('Error'))]) :- reset_Model_NoTrain, - trainPoint([5.1,3.5,1.4], -5). + nbc_trainPoint([5.1,3.5,1.4], -5). test(nbc_TrainPoint_Too_Long_Point, [error(_,system_error('Error'))]) :- reset_Model_WithTrain, - trainPoint([5.1,3.5,1.4,3.5], 0). + nbc_trainPoint([5.1,3.5,1.4,3.5], 0). %% Successful Tests %%test(nbc_TrainPoint_Normal_Use) :- %% reset_Model_NoTrain, -%% trainPoint([5.1,3.5,1.4], 1). +%% nbc_trainPoint([5.1,3.5,1.4], 1). test(nbc_TrainPoint_After_InitTrain) :- reset_Model_WithTrain, - trainPoint([5.1,3.5,1.4], 1). + nbc_trainPoint([5.1,3.5,1.4], 1). -:- end_tests(trainPoint). +:- end_tests(nbc_trainPoint). %% -%% TESTING predicate variances/2 +%% TESTING predicate nbc_variances/2 %% -:- begin_tests(variances). +:- begin_tests(nbc_variances). %% Failure Tests test(nbc_Variances_Before_Train, [error(_,system_error('Error'))]) :- reset_Model_NoTrain, - variances(VariancesList, _), + nbc_variances(VariancesList, _), print('\nVariances: '), print(VariancesList). @@ -254,11 +254,11 @@ test(nbc_Variances_Before_Train, [error(_,system_error('Error'))]) :- test(nbc_Variances_Normal_Use) :- reset_Model_WithTrain, - variances(VariancesList, _), + nbc_variances(VariancesList, _), print('\nVariances: '), print(VariancesList). -:- end_tests(variances). +:- end_tests(nbc_variances). run_naive_bayes_classifier_tests :- run_tests. diff --git a/src/methods/perceptron/perceptron.pl b/src/methods/perceptron/perceptron.pl index b71547e..f829b50 100644 --- a/src/methods/perceptron/perceptron.pl +++ b/src/methods/perceptron/perceptron.pl @@ -1,10 +1,10 @@ -:- module(perceptron, [ initModelNoTrain/3, - initModelWithTrain/5, - biases/1, - classify/3, - train/5, - weights/2]). +:- module(perceptron, [ perceptron_initModelNoTrain/3, + perceptron_initModelWithTrain/5, + perceptron_biases/1, + perceptron_classify/3, + perceptron_train/5, + perceptron_weights/2]). %% requirements of library(struct) :- load_files(library(str_decl), @@ -31,7 +31,7 @@ %% --Description-- %% Initilizes the perceptron model and its weight matrix but doesnt train it. %% -initModelNoTrain(NumClasses, Dimensionality, MaxIterations) :- +perceptron_initModelNoTrain(NumClasses, Dimensionality, MaxIterations) :- NumClasses >= 0, Dimensionality > 0, MaxIterations >= 0, @@ -50,7 +50,7 @@ foreign(initModelNoTrain, c, initModelNoTrainI(+integer, +integer, +integer)). %% --Description-- %% Initilizes the perceptron model and its weight matrix and trains it with the given data. %% -initModelWithTrain(DataList, DataRows, LabelsList, NumClasses, MaxIterations) :- +perceptron_initModelWithTrain(DataList, DataRows, LabelsList, NumClasses, MaxIterations) :- NumClasses >= 0, MaxIterations >= 0, convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), @@ -70,7 +70,7 @@ foreign(initModelWithTrain, c, initModelWithTrainI( +pointer(float_array), + %% --Description-- %% Get the biases. %% -biases(BiasesList) :- +perceptron_biases(BiasesList) :- biasesI(Y, Ysize), convert_float_array_to_list(Y, Ysize, BiasesList). @@ -85,7 +85,7 @@ foreign(biases, c, biasesI(-pointer(float_array), -integer)). %% --Description-- %% After training, use the weights matrix to classify test, and put the predicted classes in predictedLabels. %% -classify(TestList, TestRows, PredictLabelList) :- +perceptron_classify(TestList, TestRows, PredictLabelList) :- convert_list_to_float_array(TestList, TestRows, array(Xsize, Xrows, X)), classifyI(X, Xsize, Xrows, Y, Ysize), convert_float_array_to_list(Y, Ysize, PredictLabelList). @@ -104,7 +104,7 @@ foreign(classify, c, classifyI( +pointer(float_array), +integer, +integer, %% --Description-- %% Train the perceptron on the given data for up to the maximum number of iterations. This training does not reset the model weights, so you can call train/8 on multiple datasets sequentially. %% -train(DataList, DataRows, LabelsList, NumClasses, WeightsList) :- +perceptron_train(DataList, DataRows, LabelsList, NumClasses, WeightsList) :- NumClasses >= 0, convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(LabelsList, array(Ysize, Y)), @@ -125,7 +125,7 @@ foreign(train, c, trainI( +pointer(float_array), +integer, +integer, %% --Description-- %% Get the weight matrix. %% -weights(WeightsList, XCols) :- +perceptron_weights(WeightsList, XCols) :- weightsI(X, XCols, XRows), convert_float_array_to_2d_list(X, XCols, XRows, WeightsList). diff --git a/src/methods/perceptron/perceptron_test.pl b/src/methods/perceptron/perceptron_test.pl index bb8d3db..bd77ad9 100644 --- a/src/methods/perceptron/perceptron_test.pl +++ b/src/methods/perceptron/perceptron_test.pl @@ -7,92 +7,92 @@ :- use_module('../../helper_files/helper.pl'). reset_Model_NoTrain :- - initModelNoTrain(2, 3, 1000). + perceptron_initModelNoTrain(2, 3, 1000). reset_Model_WithTrain :- - initModelWithTrain([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, 1000). + perceptron_initModelWithTrain([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, 1000). %% -%% TESTING predicate initModelNoTrain/3 +%% TESTING predicate perceptron_initModelNoTrain/3 %% -:- begin_tests(initModelNoTrain). +:- begin_tests(perceptron_initModelNoTrain). %% Failure Tests test(perceptron_InitModelNoTrain_Negative_NumClasses, fail) :- - initModelNoTrain(-2, 3, 1000). + perceptron_initModelNoTrain(-2, 3, 1000). test(perceptron_InitModelNoTrain_Negative_Dimensionality, fail) :- - initModelNoTrain(2, -3, 1000). + perceptron_initModelNoTrain(2, -3, 1000). test(perceptron_InitModelNoTrain_Negative_MaxIterations, fail) :- - initModelNoTrain(2, 3, -1000). + perceptron_initModelNoTrain(2, 3, -1000). %% Successful Tests test(perceptron_InitModelNoTrain_Normal_Use) :- - initModelNoTrain(2, 3, 1000). + perceptron_initModelNoTrain(2, 3, 1000). test(perceptron_InitModelNoTrain_Alternative_Input) :- - initModelNoTrain(0, 1, 1000). + perceptron_initModelNoTrain(0, 1, 1000). -:- end_tests(initModelNoTrain). +:- end_tests(perceptron_initModelNoTrain). %% -%% TESTING predicate initModelWithTrain/5 +%% TESTING predicate perceptron_initModelWithTrain/5 %% -:- begin_tests(initModelWithTrain). +:- begin_tests(perceptron_initModelWithTrain). %% Failure Tests test(perceptron_InitModelWithTrain_Negative_NumClasses, fail) :- - initModelWithTrain([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, 1000). + perceptron_initModelWithTrain([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, 1000). test(perceptron_InitModelWithTrain_Negative_MaxIterations, fail) :- - initModelWithTrain([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, -1000). + perceptron_initModelWithTrain([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, -1000). test(random_forest_InitModelWithTrainNoWeights_Too_Short_Label, [error(_,system_error('The number of data points does not match the number of labels!'))]) :- - initModelWithTrain([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, 1000). + perceptron_initModelWithTrain([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, 1000). test(random_forest_InitModelWithTrainNoWeights_Too_Long_Label, [error(_,system_error('The number of data points does not match the number of labels!'))]) :- - initModelWithTrain([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,1], 2, 1000). + perceptron_initModelWithTrain([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,1], 2, 1000). test(random_forest_InitModelWithTrainNoWeights_Too_Many_Label_Classes, [error(_,system_error('The given Labels dont fit the format [0,Numclasses-1]!'))]) :- - initModelWithTrain([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,3], 2, 1000). + perceptron_initModelWithTrain([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,3], 2, 1000). %% Successful Tests test(perceptron_InitModelWithTrain_Normal_Use) :- - initModelWithTrain([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, 1000). + perceptron_initModelWithTrain([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, 1000). test(perceptron_InitModelWithTrain_CSV_Input) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initModelWithTrain(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 1000). + perceptron_initModelWithTrain(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 1000). -:- end_tests(initModelWithTrain). +:- end_tests(perceptron_initModelWithTrain). %% -%% TESTING predicate biases/1 +%% TESTING predicate perceptron_biases/1 %% -:- begin_tests(biases). +:- begin_tests(perceptron_biases). %% Failure Tests %% Doesnt cause an Error test(perceptron_Biases_Before_Train) :- reset_Model_NoTrain, - biases(Biases), + perceptron_biases(Biases), print('\nBiases: '), print(Biases). @@ -101,107 +101,107 @@ test(perceptron_Biases_Before_Train) :- test(perceptron_Biases_AfterTrain) :- reset_Model_WithTrain, - biases(Biases), + perceptron_biases(Biases), print('\nBiases: '), print(Biases). -:- end_tests(biases). +:- end_tests(perceptron_biases). %% -%% TESTING predicate classify/3 +%% TESTING predicate perceptron_classify/3 %% -:- begin_tests(classify). +:- begin_tests(perceptron_classify). %% Failure Tests test(perceptron_Classify_Before_Train_Wrong_Dims, [error(_,system_error('matrix multiplication: incompatible matrix dimensions: 2x3 and 4x1'))]) :- reset_Model_NoTrain, - 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], 4, _). + perceptron_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], 4, _). test(perceptron_Classify_Different_Dims_Than_Train, [error(_,system_error('matrix multiplication: incompatible matrix dimensions: 2x3 and 4x1'))]) :- reset_Model_WithTrain, - 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], 4, _). + perceptron_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], 4, _). %% Successful Tests test(perceptron_Classify_Before_Train) :- reset_Model_NoTrain, - classify([1.0,2.0,3.0], 3, _). + perceptron_classify([1.0,2.0,3.0], 3, _). test(perceptron_Classify_Normal_Use) :- reset_Model_WithTrain, - 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, PredictList), + perceptron_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, PredictList), print('\nPredicted Labels: '), print(PredictList). -:- end_tests(classify). +:- end_tests(perceptron_classify). %% -%% TESTING predicate train/5 +%% TESTING predicate perceptron_train/5 %% -:- begin_tests(train). +:- begin_tests(perceptron_train). %% Failure Tests test(perceptron_Train_Negaitve_NumClasses, fail) :- reset_Model_NoTrain, - 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, [0.1,0.2,0.3,0.4]). + 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, [0.1,0.2,0.3,0.4]). %% Seems to overide the dimensionality from reset_Model_NoTrain test(perceptron_Train_Too_Small_Data_Dims) :- reset_Model_NoTrain, - 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], 4, [0,1,0], 2, [0.1,0.2,0.3]). + 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], 4, [0,1,0], 2, [0.1,0.2,0.3]). test(perceptron_Train_Too_Short_Label, [error(_,system_error('The number of data points does not match the number of labels!'))]) :- reset_Model_NoTrain, - 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], 2, [0.1,0.2,0.3,0.4]). + 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], 2, [0.1,0.2,0.3,0.4]). test(perceptron_Train_Too_Long_Label, [error(_,system_error('The number of data points does not match the number of labels!'))]) :- reset_Model_NoTrain, - 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,1], 2, [0.1,0.2,0.3,0.4]). + 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,0,1], 2, [0.1,0.2,0.3,0.4]). test(perceptron_Train_Too_Many_Label_Classes, [error(_,system_error('The given Labels dont fit the format [0,Numclasses-1]!'))]) :- reset_Model_NoTrain, - 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,2,3], 2, [0.1,0.2,0.3,0.4]). + 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,2,3], 2, [0.1,0.2,0.3,0.4]). test(perceptron_Train_Too_Short_Weights, [error(_,system_error('The number of data points does not match the number of weights!'))]) :- reset_Model_NoTrain, - 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, [0.1,0.2]). + 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, [0.1,0.2]). test(perceptron_Train_Too_Long_Weights, [error(_,system_error('The number of data points does not match the number of weights!'))]) :- reset_Model_NoTrain, - 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, [0.1,0.2,0.3,0.4,0.6,0.7]). + 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, [0.1,0.2,0.3,0.4,0.6,0.7]). %% Successful Tests test(perceptron_Train_Normal_Use) :- reset_Model_NoTrain, - 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, [0.1,0.2,0.3,0.4]). + 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, [0.1,0.2,0.3,0.4]). -:- end_tests(train). +:- end_tests(perceptron_train). %% -%% TESTING predicate weights/2 +%% TESTING predicate perceptron_weights/2 %% -:- begin_tests(weights). +:- begin_tests(perceptron_weights). %% Failure Tests %% Doesnt cause an error test(perceptron_Weights_Before_Train) :- reset_Model_NoTrain, - weights(Weights, _), + perceptron_weights(Weights, _), print('\nWeights: '), print(Weights). @@ -210,11 +210,11 @@ test(perceptron_Weights_Before_Train) :- test(perceptron_Weights_AfterTrain) :- reset_Model_WithTrain, - weights(Weights, _), + perceptron_weights(Weights, _), print('\nWeights: '), print(Weights). -:- end_tests(weights). +:- end_tests(perceptron_weights). run_perceptron_tests :- run_tests. diff --git a/src/methods/radical/radical.pl b/src/methods/radical/radical.pl index b51f77c..902e2b7 100644 --- a/src/methods/radical/radical.pl +++ b/src/methods/radical/radical.pl @@ -1,5 +1,5 @@ -:- module(radical, [ initModel/5, +:- module(radical, [ radical_initModel/5, doRadical/6, doRadical2D/3]). @@ -31,7 +31,7 @@ %% --Description-- %% Initilizes the radical model. %% -initModel(NoiseStdDev, Replicates, Angles, Sweeps, M) :- +radical_initModel(NoiseStdDev, Replicates, Angles, Sweeps, M) :- NoiseStdDev >= 0, Replicates > 0, Angles > 0, diff --git a/src/methods/radical/radical_test.pl b/src/methods/radical/radical_test.pl index b915cbb..6fb60d3 100644 --- a/src/methods/radical/radical_test.pl +++ b/src/methods/radical/radical_test.pl @@ -7,12 +7,12 @@ :- use_module('../../helper_files/helper.pl'). reset_Model :- - initModel(0.175,30,150,0,0). + radical_initModel(0.175,30,150,0,0). %% -%% TESTING predicate initModel/5 +%% TESTING predicate radical_initModel/5 %% -:- begin_tests(initModel). +:- begin_tests(radical_initModel). %% Failure Tests @@ -29,24 +29,24 @@ test(radical_InitModel_DoRadical2D_No_Init) :- print(Result). test(radical_InitModel_Negative_NoiseStdDev, fail) :- - initModel(-0.175,30,150,0,0). + radical_initModel(-0.175,30,150,0,0). test(radical_InitModel_Negative_Replicates, fail) :- - initModel(0.175,-30,150,0,0). + radical_initModel(0.175,-30,150,0,0). test(radical_InitModel_Negative_Angles, fail) :- - initModel(0.175,30,-150,0,0). + radical_initModel(0.175,30,-150,0,0). test(radical_InitModel_Negative_Sweeps, fail) :- - initModel(0.175,30,150,-1,0). + radical_initModel(0.175,30,150,-1,0). %% Successful Tests test(radical_InitModel_Normal_Use) :- - initModel(0.175,30,150,0,0). + radical_initModel(0.175,30,150,0,0). -:- end_tests(initModel). +:- end_tests(radical_initModel). diff --git a/src/methods/random_forest/random_forest.pl b/src/methods/random_forest/random_forest.pl index b88d027..c299e50 100644 --- a/src/methods/random_forest/random_forest.pl +++ b/src/methods/random_forest/random_forest.pl @@ -1,12 +1,12 @@ -:- module(random_forest, [ initModelNoTrain/0, - initModelWithTrainNoWeights/8, - initModelWithTrainWithWeights/9, - classifyPoint/3, - classifyMatrix/5, - numTrees/1, - trainNoWeights/9, - trainWithWeights/10]). +:- module(random_forest, [ random_forest_initModelNoTrain/0, + random_forest_initModelWithTrainNoWeights/8, + random_forest_initModelWithTrainWithWeights/9, + random_forest_classifyPoint/3, + random_forest_classifyMatrix/5, + random_forest_numTrees/1, + random_forest_trainNoWeights/9, + random_forest_trainWithWeights/10]). %% requirements of library(struct) :- load_files(library(str_decl), @@ -32,7 +32,7 @@ %% --Description-- %% Initilizes the model without training it. %% -initModelNoTrain :- +random_forest_initModelNoTrain :- initModelNoTrainI(0). foreign(initModelNoTrain, c, initModelNoTrainI(+integer)). @@ -52,7 +52,7 @@ foreign(initModelNoTrain, c, initModelNoTrainI(+integer)). %% --Description-- %% Initilizes the model and trains it but does not apply weights to it. %% -initModelWithTrainNoWeights(DataList, DataRows, LabelsList, NumClasses, NumTrees, MinimumLeafSize, MinimumGainSplit, MaximumDepth) :- +random_forest_initModelWithTrainNoWeights(DataList, DataRows, LabelsList, NumClasses, NumTrees, MinimumLeafSize, MinimumGainSplit, MaximumDepth) :- NumClasses >= 0, NumTrees > 0, MinimumLeafSize > 0, @@ -83,7 +83,7 @@ foreign(initModelWithTrainNoWeights, c, initModelWithTrainNoWeightsI( %% --Description-- %% Initilizes the model, trains it and applies weights to it. %% -initModelWithTrainWithWeights(DataList, DataRows, LabelsList, NumClasses, WeightsList, NumTrees, MinimumLeafSize, MinimumGainSplit, MaximumDepth) :- +random_forest_initModelWithTrainWithWeights(DataList, DataRows, LabelsList, NumClasses, WeightsList, NumTrees, MinimumLeafSize, MinimumGainSplit, MaximumDepth) :- NumClasses >= 0, NumTrees > 0, MinimumLeafSize > 0, @@ -113,7 +113,7 @@ foreign(initModelWithTrainWithWeights, c, initModelWithTrainWithWeightsI( %% Predict the class of the given point and return the predicted class probabilities for each class. %% Random forest has to be train before using this. %% -classifyPoint(DataList, Prediction, AssignList) :- +random_forest_classifyPoint(DataList, Prediction, AssignList) :- convert_list_to_float_array(DataList, array(Xsize, X)), classifyPointI(X, Xsize, Prediction, Y, Ysize), convert_float_array_to_list(Y, Ysize, AssignList). @@ -134,7 +134,7 @@ foreign(classifyPoint, c, classifyPointI( +pointer(float_array), +integer, %% Predict the classes of each point in the given dataset, also returning the predicted class probabilities for each point. %% Random forest has to be train before using this. %% -classifyMatrix(DataList, DataRows, PredictionList, ProbsList, ZCols) :- +random_forest_classifyMatrix(DataList, DataRows, PredictionList, ProbsList, ZCols) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrows, X)), classifyMatrixI(X, Xsize, Xrows, Y, Ysize, Z, ZCols, ZRows), convert_float_array_to_list(Y, Ysize, PredictionList), @@ -153,7 +153,7 @@ foreign(classifyMatrix, c, classifyMatrixI( +pointer(float_array), +integer, %% --Description-- %% Get the number of trees in the forest. %% -numTrees(NumTrees) :- +random_forest_numTrees(NumTrees) :- numTreesI(NumTrees). foreign(numTrees, c, numTreesI([-integer])). @@ -174,7 +174,7 @@ foreign(numTrees, c, numTreesI([-integer])). %% Train the random forest on the given labeled training data with the given number of trees. %% The minimumLeafSize and minimumGainSplit parameters are given to each individual decision tree during tree building. %% -trainNoWeights(DataList, DataRows, LabelsList, NumClasses, NumTrees, MinimumLeafSize, MinimumGainSplit, MaximumDepth, Entropy) :- +random_forest_trainNoWeights(DataList, DataRows, LabelsList, NumClasses, NumTrees, MinimumLeafSize, MinimumGainSplit, MaximumDepth, Entropy) :- NumClasses >= 0, NumTrees > 0, MinimumLeafSize > 0, @@ -207,7 +207,7 @@ foreign(trainNoWeights, c, trainNoWeightsI( +pointer(float_array), +integer, %% Train the random forest on the given weighted labeled training data with the given number of trees. %% The minimumLeafSize and minimumGainSplit parameters are given to each individual decision tree during tree building. %% -trainWithWeights(DataList, DataRows, LabelsList, NumClasses, WeightsList, NumTrees, MinimumLeafSize, MinimumGainSplit, MaximumDepth, Entropy) :- +random_forest_trainWithWeights(DataList, DataRows, LabelsList, NumClasses, WeightsList, NumTrees, MinimumLeafSize, MinimumGainSplit, MaximumDepth, Entropy) :- NumClasses >= 0, NumTrees > 0, MinimumLeafSize > 0, diff --git a/src/methods/random_forest/random_forest_test.pl b/src/methods/random_forest/random_forest_test.pl index ac6b4e1..249a498 100644 --- a/src/methods/random_forest/random_forest_test.pl +++ b/src/methods/random_forest/random_forest_test.pl @@ -7,10 +7,10 @@ :- use_module('../../helper_files/helper.pl'). reset_Model_NoTrain :- - initModelNoTrain. + random_forest_initModelNoTrain. reset_Model_WithTrain :- - initModelWithTrainNoWeights([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, 20, 1, 0.0000001, 0). + random_forest_initModelWithTrainNoWeights([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, 20, 1, 0.0000001, 0). %% @@ -22,129 +22,129 @@ reset_Model_WithTrain :- %% Successful Tests test(random_forest_InitModelNoTrain) :- - initModelNoTrain. + random_forest_initModelNoTrain. :- end_tests(initModelNoTrainI). %% -%% TESTING predicate initModelWithTrainNoWeights/8 +%% TESTING predicate random_forest_initModelWithTrainNoWeights/8 %% -:- begin_tests(initModelWithTrainNoWeights). +:- begin_tests(random_forest_initModelWithTrainNoWeights). %% Failure Tests test(random_forest_InitModelWithTrainNoWeights_Negative_NumClasses, fail) :- - initModelWithTrainNoWeights([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, 20, 1, 0.0000001, 0). + random_forest_initModelWithTrainNoWeights([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, 20, 1, 0.0000001, 0). test(random_forest_InitModelWithTrainNoWeights_Negative_NumTrees, fail) :- - initModelWithTrainNoWeights([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, -20, 1, 0.0000001, 0). + random_forest_initModelWithTrainNoWeights([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, -20, 1, 0.0000001, 0). test(random_forest_InitModelWithTrainNoWeights_Negative_MinLeafSize, fail) :- - initModelWithTrainNoWeights([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, 20, -1, 0.0000001, 0). + random_forest_initModelWithTrainNoWeights([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, 20, -1, 0.0000001, 0). test(random_forest_InitModelWithTrainNoWeights_Negative_MinGainSplit, fail) :- - initModelWithTrainNoWeights([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, 20, 1, -0.0000001, 0). + random_forest_initModelWithTrainNoWeights([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, 20, 1, -0.0000001, 0). test(random_forest_InitModelWithTrainNoWeights_Negative_MaxDepth, fail) :- - initModelWithTrainNoWeights([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, 20, 1, 0.0000001, -1). + random_forest_initModelWithTrainNoWeights([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, 20, 1, 0.0000001, -1). test(random_forest_InitModelWithTrainNoWeights_Too_Short_Label, [error(_,system_error('The number of data points does not match the number of labels!'))]) :- - initModelWithTrainNoWeights([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, 20, 1, 0.0000001, 0). + random_forest_initModelWithTrainNoWeights([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, 20, 1, 0.0000001, 0). test(random_forest_InitModelWithTrainNoWeights_Too_Long_Label, [error(_,system_error('The number of data points does not match the number of labels!'))]) :- - initModelWithTrainNoWeights([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,1], 2, 20, 1, 0.0000001, 0). + random_forest_initModelWithTrainNoWeights([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,1], 2, 20, 1, 0.0000001, 0). test(random_forest_InitModelWithTrainNoWeights_Too_Many_Label_Classes, [error(_,system_error('The given Labels dont fit the format [0,Numclasses-1]!'))]) :- - initModelWithTrainNoWeights([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,3], 2, 20, 1, 0.0000001, 0). + random_forest_initModelWithTrainNoWeights([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,3], 2, 20, 1, 0.0000001, 0). %% Successful Tests test(random_forest_InitModelWithTrainNoWeights_Normal_Use) :- - initModelWithTrainNoWeights([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, 20, 1, 0.0000001, 0). + random_forest_initModelWithTrainNoWeights([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, 20, 1, 0.0000001, 0). test(random_forest_InitModelWithTrainNoWeights_CSV_Input) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initModelWithTrainNoWeights(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 20, 1, 0.0000001, 0). + random_forest_initModelWithTrainNoWeights(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 20, 1, 0.0000001, 0). -:- end_tests(initModelWithTrainNoWeights). +:- end_tests(random_forest_initModelWithTrainNoWeights). %% -%% TESTING predicate initModelWithTrainWithWeights/9 +%% TESTING predicate random_forest_initModelWithTrainWithWeights/9 %% -:- begin_tests(initModelWithTrainWithWeights). +:- begin_tests(random_forest_initModelWithTrainWithWeights). %% Failure Tests test(random_forest_InitModelWithTrainWithWeights_Negative_NumClasses, fail) :- - initModelWithTrainWithWeights([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.5,0.1,0.7,1.2], 20, 1, 0.0000001, 0). + random_forest_initModelWithTrainWithWeights([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.5,0.1,0.7,1.2], 20, 1, 0.0000001, 0). test(random_forest_InitModelWithTrainWithWeights_Negative_NumTrees, fail) :- - initModelWithTrainWithWeights([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.5,0.1,0.7,1.2], -20, 1, 0.0000001, 0). + random_forest_initModelWithTrainWithWeights([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.5,0.1,0.7,1.2], -20, 1, 0.0000001, 0). test(random_forest_InitModelWithTrainWithWeights_Negative_MinLeafSize, fail) :- - initModelWithTrainWithWeights([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.5,0.1,0.7,1.2], 20, -1, 0.0000001, 0). + random_forest_initModelWithTrainWithWeights([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.5,0.1,0.7,1.2], 20, -1, 0.0000001, 0). test(random_forest_initModelWithTrainWithWeights_Negative_MinGainSplit, fail) :- - initModelWithTrainWithWeights([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.5,0.1,0.7,1.2], 20, 1, -0.0000001, 0). + random_forest_initModelWithTrainWithWeights([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.5,0.1,0.7,1.2], 20, 1, -0.0000001, 0). test(random_forest_InitModelWithTrainWithWeights_Negative_MaxDepth, fail) :- - initModelWithTrainWithWeights([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.5,0.1,0.7,1.2], 20, 1, 0.0000001, -1). + random_forest_initModelWithTrainWithWeights([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.5,0.1,0.7,1.2], 20, 1, 0.0000001, -1). test(random_forest_InitModelWithTrainWithWeights_Too_Short_Label, [error(_,system_error('The number of data points does not match the number of labels!'))]) :- - initModelWithTrainWithWeights([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.5,0.1,0.7,1.2], 20, 1, 0.0000001, 0). + random_forest_initModelWithTrainWithWeights([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.5,0.1,0.7,1.2], 20, 1, 0.0000001, 0). test(random_forest_InitModelWithTrainWithWeights_Too_Long_Label, [error(_,system_error('The number of data points does not match the number of labels!'))]) :- - initModelWithTrainWithWeights([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,1], 2, [0.5,0.1,0.7,1.2], 20, 1, 0.0000001, 0). + random_forest_initModelWithTrainWithWeights([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,1], 2, [0.5,0.1,0.7,1.2], 20, 1, 0.0000001, 0). test(random_forest_InitModelWithTrainWithWeights_Too_Many_Label_Classes, [error(_,system_error('The given Labels dont fit the format [0,Numclasses-1]!'))]) :- - initModelWithTrainWithWeights([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,3], 2, [0.5,0.1,0.7,1.2], 20, 1, 0.0000001, 0). + random_forest_initModelWithTrainWithWeights([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,3], 2, [0.5,0.1,0.7,1.2], 20, 1, 0.0000001, 0). test(random_forest_InitModelWithTrainWithWeights_Too_Short_Weights, [error(_,system_error('The number of data points does not match the number of weights!'))]) :- - initModelWithTrainWithWeights([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.5,0.1], 20, 1, 0.0000001, 0). + random_forest_initModelWithTrainWithWeights([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.5,0.1], 20, 1, 0.0000001, 0). test(random_forest_InitModelWithTrainWithWeights_Too_Long_Weights, [error(_,system_error('The number of data points does not match the number of weights!'))]) :- - initModelWithTrainWithWeights([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.5,0.1,0.7,1.2,0.43,2.0], 20, 1, 0.0000001, 0). + random_forest_initModelWithTrainWithWeights([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.5,0.1,0.7,1.2,0.43,2.0], 20, 1, 0.0000001, 0). %% Successful Tests test(random_forest_InitModelWithTrainWithWeights_Normal_Use) :- - initModelWithTrainWithWeights([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.5,0.1,0.7,1.2], 20, 1, 0.0000001, 0). + random_forest_initModelWithTrainWithWeights([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.5,0.1,0.7,1.2], 20, 1, 0.0000001, 0). test(random_forest_InitModelWithTrainWithWeights_CSV_Input) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initModelWithTrainWithWeights(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, [0.5,0.1,0.7,1.2,0.5,3.4,0.9,0.5,0.5,1.2], 20, 1, 0.0000001, 0). + random_forest_initModelWithTrainWithWeights(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, [0.5,0.1,0.7,1.2,0.5,3.4,0.9,0.5,0.5,1.2], 20, 1, 0.0000001, 0). -:- end_tests(initModelWithTrainWithWeights). +:- end_tests(random_forest_initModelWithTrainWithWeights). %% -%% TESTING predicate classifyPoint/3 +%% TESTING predicate random_forest_classifyPoint/3 %% -:- begin_tests(classifyPoint). +:- begin_tests(random_forest_classifyPoint). %% Failure Tests test(random_forest_ClassifyPoint_Before_Train, [error(_,system_error('RandomForest::Classify(): no random forest trained!'))]) :- reset_Model_NoTrain, - classifyPoint([5.1,3.5,1.4], _, _). + random_forest_classifyPoint([5.1,3.5,1.4], _, _). %% Point dim seems to not matter test(random_forest_ClassifyPoint_Smaller_Dim_To_Train) :- reset_Model_WithTrain, - classifyPoint([5.1,3.5], Prediction, ProbabilitiesList), + random_forest_classifyPoint([5.1,3.5], Prediction, ProbabilitiesList), print('\nPrediction: '), print(Prediction), print('\nProbabilities: '), @@ -153,7 +153,7 @@ test(random_forest_ClassifyPoint_Smaller_Dim_To_Train) :- %% Point dim seems to not matter test(random_forest_ClassifyPoint_Larger_Dim_To_Train) :- reset_Model_WithTrain, - classifyPoint([5.1,3.5,1.4,4.3,0.4], Prediction, ProbabilitiesList), + random_forest_classifyPoint([5.1,3.5,1.4,4.3,0.4], Prediction, ProbabilitiesList), print('\nPrediction: '), print(Prediction), print('\nProbabilities: '), @@ -164,31 +164,31 @@ test(random_forest_ClassifyPoint_Larger_Dim_To_Train) :- test(random_forest_ClassifyPoint_Normal_Use) :- reset_Model_WithTrain, - classifyPoint([5.1,3.5,1.4], Prediction, ProbabilitiesList), + random_forest_classifyPoint([5.1,3.5,1.4], Prediction, ProbabilitiesList), print('\nPrediction: '), print(Prediction), print('\nProbabilities: '), print(ProbabilitiesList). -:- end_tests(classifyPoint). +:- end_tests(random_forest_classifyPoint). %% -%% TESTING predicate classifyMatrix/5 +%% TESTING predicate random_forest_classifyMatrix/5 %% -:- begin_tests(classifyMatrix). +:- begin_tests(random_forest_classifyMatrix). %% Failure Tests test(random_forest_ClassifyMatrix_Before_Train, [error(_,system_error('RandomForest::Classify(): no random forest trained!'))]) :- reset_Model_NoTrain, - classifyMatrix([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, _, _, _). + random_forest_classifyMatrix([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, _, _, _). %% Classify dim seems to not matter test(random_forest_ClassifyMatrix_Smaller_Dim_To_Train) :- reset_Model_WithTrain, - classifyMatrix([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, Prediction, ProbabilitiesList, _), + random_forest_classifyMatrix([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, Prediction, ProbabilitiesList, _), print('\nPrediction: '), print(Prediction), print('\nProbabilities: '), @@ -197,7 +197,7 @@ test(random_forest_ClassifyMatrix_Smaller_Dim_To_Train) :- %% Classify dim seems to not matter test(random_forest_ClassifyMatrix_Larger_Dim_To_Train) :- reset_Model_WithTrain, - classifyMatrix([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 2, Prediction, ProbabilitiesList, _), + random_forest_classifyMatrix([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 2, Prediction, ProbabilitiesList, _), print('\nPrediction: '), print(Prediction), print('\nProbabilities: '), @@ -208,27 +208,27 @@ test(random_forest_ClassifyMatrix_Larger_Dim_To_Train) :- test(random_forest_ClassifyMatrix_Normal_Use) :- reset_Model_WithTrain, - classifyMatrix([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, Prediction, ProbabilitiesList, _), + random_forest_classifyMatrix([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, Prediction, ProbabilitiesList, _), print('\nPrediction: '), print(Prediction), print('\nProbabilities: '), print(ProbabilitiesList). -:- end_tests(classifyMatrix). +:- end_tests(random_forest_classifyMatrix). %% -%% TESTING predicate numTrees/1 +%% TESTING predicate random_forest_numTrees/1 %% -:- begin_tests(numTrees). +:- begin_tests(random_forest_numTrees). %% Failure Tests %% doesnt cause an error test(random_forest_NumTrees_Before_Train) :- reset_Model_NoTrain, - numTrees(NumTrees), + random_forest_numTrees(NumTrees), print('\nNumber of Trees: '), print(NumTrees). @@ -237,60 +237,60 @@ test(random_forest_NumTrees_Before_Train) :- test(random_forest_NumTrees_Normal_Use) :- reset_Model_WithTrain, - numTrees(NumTrees), + random_forest_numTrees(NumTrees), print('\nNumber of Trees: '), print(NumTrees). -:- end_tests(numTrees). +:- end_tests(random_forest_numTrees). %% -%% TESTING predicate trainNoWeights/9 +%% TESTING predicate random_forest_trainNoWeights/9 %% -:- begin_tests(trainNoWeights). +:- begin_tests(random_forest_trainNoWeights). %% Failure Tests test(random_forest_TrainNoWeights_Negative_NumClasses, fail) :- reset_Model_NoTrain, - trainNoWeights([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, 20, 1, 0.0000001, 0, _). + random_forest_trainNoWeights([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, 20, 1, 0.0000001, 0, _). test(random_forest_TrainNoWeights_Negative_NumTrees, fail) :- reset_Model_NoTrain, - trainNoWeights([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, -20, 1, 0.0000001, 0, _). + random_forest_trainNoWeights([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, -20, 1, 0.0000001, 0, _). test(random_forest_TrainNoWeights_Negative_MinLeafSize, fail) :- reset_Model_NoTrain, - trainNoWeights([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, 20, -1, 0.0000001, 0, _). + random_forest_trainNoWeights([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, 20, -1, 0.0000001, 0, _). test(random_forest_TrainNoWeights_Negative_MinGainSplit, fail) :- reset_Model_NoTrain, - trainNoWeights([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, 20, 1, -0.0000001, 0, _). + random_forest_trainNoWeights([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, 20, 1, -0.0000001, 0, _). test(random_forest_TrainNoWeights_Negative_MaxDepth, fail) :- reset_Model_NoTrain, - trainNoWeights([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, 20, 1, 0.0000001, -1, _). + random_forest_trainNoWeights([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, 20, 1, 0.0000001, -1, _). test(random_forest_TrainNoWeights_Too_Short_Label, [error(_,system_error('The number of data points does not match the number of labels!'))]) :- reset_Model_NoTrain, - trainNoWeights([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, 20, 1, 0.0000001, 0, _). + random_forest_trainNoWeights([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, 20, 1, 0.0000001, 0, _). test(random_forest_TrainNoWeights_Too_Long_Label, [error(_,system_error('The number of data points does not match the number of labels!'))]) :- reset_Model_NoTrain, - trainNoWeights([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,1], 2, 20, 1, 0.0000001, 0, _). + random_forest_trainNoWeights([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,1], 2, 20, 1, 0.0000001, 0, _). test(random_forest_TrainNoWeights_Too_Many_Label_Classes, [error(_,system_error('The given Labels dont fit the format [0,Numclasses-1]!'))]) :- reset_Model_NoTrain, - trainNoWeights([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,3], 2, 20, 1, 0.0000001, 0, _). + random_forest_trainNoWeights([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,3], 2, 20, 1, 0.0000001, 0, _). %% Successful Tests test(random_forest_TrainNoWeights_Normal_Use) :- reset_Model_NoTrain, - trainNoWeights([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, 20, 1, 0.0000001, 0, Entropy), + random_forest_trainNoWeights([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, 20, 1, 0.0000001, 0, Entropy), print('\nEntropy: '), print(Entropy). @@ -298,69 +298,69 @@ test(random_forest_TrainNoWeights_CSV_Input) :- reset_Model_NoTrain, open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - trainNoWeights(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 20, 1, 0.0000001, 0, Entropy), + random_forest_trainNoWeights(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 20, 1, 0.0000001, 0, Entropy), print('\nEntropy: '), print(Entropy). -:- end_tests(trainNoWeights). +:- end_tests(random_forest_trainNoWeights). %% -%% TESTING predicate trainWithWeights/10 +%% TESTING predicate random_forest_trainWithWeights/10 %% -:- begin_tests(trainWithWeights). +:- begin_tests(random_forest_trainWithWeights). %% Failure Tests test(random_forest_TrainWithWeights_Negative_NumClasses, fail) :- reset_Model_NoTrain, - trainWithWeights([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.5,0.1,0.7,1.2], 20, 1, 0.0000001, 0, _). + random_forest_trainWithWeights([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.5,0.1,0.7,1.2], 20, 1, 0.0000001, 0, _). test(random_forest_TrainWithWeights_Negative_NumTrees, fail) :- reset_Model_NoTrain, - trainWithWeights([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.5,0.1,0.7,1.2], -20, 1, 0.0000001, 0, _). + random_forest_trainWithWeights([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.5,0.1,0.7,1.2], -20, 1, 0.0000001, 0, _). test(random_forest_TrainWithWeights_Negative_MinLeafSize, fail) :- reset_Model_NoTrain, - trainWithWeights([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.5,0.1,0.7,1.2], 20, -1, 0.0000001, 0, _). + random_forest_trainWithWeights([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.5,0.1,0.7,1.2], 20, -1, 0.0000001, 0, _). test(random_forest_TrainWithWeights_Negative_MinGainSplit, fail) :- reset_Model_NoTrain, - trainWithWeights([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.5,0.1,0.7,1.2], 20, 1, -0.0000001, 0, _). + random_forest_trainWithWeights([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.5,0.1,0.7,1.2], 20, 1, -0.0000001, 0, _). test(random_forest_TrainWithWeights_Negative_MaxDepth, fail) :- reset_Model_NoTrain, - trainWithWeights([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.5,0.1,0.7,1.2], 20, 1, 0.0000001, -1, _). + random_forest_trainWithWeights([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.5,0.1,0.7,1.2], 20, 1, 0.0000001, -1, _). test(random_forest_TrainWithWeights_Too_Short_Label, [error(_,system_error('The number of data points does not match the number of labels!'))]) :- reset_Model_NoTrain, - trainWithWeights([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.5,0.1,0.7,1.2], 20, 1, 0.0000001, 0, _). + random_forest_trainWithWeights([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.5,0.1,0.7,1.2], 20, 1, 0.0000001, 0, _). test(random_forest_TrainWithWeights_Too_Long_Label, [error(_,system_error('The number of data points does not match the number of labels!'))]) :- reset_Model_NoTrain, - trainWithWeights([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,1], 2, [0.5,0.1,0.7,1.2], 20, 1, 0.0000001, 0, _). + random_forest_trainWithWeights([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,1], 2, [0.5,0.1,0.7,1.2], 20, 1, 0.0000001, 0, _). test(random_forest_TrainWithWeights_Too_Many_Label_Classes, [error(_,system_error('The given Labels dont fit the format [0,Numclasses-1]!'))]) :- reset_Model_NoTrain, - trainWithWeights([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,3], 2, [0.5,0.1,0.7,1.2], 20, 1, 0.0000001, 0, _). + random_forest_trainWithWeights([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,3], 2, [0.5,0.1,0.7,1.2], 20, 1, 0.0000001, 0, _). test(random_forest_TrainWithWeights_Too_Short_Weights, [error(_,system_error('The number of data points does not match the number of weights!'))]) :- reset_Model_NoTrain, - trainWithWeights([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.5,0.1], 20, 1, 0.0000001, 0, _). + random_forest_trainWithWeights([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.5,0.1], 20, 1, 0.0000001, 0, _). test(random_forest_TrainWithWeights_Too_Long_Weights, [error(_,system_error('The number of data points does not match the number of weights!'))]) :- reset_Model_NoTrain, - trainWithWeights([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.5,0.1,0.7,1.2,0.43,2.0], 20, 1, 0.0000001, 0, _). + random_forest_trainWithWeights([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.5,0.1,0.7,1.2,0.43,2.0], 20, 1, 0.0000001, 0, _). %% Successful Tests test(random_forest_TrainWithWeights_Normal_Use) :- reset_Model_NoTrain, - trainWithWeights([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.5,0.1,0.7,1.2], 20, 1, 0.0000001, 0, Entropy), + random_forest_trainWithWeights([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.5,0.1,0.7,1.2], 20, 1, 0.0000001, 0, Entropy), print('\nEntropy: '), print(Entropy). @@ -368,11 +368,11 @@ test(random_forest_TrainWithWeights_CSV_Input) :- reset_Model_NoTrain, open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - trainWithWeights(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, [0.5,0.1,0.7,1.2,0.5,3.4,0.9,0.5,0.5,1.2], 20, 1, 0.0000001, 0, Entropy), + random_forest_trainWithWeights(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, [0.5,0.1,0.7,1.2,0.5,3.4,0.9,0.5,0.5,1.2], 20, 1, 0.0000001, 0, Entropy), print('\nEntropy: '), print(Entropy). -:- end_tests(trainWithWeights). +:- end_tests(random_forest_trainWithWeights). run_random_forest_tests :- run_tests. diff --git a/src/methods/softmax_regression/softmax_regression.pl b/src/methods/softmax_regression/softmax_regression.pl index 17e1162..2bfb6db 100644 --- a/src/methods/softmax_regression/softmax_regression.pl +++ b/src/methods/softmax_regression/softmax_regression.pl @@ -1,12 +1,12 @@ -:- module(softmax_regression, [ initModelNoTrain/3, - initModelWithTrain/6, - classifyPoint/2, - classifyMatrix/5, - computeAccuracy/4, - featureSize/1, - parameters/2, - train/5]). +:- module(softmax_regression, [ softmax_regression_initModelNoTrain/3, + softmax_regression_initModelWithTrain/6, + softmax_regression_classifyPoint/2, + softmax_regression_classifyMatrix/5, + softmax_regression_computeAccuracy/4, + softmax_regression_featureSize/1, + softmax_regression_parameters/2, + softmax_regression_train/5]). %% requirements of library(struct) :- load_files(library(str_decl), @@ -35,7 +35,7 @@ %% Initializes the softmax_regression model without training. %% Be sure to use Train before calling Classif or ComputeAccuracy, otherwise the results may be meaningless. %% -initModelNoTrain(InputSize, NumClasses, FitIntercept) :- +softmax_regression_initModelNoTrain(InputSize, NumClasses, FitIntercept) :- InputSize > 0, NumClasses >= 0, initModelNoTrainI(InputSize, NumClasses, FitIntercept). @@ -56,7 +56,7 @@ foreign(initModelNoTrain, c, initModelNoTrainI( +integer, +integer, %% --Description-- %% Initializes the softmax_regression model and trains it. %% -initModelWithTrain(DataList, DataRows, LabelsList, NumClasses, Lambda, FitIntercept) :- +softmax_regression_initModelWithTrain(DataList, DataRows, LabelsList, NumClasses, Lambda, FitIntercept) :- NumClasses >= 0, Lambda >= 0, convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), @@ -78,7 +78,7 @@ foreign(initModelWithTrain, c, initModelWithTrainI( +pointer(float_array), + %% --Description-- %% Classify the given point. %% -classifyPoint(DataList, Prediction) :- +softmax_regression_classifyPoint(DataList, Prediction) :- convert_list_to_float_array(DataList, array(Xsize, X)), classifyPointI(X, Xsize, Prediction). @@ -96,7 +96,7 @@ foreign(classifyPoint, c, classifyPointI(+pointer(float_array), +integer, %% --Description-- %% Classify the given points, returning class probabilities and predicted class label for each point. %% -classifyMatrix(DataList, DataRows, PredictionList, ProbsList, ZCols) :- +softmax_regression_classifyMatrix(DataList, DataRows, PredictionList, ProbsList, ZCols) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrows, X)), classifyMatrixI(X, Xsize, Xrows, Y, Ysize, Z, ZCols, ZRows), convert_float_array_to_list(Y, Ysize, PredictionList), @@ -118,7 +118,7 @@ foreign(classifyMatrix, c, classifyMatrixI( +pointer(float_array), +integer, %% Computes accuracy of the learned model given the feature data and the labels associated with each data point. %% Predictions are made using the provided data and are compared with the actual labels. %% -computeAccuracy(DataList, DataRows, LabelsList, Accuracy) :- +softmax_regression_computeAccuracy(DataList, DataRows, LabelsList, Accuracy) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(LabelsList, array(Ysize, Y)), computeAccuracyI(X, Xsize, Xrownum, Y, Ysize, Accuracy). @@ -135,7 +135,7 @@ foreign(computeAccuracy, c, computeAccuracyI( +pointer(float_array), +integer, %% --Description-- %% Gets the features size of the training data. %% -featureSize(FeatureSize) :- +softmax_regression_featureSize(FeatureSize) :- featureSizeI(FeatureSize). foreign(featureSize, c, featureSizeI([-integer])). @@ -148,7 +148,7 @@ foreign(featureSize, c, featureSizeI([-integer])). %% --Description-- %% Get the model parameters. %% -parameters(PrametersList, XCols) :- +softmax_regression_parameters(PrametersList, XCols) :- parametersI(X, XCols, XRows), convert_float_array_to_2d_list(X, XCols, XRows, PrametersList). @@ -166,7 +166,7 @@ foreign(parameters, c, parametersI(-pointer(float_array), -integer, -integer)). %% --Description-- %% Trains the softmax regression model with the given training data. %% -train(DataList, DataRows, LabelsList, NumClasses, FinalValue) :- +softmax_regression_train(DataList, DataRows, LabelsList, NumClasses, FinalValue) :- NumClasses >= 0, convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(LabelsList, array(Ysize, Y)), diff --git a/src/methods/softmax_regression/softmax_regression_test.pl b/src/methods/softmax_regression/softmax_regression_test.pl index 6612ce1..99dd60b 100644 --- a/src/methods/softmax_regression/softmax_regression_test.pl +++ b/src/methods/softmax_regression/softmax_regression_test.pl @@ -7,137 +7,137 @@ :- use_module('../../helper_files/helper.pl'). reset_Model_NoTrain :- - initModelNoTrain(3, 2, 0). + softmax_regression_initModelNoTrain(3, 2, 0). reset_Model_WithTrain :- - initModelWithTrain([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.0001, 0). + softmax_regression_initModelWithTrain([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.0001, 0). %% -%% TESTING predicate initModelNoTrain/3 +%% TESTING predicate softmax_regression_initModelNoTrain/3 %% -:- begin_tests(initModelNoTrain). +:- begin_tests(softmax_regression_initModelNoTrain). %% Failure Tests test(softmax_InitNoTrain_Negative_InputSize, fail) :- - initModelNoTrain(-1, 0, 0). + softmax_regression_initModelNoTrain(-1, 0, 0). test(softmax_InitNoTrain_Negative_InputSize, fail) :- - initModelNoTrain(3, -1, 0). + softmax_regression_initModelNoTrain(3, -1, 0). %% Successful Tests test(softmax_InitNoTrain_FitIntercept_False) :- - initModelNoTrain(3, 2, 0). + softmax_regression_initModelNoTrain(3, 2, 0). test(softmax_InitNoTrain_FitIntercept_True) :- - initModelNoTrain(2, 3, 1). + softmax_regression_initModelNoTrain(2, 3, 1). -:- end_tests(initModelNoTrain). +:- end_tests(softmax_regression_initModelNoTrain). %% -%% TESTING predicate initModelWithTrain/6 +%% TESTING predicate softmax_regression_initModelWithTrain/6 %% -:- begin_tests(initModelWithTrain). +:- begin_tests(softmax_regression_initModelWithTrain). %% Failure Tests test(softmax_InitWithTrain_Negative_NumClass, fail) :- - initModelWithTrain([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], -1, 0.0001, 0). + softmax_regression_initModelWithTrain([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], -1, 0.0001, 0). test(softmax_InitWithTrain_Negative_Lambda, fail) :- - initModelWithTrain([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.0001, 0). + softmax_regression_initModelWithTrain([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.0001, 0). test(softmax_InitWithTrain_Wrong_Label_Dims1, [error(_,system_error('element-wise multiplication: incompatible matrix dimensions: 2x4 and 2x2'))]) :- - initModelWithTrain([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.0001, 0). + softmax_regression_initModelWithTrain([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.0001, 0). test(softmax_InitWithTrain_Wrong_Label_Dims2, [error(_,system_error('element-wise multiplication: incompatible matrix dimensions: 2x4 and 2x7'))]) :- - initModelWithTrain([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.0001, 0). + softmax_regression_initModelWithTrain([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.0001, 0). %% Doesnt cause exception test(softmax_InitWithTrain_Wrong_Label_Value) :- - initModelWithTrain([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.0001, 0). + softmax_regression_initModelWithTrain([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.0001, 0). %% Doesnt cause exception test(softmax_InitWithTrain_Too_Many_Label_Value) :- - initModelWithTrain([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.0001, 0). + softmax_regression_initModelWithTrain([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.0001, 0). %% Successful Tests test(softmax_InitWithTrain_Direct_Input) :- - initModelWithTrain([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.0001, 0). + softmax_regression_initModelWithTrain([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.0001, 0). test(softmax_InitWithTrain_CSV_Input) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initModelWithTrain(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0.003, 1). + softmax_regression_initModelWithTrain(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0.003, 1). -:- end_tests(initModelWithTrain). +:- end_tests(softmax_regression_initModelWithTrain). %% -%% TESTING predicate classifyPoint/2 +%% TESTING predicate softmax_regression_classifyPoint/2 %% -:- begin_tests(classifyPoint). +:- begin_tests(softmax_regression_classifyPoint). %% Failure Tests %% Doesnt cause an exception test(softmax_ClassifyPoint_On_Untrained_Model) :- reset_Model_NoTrain, - classifyPoint([5.1,3.5,1.4], _). + softmax_regression_classifyPoint([5.1,3.5,1.4], _). test(softmax_ClassifyPoint_With_Too_Big_Dims, [error(_,system_error('SoftmaxRegression::Classify(): dataset has 5 dimensions, but model has 3 dimensions!'))]) :- reset_Model_WithTrain, - classifyPoint([5.1,3.5,1.4,5.2,3.2], _). + softmax_regression_classifyPoint([5.1,3.5,1.4,5.2,3.2], _). test(softmax_ClassifyPoint_With_Too_Small_Dims, [error(_,system_error('SoftmaxRegression::Classify(): dataset has 2 dimensions, but model has 3 dimensions!'))]) :- reset_Model_WithTrain, - classifyPoint([5.1,3.5], _). + softmax_regression_classifyPoint([5.1,3.5], _). %% Successful Tests test(softmax_ClassifyPoint) :- reset_Model_WithTrain, - classifyPoint([4.1,2.5,1.4], Prediction), + softmax_regression_classifyPoint([4.1,2.5,1.4], Prediction), print('\nPrediction: '), print(Prediction). -:- end_tests(classifyPoint). +:- end_tests(softmax_regression_classifyPoint). %% -%% TESTING predicate classifyMatrix/5 +%% TESTING predicate softmax_regression_classifyMatrix/5 %% -:- begin_tests(classifyMatrix). +:- begin_tests(softmax_regression_classifyMatrix). %% Failure Tests %% Doesnt cause an exception test(softmax_ClassifyMatrix_On_Untrained_Model) :- reset_Model_NoTrain, - classifyMatrix([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5], 3, _, _, _). + softmax_regression_classifyMatrix([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5], 3, _, _, _). test(softmax_ClassifyMatrix_With_Too_Big_Dims, [error(_,system_error('SoftmaxRegression::Classify(): dataset has 5 dimensions, but model has 3 dimensions!'))]) :- reset_Model_WithTrain, - classifyMatrix([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5], 5, _, _, _). + softmax_regression_classifyMatrix([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5], 5, _, _, _). test(softmax_ClassifyMatrix_With_Too_Small_Dims, [error(_,system_error('SoftmaxRegression::Classify(): dataset has 2 dimensions, but model has 3 dimensions!'))]) :- reset_Model_WithTrain, - classifyMatrix([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5], 2, _, _, _). + softmax_regression_classifyMatrix([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5], 2, _, _, _). %% Successful Tests test(softmax_ClassifyMatrix_Direct_Input) :- reset_Model_WithTrain, - classifyMatrix([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5], 3, PredicList, ProbsList, _), + softmax_regression_classifyMatrix([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5], 3, PredicList, ProbsList, _), print('\nPredicted Labels: '), print(PredicList), print('\nProbabilities: '), @@ -146,50 +146,50 @@ test(softmax_ClassifyMatrix_Direct_Input) :- test(softmax_ClassifyMatrix_CSV_Input) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initModelWithTrain(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0.003, 1), - classifyMatrix(Data, 4, PredicList, ProbsList, _), + softmax_regression_initModelWithTrain(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0.003, 1), + softmax_regression_classifyMatrix(Data, 4, PredicList, ProbsList, _), print('\nPredicted Labels: '), print(PredicList), print('\nProbabilities: '), print(ProbsList). -:- end_tests(classifyMatrix). +:- end_tests(softmax_regression_classifyMatrix). %% -%% TESTING predicate computeAccuracy/4 +%% TESTING predicate softmax_regression_computeAccuracy/4 %% -:- begin_tests(computeAccuracy). +:- begin_tests(softmax_regression_computeAccuracy). %% Failure Tests %% Doesnt cause an exception test(softmax_ComputeAccuracy_On_Untrained_Model) :- reset_Model_NoTrain, - computeAccuracy([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], _). + softmax_regression_computeAccuracy([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], _). test(softmax_ComputeAccuracy_Wrong_Label_Dims1, [error(_,system_error('The Labels Vector has the wrong Dimension!'))]) :- reset_Model_WithTrain, - computeAccuracy([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], _). + softmax_regression_computeAccuracy([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], _). %% Doesnt cause exception test(softmax_ComputeAccuracy_Wrong_Label_Dims2) :- reset_Model_WithTrain, - computeAccuracy([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], _). + softmax_regression_computeAccuracy([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], _). %% The same when the label values are out of range test(softmax_ComputeAccuracy_Wrong_Label_Value) :- reset_Model_WithTrain, - computeAccuracy([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], _). + softmax_regression_computeAccuracy([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], _). %% Doesnt cause an exception test(softmax_ComputeAccuracy_Too_Many_Label_Value) :- reset_Model_WithTrain, - computeAccuracy([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], _). + softmax_regression_computeAccuracy([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], _). test(softmax_ComputeAccuracy_Wrong_Data_Dims, [error(_,system_error('SoftmaxRegression::Classify(): dataset has 4 dimensions, but model has 3 dimensions!'))]) :- reset_Model_WithTrain, - computeAccuracy([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, [0,1,0], Accuracy), + softmax_regression_computeAccuracy([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, [0,1,0], Accuracy), print('\nAccuracy: '), print(Accuracy). @@ -198,25 +198,25 @@ test(softmax_ComputeAccuracy_Wrong_Data_Dims, [error(_,system_error('SoftmaxRegr test(softmax_ComputeAccuracy_Direct_Input) :- reset_Model_WithTrain, - computeAccuracy([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], Accuracy), + softmax_regression_computeAccuracy([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], Accuracy), print('\nAccuracy: '), print(Accuracy). test(softmax_ComputeAccuracy_CSV_Input) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initModelWithTrain(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0.003, 1), - computeAccuracy([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2], 4, [0,1,0,1], Accuracy), + softmax_regression_initModelWithTrain(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0.003, 1), + softmax_regression_computeAccuracy([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2], 4, [0,1,0,1], Accuracy), print('\nAccuracy: '), print(Accuracy). -:- end_tests(computeAccuracy). +:- end_tests(softmax_regression_computeAccuracy). %% -%% TESTING predicate featureSize/1 +%% TESTING predicate softmax_regression_featureSize/1 %% -:- begin_tests(featureSize). +:- begin_tests(softmax_regression_featureSize). %% Failure Tests @@ -227,31 +227,31 @@ test(softmax_ComputeAccuracy_CSV_Input) :- test(softmax_FeatureSize_No_Train) :- reset_Model_NoTrain, - featureSize(FeatureSize), + softmax_regression_featureSize(FeatureSize), print('\nFeatureSize: '), print(FeatureSize). test(softmax_FeatureSize_Direct_Input) :- reset_Model_WithTrain, - featureSize(FeatureSize), + softmax_regression_featureSize(FeatureSize), print('\nFeatureSize: '), print(FeatureSize). test(softmax_FeatureSize_CSV_Input) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initModelWithTrain(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0.003, 1), - featureSize(FeatureSize), + softmax_regression_initModelWithTrain(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0.003, 1), + softmax_regression_featureSize(FeatureSize), print('\nFeatureSize: '), print(FeatureSize). -:- end_tests(featureSize). +:- end_tests(softmax_regression_featureSize). %% -%% TESTING predicate parameters/2 +%% TESTING predicate softmax_regression_parameters/2 %% -:- begin_tests(parameters). +:- begin_tests(softmax_regression_parameters). %% Failure Tests @@ -260,80 +260,80 @@ test(softmax_FeatureSize_CSV_Input) :- test(softmax_Parameters_No_Train) :- reset_Model_NoTrain, - parameters(PrametersList, _), + softmax_regression_parameters(PrametersList, _), print('\nParameters: '), print(PrametersList). test(softmax_Parameters_Direct_Input) :- reset_Model_WithTrain, - parameters(PrametersList, _), + softmax_regression_parameters(PrametersList, _), print('\nParameters: '), print(PrametersList). test(softmax_Parameters_CSV_Input) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - initModelWithTrain(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0.003, 1), - parameters(PrametersList, _), + softmax_regression_initModelWithTrain(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0.003, 1), + softmax_regression_parameters(PrametersList, _), print('\nParameters: '), print(PrametersList). -:- end_tests(parameters). +:- end_tests(softmax_regression_parameters). %% -%% TESTING predicate train/5 +%% TESTING predicate softmax_regression_train/5 %% -:- begin_tests(train). +:- begin_tests(softmax_regression_train). %% Failure Tests test(softmax_Train_Negative_NumClass, fail) :- reset_Model_NoTrain, - 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], -1, _). + softmax_regression_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], -1, _). test(softmax_Train_Wrong_Label_Dims1, [error(_,system_error('element-wise multiplication: incompatible matrix dimensions: 2x4 and 2x2'))]) :- reset_Model_NoTrain, - 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], 2, _). + softmax_regression_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], 2, _). %% If the label vector is to long it seems to cause no problems test(softmax_Train_Wrong_Label_Dims2, [error(_,system_error('element-wise multiplication: incompatible matrix dimensions: 2x4 and 2x7'))]) :- reset_Model_NoTrain, - 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,0,1], 2, _). + softmax_regression_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,0,1], 2, _). %% The same when the label values are out of range test(softmax_Train_Wrong_Label_Value) :- reset_Model_NoTrain, - 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, _). + softmax_regression_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, _). %% doesnt cause a exeption test(softmax_Train_Too_Many_Label_Value) :- reset_Model_NoTrain, - 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, [1,1,0,2], 2, _). + softmax_regression_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, [1,1,0,2], 2, _). %% doesnt cause a exeption test(softmax_Train_Wrong_Data_Dims) :- reset_Model_NoTrain, - 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], 4, [0,1,0], 2, _). + softmax_regression_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], 4, [0,1,0], 2, _). %% Successful Tests test(softmax_Train_Direct_Input) :- reset_Model_NoTrain, - 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, FinalValue), + softmax_regression_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, FinalValue), print('\nFinalValue: '), print(FinalValue). test(softmax_Train_CSV_Input) :- - initModelNoTrain(4, 2, 0), + softmax_regression_initModelNoTrain(4, 2, 0), open('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, FinalValue), + softmax_regression_train(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, FinalValue), print('\nFinalValue: '), print(FinalValue). -:- end_tests(train). +:- end_tests(softmax_regression_train). run_softmax_regression_tests :- diff --git a/src/methods/sparse_coding/sparse_coding.pl b/src/methods/sparse_coding/sparse_coding.pl index 5b9c4f0..02aea9d 100644 --- a/src/methods/sparse_coding/sparse_coding.pl +++ b/src/methods/sparse_coding/sparse_coding.pl @@ -1,8 +1,8 @@ -:- module(sparse_coding, [ initModelWithTrain/8, - initModelNoTrain/6, - encode/4, - train/3]). +:- module(sparse_coding, [ sparse_coding_initModelWithTrain/8, + sparse_coding_initModelNoTrain/6, + sparse_coding_encode/4, + sparse_coding_train/3]). %% requirements of library(struct) :- load_files(library(str_decl), @@ -17,7 +17,7 @@ float32 = float_32, float_array = array(float32). -%% definitions for the connected function +%% definitions for the connected functionsparse_coding_ @@ -36,7 +36,7 @@ %% --Description-- %% Initializes sparse_coding model and trains it. %% -initModelWithTrain(MatList, MatRows, Atoms, Lambda1, Lambda2, MaxIterations, ObjTolerance, NewtonTolerance) :- +sparse_coding_initModelWithTrain(MatList, MatRows, Atoms, Lambda1, Lambda2, MaxIterations, ObjTolerance, NewtonTolerance) :- Atoms >= 0, Lambda1 > 0, Lambda2 >= 0, @@ -64,7 +64,7 @@ foreign(initModelWithTrain, c, initModelWithTrainI( +pointer(float_array), %% --Description-- %% Initializes sparse_coding model but will not train the model, and a subsequent call to Train will be required before the model can encode points with Encode. %% -initModelNoTrain(Atoms, Lambda1, Lambda2, MaxIterations, ObjTolerance, NewtonTolerance) :- +sparse_coding_initModelNoTrain(Atoms, Lambda1, Lambda2, MaxIterations, ObjTolerance, NewtonTolerance) :- Atoms >= 0, Lambda1 > 0, Lambda2 >= 0, @@ -86,7 +86,7 @@ foreign(initModelNoTrain, c, initModelNoTrainI(+integer, +float32, +float32, +in %% --Description-- %% Sparse code each point in the given dataset via LARS, using the current dictionary and store the encoded data in the codes matrix. %% -encode(DataList, DataRows, CodesList, YCols) :- +sparse_coding_encode(DataList, DataRows, CodesList, YCols) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), encodeI(X, Xsize, Xrownum, Y, YCols, YRows), convert_float_array_to_2d_list(Y, YCols, YRows, CodesList). @@ -105,7 +105,7 @@ foreign(encode, c, encodeI( +pointer(float_array), +integer, +integer, %% --Description-- %% Train the sparse coding model on the given dataset. %% -train(DataList, DataRows, ReturnValue) :- +sparse_coding_train(DataList, DataRows, ReturnValue) :- convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), trainI(X, Xsize, Xrownum, ReturnValue). diff --git a/src/methods/sparse_coding/sparse_coding_test.pl b/src/methods/sparse_coding/sparse_coding_test.pl index 6290c0a..76b1149 100644 --- a/src/methods/sparse_coding/sparse_coding_test.pl +++ b/src/methods/sparse_coding/sparse_coding_test.pl @@ -10,107 +10,107 @@ reset_Model_With_Train_A :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,20, Data), - initModelWithTrain(Data,4,15,0.1,0.0,100,0.01,0.000001). + sparse_coding_initModelWithTrain(Data,4,15,0.1,0.0,100,0.01,0.000001). reset_Model_No_Train_A :- - initModelNoTrain(2,0.1,0.0,100,0.01,0.000001). + sparse_coding_initModelNoTrain(2,0.1,0.0,100,0.01,0.000001). %% -%% TESTING predicate initModelWithTrain/8 +%% TESTING predicate sparse_coding_initModelWithTrain/8 %% -:- begin_tests(initModelWithTrain). +:- begin_tests(sparse_coding_initModelWithTrain). %% Failure Tests test(initModelWithTrain_Negative_RowNum, fail) :- - initModelWithTrain([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,15,0.1,0.0,100,0.01,0.000001). + sparse_coding_initModelWithTrain([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,15,0.1,0.0,100,0.01,0.000001). test(initModelWithTrain_Negative_Atoms, fail) :- - initModelWithTrain([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,-15,0.1,0.0,100,0.01,0.000001). + sparse_coding_initModelWithTrain([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,-15,0.1,0.0,100,0.01,0.000001). test(initModelWithTrain_Negative_MaxIterations, fail) :- - initModelWithTrain([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,15,0.1,0.0,-100,0.01,0.000001). + sparse_coding_initModelWithTrain([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,15,0.1,0.0,-100,0.01,0.000001). test(initModelWithTrain_Negative_ObjTolerance, fail) :- - initModelWithTrain([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,15,0.1,0.0,100,-0.01,0.000001). + sparse_coding_initModelWithTrain([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,15,0.1,0.0,100,-0.01,0.000001). test(initModelWithTrain_Negative_NewtonTolerance, fail) :- - initModelWithTrain([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,15,0.1,0.0,100,0.01,-0.000001). + sparse_coding_initModelWithTrain([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,15,0.1,0.0,100,0.01,-0.000001). test(initModelWithTrain_Empty_List, fail) :- - initModelWithTrain([], 3,15,0.1,0.0,100,0.01,-0.000001). + sparse_coding_initModelWithTrain([], 3,15,0.1,0.0,100,0.01,-0.000001). test(initModelWithTrain_Data_Amount_Smaller_Than_Atoms, [error(_,system_error('There have to be more DataPoints than Atoms!'))]) :- - initModelWithTrain([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4,10,0.1,0.0,2,0.01,0.000001). + sparse_coding_initModelWithTrain([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4,10,0.1,0.0,2,0.01,0.000001). %% Successful Tests test(initModelWithTrain_Direct_Input_Use) :- - initModelWithTrain([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, 3,0.1,0.0,2,0.01,0.000001). + sparse_coding_initModelWithTrain([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, 3,0.1,0.0,2,0.01,0.000001). test(initModelWithTrain_Changed_Input) :- - initModelWithTrain([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 6,2,2.3,0.1,30,0.002,0.0001). + sparse_coding_initModelWithTrain([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 6,2,2.3,0.1,30,0.002,0.0001). test(initModelWithTrain_CSV_Use) :- open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,20, Data), - initModelWithTrain(Data,4,15,0.1,0.0,100,0.01,0.000001). + sparse_coding_initModelWithTrain(Data,4,15,0.1,0.0,100,0.01,0.000001). -:- end_tests(initModelWithTrain). +:- end_tests(sparse_coding_initModelWithTrain). %% -%% TESTING predicate initModelNoTrain/6 +%% TESTING predicate sparse_coding_initModelNoTrain/6 %% -:- begin_tests(initModelNoTrain). +:- begin_tests(sparse_coding_initModelNoTrain). %% Failure Tests test(initModelNoTrain_Negative_Atoms, fail) :- - initModelNoTrain(-15,0.1,0.0,100,0.01,0.000001). + sparse_coding_initModelNoTrain(-15,0.1,0.0,100,0.01,0.000001). test(initModelNoTrain_Negative_MaxIterations, fail) :- - initModelNoTrain(15,0.1,0.0,-100,0.01,0.000001). + sparse_coding_initModelNoTrain(15,0.1,0.0,-100,0.01,0.000001). test(initModelNoTrain_Negative_ObjTolerance, fail) :- - initModelNoTrain(15,0.1,0.0,100,-0.01,0.000001). + sparse_coding_initModelNoTrain(15,0.1,0.0,100,-0.01,0.000001). test(initModelNoTrain_Negative_NewtonTolerance, fail) :- - initModelNoTrain(15,0.1,0.0,100,0.01,-0.000001). + sparse_coding_initModelNoTrain(15,0.1,0.0,100,0.01,-0.000001). test(initModelNoTrain_Empty_List, fail) :- - initModelNoTrain(15,0.1,0.0,100,0.01,-0.000001). + sparse_coding_initModelNoTrain(15,0.1,0.0,100,0.01,-0.000001). %% Successful Tests test(initModelNoTrain_Normal_Input_Use) :- - initModelNoTrain(15,0.1,0.0,100,0.01,0.000001). + sparse_coding_initModelNoTrain(15,0.1,0.0,100,0.01,0.000001). test(initModelNoTrain_Changed_Input) :- - initModelNoTrain(5,2.3,0.2,200,0.002,0.0001). + sparse_coding_initModelNoTrain(5,2.3,0.2,200,0.002,0.0001). -:- end_tests(initModelNoTrain). +:- end_tests(sparse_coding_initModelNoTrain). %% -%% TESTING predicate encode/4 +%% TESTING predicate sparse_coding_encode/4 %% -:- begin_tests(encode). +:- begin_tests(sparse_coding_encode). %% Failure Tests test(encode_With_No_Trained_Model, [error(_,system_error('Matrix has not the correct dimensions!'))]) :- reset_Model_No_Train_A, - encode([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, CodesList, CodesRows), + sparse_coding_encode([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, CodesList, CodesRows), print(CodesList), print('\n'), print(CodesRows). test(encode_With_Not_Fitting_Data, [error(_,system_error('Matrix has not the correct dimensions!'))]) :- reset_Model_No_Train_A, - encode([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 2, CodesList, CodesRows), + sparse_coding_encode([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 2, CodesList, CodesRows), print(CodesList), print('\n'), print(CodesRows). @@ -120,7 +120,7 @@ test(encode_With_Not_Fitting_Data, [error(_,system_error('Matrix has not the cor test(encode_Normal_Use1) :- reset_Model_With_Train_A, - encode([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, CodesList, CodesRows), + sparse_coding_encode([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, CodesList, CodesRows), print(CodesList), print('\n'), print(CodesRows). @@ -130,50 +130,50 @@ test(encode_Normal_Use2) :- reset_Model_No_Train_A, open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,10, Data), - train(Data, 4, _), - encode([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, CodesList, CodesRows), + sparse_coding_train(Data, 4, _), + sparse_coding_encode([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 4, CodesList, CodesRows), print(CodesList), print('\n'), print(CodesRows). -:- end_tests(encode). +:- end_tests(sparse_coding_encode). %% -%% TESTING predicate train/3 +%% TESTING predicate sparse_coding_train/3 %% -:- begin_tests(train). +:- begin_tests(sparse_coding_train). %% Failure Tests test(train_With_Negative_RowNum, fail) :- reset_Model_No_Train_A, - 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, _). + sparse_coding_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, _). test(train_With_Empty_Data_List1, fail) :- reset_Model_No_Train_A, - train([], 1, _). + sparse_coding_train([], 1, _). test(train_With_Empty_Data_List2, fail) :- reset_Model_No_Train_A, - train([], 0, _). + sparse_coding_train([], 0, _). %% Successful Tests test(train_With_Direkt_Input) :- reset_Model_No_Train_A, - 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, ObjectiveValue), + sparse_coding_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, ObjectiveValue), print(ObjectiveValue). test(train_With_CSV_Input) :- reset_Model_No_Train_A, open('src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow,20, Data), - train(Data, 4, ObjectiveValue), + sparse_coding_train(Data, 4, ObjectiveValue), print(ObjectiveValue). -:- end_tests(train). +:- end_tests(sparse_coding_train). run_sparse_coding_tests :- -- GitLab