From ca6ddabec7154a53101ffc2d4b6f1c7704aa64b4 Mon Sep 17 00:00:00 2001 From: Jakhes <dean.schmitz@schmitzbauer.de> Date: Wed, 26 Oct 2022 22:07:48 +0200 Subject: [PATCH] Updating adaboost --- src/methods/adaboost/adaboost.cpp | 10 ---- src/methods/adaboost/adaboost.pl | 72 +++++++++++++++++---------- src/methods/adaboost/adaboost_test.pl | 10 ++-- 3 files changed, 50 insertions(+), 42 deletions(-) diff --git a/src/methods/adaboost/adaboost.cpp b/src/methods/adaboost/adaboost.cpp index e5c24eb..11b16c2 100644 --- a/src/methods/adaboost/adaboost.cpp +++ b/src/methods/adaboost/adaboost.cpp @@ -78,11 +78,6 @@ void initModelWithTraining(float *dataMatArr, SP_integer dataMatSize, SP_integer void initModelNoTraining(double tol = 1e-6, char const *learner = "perceptron") { - if(tol <= 0) - { - raisePrologDomainExeption(tol, 1, ">0", "initModelNoTraining"); - } - if(strcmp(learner, "perceptron") == 0) { usingPerceptron = true; @@ -215,11 +210,6 @@ double getTolerance() // void modifyTolerance(double newTol) { - - if(newTol <= 0) - { - raisePrologDomainExeption(newTol, 1, ">0", "modifyTolerance"); - } if(usingPerceptron) { double& tol = adaBoostPerceptron.Tolerance(); diff --git a/src/methods/adaboost/adaboost.pl b/src/methods/adaboost/adaboost.pl index 6ed7e43..f7416a9 100644 --- a/src/methods/adaboost/adaboost.pl +++ b/src/methods/adaboost/adaboost.pl @@ -38,23 +38,25 @@ %% %% Initiates the Adaboostmodel and trains it, so classify can be used immediately. %% -foreign(initModelWithTraining, c, initModelWithTraining(+pointer(float_array), +integer, +integer, - +pointer(float_array), +integer, - +integer, - +string, - +integer , +float32)). - initModelWithTraining(MatList, MatRows, VecList, NumClasses, Learner, Iterations, Tolerance) :- NumClasses >= 0, Iterations >= 0, - Tolerance >= 0, + Tolerance > 0, convert_list_to_float_array(MatList, MatRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(VecList, array(Ysize, Y)), - initModelWithTraining(X, Xsize, Xrownum, Y, Ysize, NumClasses, Learner, Iterations, Tolerance). + 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)). + + %% --Input-- -%% string learner => "decision_stump", "perceptron", %% float tolerance => 1e-6 +%% string learner => "decision_stump", "perceptron", %% %% --Output-- %% @@ -62,7 +64,11 @@ initModelWithTraining(MatList, MatRows, VecList, NumClasses, Learner, Iterations %% 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. %% -foreign(initModelNoTraining, c, initModelNoTraining(+float32, +string)). +initModelNoTraining(Tolerance, Learner) :- + Tolerance > 0, + initModelNoTrainingI(Tolerance, Learner). + +foreign(initModelNoTraining, c, initModelNoTrainingI(+float32, +string)). %% --Input-- @@ -75,16 +81,18 @@ foreign(initModelNoTraining, c, initModelNoTraining(+float32, +string)). %% --Description-- %% Classifies the given data into the number of classes the model was trained for. %% -foreign(classify, c, classify( +pointer(float_array), +integer, +integer, - -pointer(float_array), -integer, - -pointer(float_array), -integer, -integer)). - classify(TestList, TestRows, PredicList, ProbsList, ZRows) :- convert_list_to_float_array(TestList, TestRows, array(Xsize, Xrownum, X)), - classify(X, Xsize, Xrownum, Y, Ysize, Z, ZCols, ZRows), + classifyI(X, Xsize, Xrownum, Y, Ysize, Z, ZCols, ZRows), convert_float_array_to_list(Y, Ysize, PredicList), convert_float_array_to_2d_list(Z, ZCols, ZRows, ProbsList). +foreign(classify, c, classifyI( +pointer(float_array), +integer, +integer, + -pointer(float_array), -integer, + -pointer(float_array), -integer, -integer)). + + + %% --Input-- %% @@ -94,7 +102,10 @@ classify(TestList, TestRows, PredicList, ProbsList, ZRows) :- %% --Description-- %% Returns the amount of classes defined in the model for classification. %% -foreign(numClasses, c, numClasses([-integer])). +numClasses(ClassesNum) :- + numClassesI(ClassesNum). + +foreign(numClasses, c, numClassesI([-integer])). %% --Input-- @@ -105,7 +116,10 @@ foreign(numClasses, c, numClasses([-integer])). %% --Description-- %% Returns the tolerance of the model. %% -foreign(getTolerance, c, getTolerance([-float32])). +getTolerance(Tolerance) :- + getToleranceI(Tolerance). + +foreign(getTolerance, c, getToleranceI([-float32])). %% --Input-- @@ -116,7 +130,11 @@ foreign(getTolerance, c, getTolerance([-float32])). %% --Description-- %% Modifies the tolerance of the model. %% -foreign(modifyTolerance, c, modifyTolerance(+float32)). +modifyTolerance(NewTolerance) :- + NewTolerance > 0, + modifyToleranceI(NewTolerance). + +foreign(modifyTolerance, c, modifyToleranceI(+float32)). %% --Input-- @@ -131,20 +149,22 @@ foreign(modifyTolerance, c, modifyTolerance(+float32)). %% float double upper bound training error %% %% --Description-- -foreign(train, c, train( +pointer(float_array), +integer, +integer, - +pointer(float_array), +integer, - +integer, - +string, - +integer , +float32, - [-float32])). - train(MatList, MatRows, VecList, NumClasses, Learner, Iterations, Tolerance, Error) :- NumClasses >= 0, Iterations >= 0, Tolerance >= 0, convert_list_to_float_array(MatList, MatRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(VecList, array(Ysize, Y)), - train(X, Xsize, Xrownum, Y, Ysize, NumClasses, Learner, Iterations, Tolerance, Error). + trainI(X, Xsize, Xrownum, Y, Ysize, NumClasses, Learner, Iterations, Tolerance, Error). + +foreign(train, c, trainI( +pointer(float_array), +integer, +integer, + +pointer(float_array), +integer, + +integer, + +string, + +integer , +float32, + [-float32])). + + %% Defines the functions that get connected from main.cpp diff --git a/src/methods/adaboost/adaboost_test.pl b/src/methods/adaboost/adaboost_test.pl index a2665f7..1c1cae0 100644 --- a/src/methods/adaboost/adaboost_test.pl +++ b/src/methods/adaboost/adaboost_test.pl @@ -62,13 +62,10 @@ test(initModelWithTraining_DecisionStump) :- %% Failure Tests -test(initModelNoTraining_WrongInputTypes, [error(type_error(number ,wrong), _)]) :- - initModelNoTraining(wrong, 1). - test(initModelNoTraining_WrongLearner, [error(domain_error('perceptron or decision_stump' ,wrongLearner), _)]) :- initModelNoTraining(0.0001, wrongLearner). -test(initModelNoTraining_WrongTol, [error(domain_error('>0' ,-1.0), _)]) :- +test(initModelNoTraining_WrongTol, fail) :- initModelNoTraining(-1.0, perceptron). %% Successful Tests @@ -197,7 +194,7 @@ test(getTolerance_afterTrain, [true(Amount =:= 0.0005)]) :- :- begin_tests(modifyTolerance). %% Failure Tests -test(modifyTolerance_With_Negative_Input, [error(domain_error('>0' , -0.02), _)]) :- +test(modifyTolerance_With_Negative_Input, fail) :- reset_Model_No_Train(perceptron), modifyTolerance(-0.02). @@ -318,4 +315,5 @@ test(train_After_InitTrain_Decision_Stump, [true(Error =:= 1)]) :- :- end_tests(train). run_adaboost_tests :- - run_tests. \ No newline at end of file + run_tests. + -- GitLab