From d40647c58a5323890ddb191cf7f945ed771cac02 Mon Sep 17 00:00:00 2001 From: Jakhes <dean.schmitz@schmitzbauer.de> Date: Wed, 9 Nov 2022 22:48:29 +0100 Subject: [PATCH] Adding linear_regression tests --- .../linear_regression_test.pl | 299 +++++++++++++++--- 1 file changed, 249 insertions(+), 50 deletions(-) diff --git a/src/methods/linear_regression/linear_regression_test.pl b/src/methods/linear_regression/linear_regression_test.pl index 39bafe9..f3b920c 100644 --- a/src/methods/linear_regression/linear_regression_test.pl +++ b/src/methods/linear_regression/linear_regression_test.pl @@ -7,82 +7,281 @@ :- use_module('../../helper_files/helper.pl'). reset_Model :- - initModelEmpty(1). + linear_regression_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,1], 0.0, 1). -:- begin_tests(lists). +reset_Model_WithWeights :- + linear_regression_initModelWithWeights([5.1,3.5,1.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.2,0.1,0.2,0.5], 0.0, 1). -%% train tests -test(correct_train) :- + +%% +%% TESTING predicate linear_regression_initModel/5 +%% +:- begin_tests(linear_regression_initModel). + +%% Failure Tests + +test(linear_regression_InitModel_Too_Few_Labels, [error(_, system_error('Error'))]) :- + linear_regression_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, 1). + +test(linear_regression_InitModel_Too_Many_Labels, [error(_, system_error('Error'))]) :- + linear_regression_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,1,0,1], 0.0, 1). + +test(linear_regression_InitModel_Too_Many_Labelclasses, [error(_, system_error('Error'))]) :- + linear_regression_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,2,3], 0.0, 1). + + +%% Successful Tests + +test(linear_regression_InitModel_Normal_Use) :- + linear_regression_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,1], 0.0, 1). + +test(linear_regression_InitModel_CSV_Input) :- + open('src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,10, Data), + linear_regression_initModel(Data, 4, [0,1,0,1,1,0,1,1,1,0], 0.5, 0). + +:- end_tests(linear_regression_initModel). + + + +%% +%% TESTING predicate linear_regression_initModelWithWeights/6 +%% +:- begin_tests(linear_regression_initModelWithWeights). + +%% Failure Tests + +test(linear_regression_InitModelWithWeights_Too_Few_Labels, [error(_, system_error('Error'))]) :- + linear_regression_initModelWithWeights([5.1,3.5,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,0.1,0.2,0.5], 0.0, 1). + +test(linear_regression_InitModelWithWeights_Too_Many_Labels, [error(_, system_error('Error'))]) :- + linear_regression_initModelWithWeights([5.1,3.5,1.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], [0.2,0.1,0.2,0.5], 0.0, 1). + +test(linear_regression_InitModelWithWeights_Too_Many_Labelclasses, [error(_, system_error('Error'))]) :- + linear_regression_initModelWithWeights([5.1,3.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], [0.2,0.1,0.2,0.5], 0.0, 1). + + +test(linear_regression_InitModelWithWeights_Too_Few_Weights, [error(_, system_error('Error'))]) :- + linear_regression_initModelWithWeights([5.1,3.5,1.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.2,0.5], 0.0, 1). + +test(linear_regression_InitModelWithWeights_Too_Many_Weights, [error(_, system_error('Error'))]) :- + linear_regression_initModelWithWeights([5.1,3.5,1.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.2,0.1,0.2,0.1,0.2,0.5], 0.0, 1). + + +%% Successful Tests + +test(linear_regression_InitModelWithWeights_Normal_Use) :- + linear_regression_initModelWithWeights([5.1,3.5,1.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.2,0.1,0.2,0.5], 0.0, 1). + +test(linear_regression_InitModelWithWeights_CSV_Input) :- + open('src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,10, Data), + linear_regression_initModelWithWeights(Data, 4, [0,1,0,1,1,0,1,1,1,0], [0.2,0.1,0.2,0.5,0.2,0.4,1.2,0.7,2.1,0.1], 0.5, 0). + +:- end_tests(linear_regression_initModelWithWeights). + + + +%% +%% TESTING predicate linear_regression_computeError/4 +%% +:- begin_tests(linear_regression_computeError). + +%% Failure Tests + +test(linear_regression_ComputeError_Too_Few_Labels, [error(_, system_error('Error'))]) :- + reset_Model, + linear_regression_computeError([5.1,3.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_regression_ComputeError_Too_Many_Labels, [error(_, system_error('Error'))]) :- + reset_Model, + linear_regression_computeError([5.1,3.5,1.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_regression_ComputeError_Too_Many_Labelclasses, [error(_, system_error('Error'))]) :- + reset_Model, + linear_regression_computeError([5.1,3.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], _). + + +%% Successful Tests + +test(linear_regression_ComputeError_Normal_Use) :- + reset_Model, + linear_regression_computeError([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,1], Error), + print('\nError: '), + print(Error). + + +:- end_tests(linear_regression_computeError). + + + +%% +%% TESTING predicate linear_regression_parameters/1 +%% +:- begin_tests(linear_regression_parameters). + +%% Failure Tests + + +%% Successful Tests + +test(linear_regression_Parameters_Normal_Use) :- reset_Model, - convert_list_to_float_array([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5],3, array(Xsize, Xrownum, X)), - convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)), - train(X,Xsize, Xrownum,Y, Ysize,1 ,0). -test(false_train, fail) :- + linear_regression_parameters(Parameters), + print('\nParameters: '), + print(Parameters). + +:- end_tests(linear_regression_parameters). + + + +%% +%% TESTING predicate linear_regression_modifyParameters/1 +%% +:- begin_tests(linear_regression_modifyParameters). + +%% Failure Tests + +test(linear_regression_ModifyParameters_Too_Few_Parameters, [error(_, system_error('Error'))]) :- reset_Model, - convert_list_to_float_array([],3, array(Xsize, Xrownum, X)), - convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)), - train(X,Xsize, Xrownum,Y, Ysize, 1, 0). -test(false_train2, fail) :- + linear_regression_modifyParameters([3,4]), + linear_regression_parameters(Parameters), + print('\nParameters: '), + print(Parameters). + +test(linear_regression_ModifyParameters_Too_Many_Parameters, [error(_, system_error('Error'))]) :- reset_Model, - convert_list_to_float_array([],0, array(Xsize, Xrownum, X)), - convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)), - train(X,Xsize, Xrownum,Y, Ysize, 1, 0). -test(false_train3, fail) :- + linear_regression_modifyParameters([1,2,1,2,3,4]), + linear_regression_parameters(Parameters), + print('\nParameters: '), + print(Parameters). + +test(linear_regression_ModifyParameters_Bad_Parameter_Value, [error(_, system_error('Error'))]) :- reset_Model, - convert_list_to_float_array([1,2],0, array(Xsize, Xrownum, X)), - convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)), - train(X,Xsize, Xrownum,Y, Ysize, 1, 0). -test(false_train3, fail) :- + linear_regression_modifyParameters([1,2,-3,4]), + linear_regression_parameters(Parameters), + print('\nParameters: '), + print(Parameters). + + +%% Successful Tests + +test(linear_regression_ModifyParameters_Normal_Use) :- reset_Model, - convert_list_to_float_array([1,2,44,3],3, array(Xsize, Xrownum, X)), - convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)), - train(X,Xsize, Xrownum,Y, Ysize, 1, 0). -test(false_train4) :- + linear_regression_modifyParameters([1,2,3,4]), + linear_regression_parameters(Parameters), + print('\nParameters: '), + print(Parameters). + +:- end_tests(linear_regression_modifyParameters). + + + +%% +%% TESTING predicate linear_regression_predict/10 +%% +:- begin_tests(linear_regression_predict). + +%% Failure Tests + +test(linear_regression_Predict_Diffrent_Dims_Than_Trained) :- reset_Model, - convert_list_to_float_array([1,2,44,3],2, array(Xsize, Xrownum, X)), - convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)), - train(X,Xsize, Xrownum,Y, Ysize, 1, 0). + linear_regression_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(train) :- +test(linear_regression_Predict_Normal_Use) :- reset_Model, - convert_list_to_float_array([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5],3, array(Xsize, Xrownum, X)), - convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)), - train(X,Xsize, Xrownum,Y, Ysize, 1, 0), - predict(X, Xsize,Xrownum, Predic, PredicSize), - convert_float_array_to_list(Predic, PredicSize, [0.20000000298023224,0.20000000298023224,0.20000000298023224,0.20000000298023224]). + linear_regression_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, Responses), + print('\nResponses: '), + print(Responses). + +test(linear_regression_Predict_Normal_Use) :- + reset_Model_WithWeights, + linear_regression_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, Responses), + print('\nResponses: '), + print(Responses). + +:- end_tests(linear_regression_predict). + -:- end_tests(lists). %% -%% TESTING predicate predicate/10 +%% TESTING predicate linear_regression_train/5 %% -:- begin_tests(predicate). +:- begin_tests(linear_regression_train). %% Failure Tests -test(testDescription, [error(domain_error('expectation' , culprit), _)]) :- - reset_Model_No_Train(perceptron), - train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,0,0,0], 2, culprit, 50, 0.0001, _). +test(linear_regression_Train_Too_Few_Labels, [error(_, system_error('Error'))]) :- + linear_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], 1, _). + +test(linear_regression_Train_Too_Many_Labels, [error(_, system_error('Error'))]) :- + linear_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,1], 1, _). + +test(linear_regression_Train_Too_Many_Labelclasses, [error(_, system_error('Error'))]) :- + linear_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,3], 1, _). + + +%% Successful Tests + +test(linear_regression_Train_Normal_Use) :- + linear_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, Error), + print('\nError: '), + print(Error). + +test(linear_regression_Train_CSV_Input) :- + open('src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,10, Data), + linear_regression_train(Data, 4, [0,1,0,1,1,0,1,1,1,0], 0, Error), + print('\nError: '), + print(Error). + +:- end_tests(linear_regression_train). + + + +%% +%% TESTING predicate linear_regression_trainWithWeights/6 +%% +:- begin_tests(linear_regression_trainWithWeights). + +%% Failure Tests + +test(linear_regression_TrainWithWeights_Too_Few_Labels, [error(_, system_error('Error'))]) :- + linear_regression_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.2,0.1,0.2,0.5], 1 ,_). + +test(linear_regression_TrainWithWeights_Too_Many_Labels, [error(_, system_error('Error'))]) :- + linear_regression_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], [0.2,0.1,0.2,0.5], 1 ,_). + +test(linear_regression_TrainWithWeights_Too_Many_Labelclasses, [error(_, system_error('Error'))]) :- + linear_regression_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], [0.2,0.1,0.2,0.5], 1 ,_). + + +test(linear_regression_TrainWithWeights_Too_Few_Weights, [error(_, system_error('Error'))]) :- + linear_regression_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.2,0.5], 1 ,_). + +test(linear_regression_TrainWithWeights_Too_Many_Weights, [error(_, system_error('Error'))]) :- + linear_regression_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.2,0.1,0.2,0.1,0.2,0.5], 1 ,_). -test(testDescription2, [error(_,system_error('The values of the Label have to start at 0 and be >= 0 and < the given numClass!'))]) :- - reset_Model_No_Train(perceptron), - train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,2], 2, perceptron, 50, 0.0001, _). - %% Successful Tests -test(testDescription3, [true(Error =:= 1)]) :- - reset_Model_No_Train(perceptron), - train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,0,0,0], 2, perceptron, 50, 0.0001, Error). +test(linear_regression_TrainWithWeights_Normal_Use) :- + linear_regression_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.2,0.1,0.2,0.5], 1 ,Error), + print('\nError: '), + print(Error). -test(testDescription4, [true(Error =:= 0.9797958971132711)]) :- - reset_Model_No_Train(perceptron), +test(linear_regression_TrainWithWeights_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], 2, perceptron, 50, 0.0001, Error). + linear_regression_trainWithWeights(Data, 4, [0,1,0,1,1,0,1,1,1,0], [0.2,0.1,0.2,0.5,0.2,0.4,1.2,0.7,2.1,0.1], 0, Error), + print('\nError: '), + print(Error). -:- end_tests(predicate). +:- end_tests(linear_regression_trainWithWeights). run_linear_regression_tests :- run_tests. -- GitLab