From bb4a353e34e3a3b1470180c4256f26e6715406b8 Mon Sep 17 00:00:00 2001 From: Jakhes <dean.schmitz@schmitzbauer.de> Date: Mon, 7 Nov 2022 23:50:36 +0100 Subject: [PATCH] Finishing random_forest tests --- src/methods/random_forest/random_forest.cpp | 56 ++++++++- .../random_forest/random_forest_test.pl | 109 +++++++++--------- 2 files changed, 111 insertions(+), 54 deletions(-) diff --git a/src/methods/random_forest/random_forest.cpp b/src/methods/random_forest/random_forest.cpp index f831a2a..913d54a 100644 --- a/src/methods/random_forest/random_forest.cpp +++ b/src/methods/random_forest/random_forest.cpp @@ -48,7 +48,12 @@ void initModelWithTrainNoWeights(float *dataMatArr, SP_integer dataMatSize, SP_i { // convert the Prolog array to arma::mat mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum); - + // check if labels fit the data + if (data.n_cols != labelsArrSize) + { + raisePrologSystemExeption("The number of data points does not match the number of labels!"); + return; + } // convert the Prolog array to arma::rowvec Row< size_t > labelsVector = convertArrayToVec(labelsArr, labelsArrSize); @@ -57,6 +62,11 @@ void initModelWithTrainNoWeights(float *dataMatArr, SP_integer dataMatSize, SP_i { randomForest = RandomForest(data, labelsVector, numClasses, numTrees, minimumLeafSize, minimumGainSplit, maximumDepth); } + catch(const std::out_of_range& e) + { + raisePrologSystemExeption("The given Labels dont fit the format [0,Numclasses-1]!"); + return; + } catch(const std::exception& e) { raisePrologSystemExeption(e.what()); @@ -86,6 +96,18 @@ void initModelWithTrainWithWeights(float *dataMatArr, SP_integer dataMatSize, SP { // convert the Prolog array to arma::mat mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum); + // check if labels and weights fit the data + if (data.n_cols != labelsArrSize) + { + raisePrologSystemExeption("The number of data points does not match the number of labels!"); + return; + } + if (data.n_cols != weightsArrSize) + { + raisePrologSystemExeption("The number of data points does not match the number of weights!"); + return; + } + // convert the Prolog array to arma::Row< size_t > Row< size_t > labelsVector = convertArrayToVec(labelsArr, labelsArrSize); // convert the Prolog array to arma::rowvec @@ -96,6 +118,11 @@ void initModelWithTrainWithWeights(float *dataMatArr, SP_integer dataMatSize, SP { randomForest = RandomForest(data, labelsVector, numClasses, weightsVector, numTrees, minimumLeafSize, minimumGainSplit, maximumDepth); } + catch(const std::out_of_range& e) + { + raisePrologSystemExeption("The given Labels dont fit the format [0,Numclasses-1]!"); + return; + } catch(const std::exception& e) { raisePrologSystemExeption(e.what()); @@ -214,6 +241,12 @@ double trainNoWeights(float *dataMatArr, SP_integer dataMatSize, SP_integer data { // convert the Prolog array to arma::mat mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum); + // check if labels fit the data + if (data.n_cols != labelsArrSize) + { + raisePrologSystemExeption("The number of data points does not match the number of labels!"); + return 0.0; + } // convert the Prolog array to arma::rowvec Row< size_t > labelsVector = convertArrayToVec(labelsArr, labelsArrSize); @@ -222,6 +255,11 @@ double trainNoWeights(float *dataMatArr, SP_integer dataMatSize, SP_integer data { return randomForest.Train(data, labelsVector, numClasses, numTrees, minimumLeafSize, minimumGainSplit, maximumDepth); } + catch(const std::out_of_range& e) + { + raisePrologSystemExeption("The given Labels dont fit the format [0,Numclasses-1]!"); + return 0.0; + } catch(const std::exception& e) { raisePrologSystemExeption(e.what()); @@ -252,6 +290,17 @@ double trainWithWeights(float *dataMatArr, SP_integer dataMatSize, SP_integer da { // convert the Prolog arrays to arma::mat mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum); + // check if labels and weights fit the data + if (data.n_cols != labelsArrSize) + { + raisePrologSystemExeption("The number of data points does not match the number of labels!"); + return 0.0; + } + if (data.n_cols != weightsArrSize) + { + raisePrologSystemExeption("The number of data points does not match the number of weights!"); + return 0.0; + } // convert the Prolog arrays to arma::rowvec Row< size_t > labelsVector = convertArrayToVec(labelsArr, labelsArrSize); // convert the Prolog arrays to arma::rowvec @@ -262,6 +311,11 @@ double trainWithWeights(float *dataMatArr, SP_integer dataMatSize, SP_integer da { return randomForest.Train(data, labelsVector, numClasses, weightsVector, numTrees, minimumLeafSize, minimumGainSplit, maximumDepth); } + catch(const std::out_of_range& e) + { + raisePrologSystemExeption("The given Labels dont fit the format [0,Numclasses-1]!"); + return 0.0; + } catch(const std::exception& e) { raisePrologSystemExeption(e.what()); diff --git a/src/methods/random_forest/random_forest_test.pl b/src/methods/random_forest/random_forest_test.pl index 2ee6329..ac6b4e1 100644 --- a/src/methods/random_forest/random_forest_test.pl +++ b/src/methods/random_forest/random_forest_test.pl @@ -38,8 +38,6 @@ test(random_forest_InitModelNoTrain) :- 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). -test(random_forest_InitModelWithTrainNoWeights_Too_Many_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], 15, 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). @@ -54,13 +52,13 @@ 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). -test(random_forest_InitModelWithTrainNoWeights_Too_Short_Label, [error(_,system_error('Error'))]) :- +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). -test(random_forest_InitModelWithTrainNoWeights_Too_Long_Label, [error(_,system_error('Error'))]) :- +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). -test(random_forest_InitModelWithTrainNoWeights_Too_Many_Label_Classes, [error(_,system_error('Error'))]) :- +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). @@ -88,9 +86,6 @@ test(random_forest_InitModelWithTrainNoWeights_CSV_Input) :- 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). -test(random_forest_InitModelWithTrainWithWeights_Too_Many_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], 15, [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). @@ -104,24 +99,21 @@ 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). -test(random_forest_InitModelWithTrainWithWeights_Too_Short_Label, [error(_,system_error('Error'))]) :- +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). -test(random_forest_InitModelWithTrainWithWeights_Too_Long_Label, [error(_,system_error('Error'))]) :- +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). -test(random_forest_InitModelWithTrainWithWeights_Too_Many_Label_Classes, [error(_,system_error('Error'))]) :- +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). -test(random_forest_InitModelWithTrainWithWeights_Too_Short_Weights, [error(_,system_error('Error'))]) :- +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). -test(random_forest_InitModelWithTrainWithWeights_Too_Long_Weights, [error(_,system_error('Error'))]) :- +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). - -test(random_forest_InitModelWithTrainWithWeights_Too_Many_Weights_Classes, [error(_,system_error('Error'))]) :- - 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). %% Successful Tests @@ -132,7 +124,7 @@ test(random_forest_InitModelWithTrainWithWeights_Normal_Use) :- 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], 20, 1, 0.0000001, 0). + 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). @@ -145,17 +137,27 @@ test(random_forest_InitModelWithTrainWithWeights_CSV_Input) :- %% Failure Tests -test(random_forest_ClassifyPoint_Before_Train, [error(_,system_error('Error'))]) :- +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], _, _). -test(random_forest_ClassifyPoint_Smaller_Dim_To_Train, [error(_,system_error('Error'))]) :- +%% Point dim seems to not matter +test(random_forest_ClassifyPoint_Smaller_Dim_To_Train) :- reset_Model_WithTrain, - classifyPoint([5.1,3.5], _, _). + classifyPoint([5.1,3.5], Prediction, ProbabilitiesList), + print('\nPrediction: '), + print(Prediction), + print('\nProbabilities: '), + print(ProbabilitiesList). -test(random_forest_ClassifyPoint_Larger_Dim_To_Train, [error(_,system_error('Error'))]) :- +%% 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], _, _). + classifyPoint([5.1,3.5,1.4,4.3,0.4], Prediction, ProbabilitiesList), + print('\nPrediction: '), + print(Prediction), + print('\nProbabilities: '), + print(ProbabilitiesList). %% Successful Tests @@ -179,17 +181,27 @@ test(random_forest_ClassifyPoint_Normal_Use) :- %% Failure Tests -test(random_forest_ClassifyMatrix_Before_Train, [error(_,system_error('Error'))]) :- +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, _, _, _). -test(random_forest_ClassifyMatrix_Smaller_Dim_To_Train, [error(_,system_error('Error'))]) :- +%% 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, _, _, _). + 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: '), + print(ProbabilitiesList). -test(random_forest_ClassifyMatrix_Larger_Dim_To_Train, [error(_,system_error('Error'))]) :- +%% 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, _, _, _). + 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: '), + print(ProbabilitiesList). %% Successful Tests @@ -207,15 +219,18 @@ test(random_forest_ClassifyMatrix_Normal_Use) :- %% -%% TESTING predicate numTrees/10 +%% TESTING predicate numTrees/1 %% :- begin_tests(numTrees). %% Failure Tests - -test(random_forest_NumTrees_Before_Train, [error(_,system_error('Error'))]) :- + +%% doesnt cause an error +test(random_forest_NumTrees_Before_Train) :- reset_Model_NoTrain, - numTrees(_). + numTrees(NumTrees), + print('\nNumber of Trees: '), + print(NumTrees). %% Successful Tests @@ -231,7 +246,7 @@ test(random_forest_NumTrees_Normal_Use) :- %% -%% TESTING predicate trainNoWeights/10 +%% TESTING predicate trainNoWeights/9 %% :- begin_tests(trainNoWeights). @@ -241,10 +256,6 @@ 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, _). -test(random_forest_TrainNoWeights_Too_Many_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], 15, 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, _). @@ -262,15 +273,15 @@ test(random_forest_TrainNoWeights_Negative_MaxDepth, fail) :- 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('Error'))]) :- +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, _). -test(random_forest_TrainNoWeights_Too_Long_Label, [error(_,system_error('Error'))]) :- +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, _). -test(random_forest_TrainNoWeights_Too_Many_Label_Classes, [error(_,system_error('Error'))]) :- +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, _). @@ -306,10 +317,6 @@ 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, _). -test(random_forest_TrainWithWeights_Too_Many_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], 15, [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, _). @@ -327,30 +334,26 @@ test(random_forest_TrainWithWeights_Negative_MaxDepth, fail) :- 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('Error'))]) :- +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, _). -test(random_forest_TrainWithWeights_Too_Long_Label, [error(_,system_error('Error'))]) :- +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, _). -test(random_forest_TrainWithWeights_Too_Many_Label_Classes, [error(_,system_error('Error'))]) :- +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, _). -test(random_forest_TrainWithWeights_Too_Short_Weights, [error(_,system_error('Error'))]) :- +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, _). -test(random_forest_TrainWithWeights_Too_Long_Weights, [error(_,system_error('Error'))]) :- +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, _). - -test(random_forest_TrainWithWeights_Too_Many_Weights_Classes, [error(_,system_error('Error'))]) :- - 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, _). %% Successful Tests @@ -365,7 +368,7 @@ 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], 20, 1, 0.0000001, 0, Entropy), + 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). -- GitLab