From bf6366e8abff92a2efffbc61da55062cf297d83f Mon Sep 17 00:00:00 2001 From: Jakhes <dean.schmitz@schmitzbauer.de> Date: Wed, 9 Nov 2022 22:48:13 +0100 Subject: [PATCH] Adding lars tests --- src/methods/lars/lars.pl | 4 + src/methods/lars/lars_test.pl | 425 ++++++++++++++++++++++++++++++---- 2 files changed, 381 insertions(+), 48 deletions(-) diff --git a/src/methods/lars/lars.pl b/src/methods/lars/lars.pl index d6ac26d..6f647dd 100644 --- a/src/methods/lars/lars.pl +++ b/src/methods/lars/lars.pl @@ -39,6 +39,7 @@ %% Only initialize the LARS model. %% lars_initModelNoDataNoGram(UseCholesky, Lambda1, Lambda2, Tolerance) :- + Tolerance > 0, initModelNoDataNoGramI(UseCholesky, Lambda1, Lambda2, Tolerance). foreign(initModelNoDataNoGram, c, initModelNoDataNoGramI(+integer, @@ -59,6 +60,7 @@ foreign(initModelNoDataNoGram, c, initModelNoDataNoGramI(+integer, %% Initialize LARS model, and pass in a precalculated Gram matrix but dont train the model. %% lars_initModelNoDataWithGram(UseCholesky, GramList, GramRows, Lambda1, Lambda2, Tolerance) :- + Tolerance > 0, convert_list_to_float_array(GramList, GramRows, array(Zsize, Zrownum, Z)), initModelNoDataWithGramI(UseCholesky, Z, Zsize, Zrownum, Lambda1, Lambda2, Tolerance). @@ -82,6 +84,7 @@ foreign(initModelNoDataWithGram, c, initModelNoDataWithGramI( +integer, %% Initialize LARS model, and train the model. %% lars_initModelWithDataNoGram(DataList, DataRows, ResponsesList, TransposeData, UseCholesky, Lambda1, Lambda2, Tolerance) :- + Tolerance > 0, 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). @@ -110,6 +113,7 @@ foreign(initModelWithDataNoGram, c, initModelWithDataNoGramI( +pointer(float_a %% Initialize LARS model, pass in a precalculated Gram matrix and train the model. %% lars_initModelWithDataWithGram(DataList, DataRows, ResponsesList, TransposeData, UseCholesky, GramList, GramRows, Lambda1, Lambda2, Tolerance) :- + Tolerance > 0, 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)), diff --git a/src/methods/lars/lars_test.pl b/src/methods/lars/lars_test.pl index 67e2cb1..4d401ef 100644 --- a/src/methods/lars/lars_test.pl +++ b/src/methods/lars/lars_test.pl @@ -8,77 +8,406 @@ :- use_module(lars). :- use_module('../../helper_files/helper.pl'). -reset_Model :- - 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)), - lars_trainNoBetaReturn(X,Xsize, Xrownum,Y, Ysize, 1, _). +reset_Model_NoTrain :- + lars_initModelNoDataNoGram(0, 0.0, 0.0, 1.0e-16). -:- begin_tests(lists). +reset_Model_WithTrain :- + lars_initModelWithDataNoGram([5.1,3.5,1.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, 0.0, 0.0, 1.0e-16). -%% train tests -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)), - 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, - lars_activeSet(ActSet, ActSetSize), - convert_float_array_to_list(ActSet, ActSetSize, Result), - print(Result). +%% +%% TESTING predicate lars_initModelNoDataNoGram/4 +%% +:- begin_tests(lars_initModelNoDataNoGram). + +%% Failure Tests + +test(lars_InitModelNoDataNoGram_Negative_Tolerance, fail) :- + lars_initModelNoDataNoGram(0, 0.0, 0.0, -1.0e-16). + + +%% Successful Tests + +test(lars_InitModelNoDataNoGram_Normal_Use) :- + lars_initModelNoDataNoGram(0, 0.0, 0.0, 1.0e-16). + +test(lars_InitModelNoDataNoGram_Alternative_Use) :- + lars_initModelNoDataNoGram(1, -1.0, 1.0, 1.0e-16). + +:- end_tests(lars_initModelNoDataNoGram). + + + +%% +%% TESTING predicate lars_initModelNoDataWithGram/6 +%% +:- begin_tests(lars_initModelNoDataWithGram). + +%% Failure Tests + +test(lars_InitModelNoDataWithGram_Negative_Tolerance, fail) :- + lars_initModelNoDataWithGram(0, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, 0.0, 0.0, -1.0e-16). + + +%% Successful Tests + +test(lars_InitModelNoDataWithGram_Normal_Use) :- + lars_initModelNoDataWithGram(0, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, 0.0, 0.0, 1.0e-16). + +test(lars_InitModelNoDataWithGram_Alternative_Use) :- + lars_initModelNoDataWithGram(1, [5.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, 1.0, 1.0e-16). + +:- end_tests(lars_initModelNoDataWithGram). + + + +%% +%% TESTING predicate lars_initModelWithDataNoGram/8 +%% +:- begin_tests(lars_initModelWithDataNoGram). + +%% Failure Tests + +test(lars_InitModelWithDataNoGram_Negative_Tolerance, fail) :- + lars_initModelWithDataNoGram([5.1,3.5,1.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, 0.0, 0.0, -1.0e-16). + + +test(lars_InitModelWithDataNoGram_Too_Few_Labels, [error(_,system_error('Error'))]) :- + lars_initModelWithDataNoGram([5.1,3.5,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.0, 0.0, -1.0e-16). + +test(lars_InitModelWithDataNoGram_Too_Many_Labels, [error(_,system_error('Error'))]) :- + lars_initModelWithDataNoGram([5.1,3.5,1.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, 0.0, 0.0, -1.0e-16). + +test(lars_InitModelWithDataNoGram_Too_Many_Labelclasses, [error(_,system_error('Error'))]) :- + lars_initModelWithDataNoGram([5.1,3.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, 0.0, 0.0, -1.0e-16). + + +%% Successful Tests + +test(lars_InitModelWithDataNoGram_Normal_Use) :- + lars_initModelWithDataNoGram([5.1,3.5,1.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, 0.0, 0.0, 1.0e-16). + +test(lars_InitModelWithDataNoGram_Alternative_Use) :- + lars_initModelWithDataNoGram([5.1,3.5,1.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, 1, 1.0, -1.0, 1.0e-16). + +:- end_tests(lars_initModelWithDataNoGram). + + + +%% +%% TESTING predicate lars_initModelWithDataWithGram/10 +%% +:- begin_tests(lars_initModelWithDataWithGram). + +%% Failure Tests + +test(lars_InitModelWithDataWithGram_Negative_Tolerance, fail) :- + lars_initModelWithDataWithGram([5.1,3.5,1.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, [5.1,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.0e-16). + + +test(lars_InitModelWithDataWithGram_Too_Few_Labels, [error(_,system_error('Error'))]) :- + lars_initModelWithDataWithGram([5.1,3.5,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, [5.1,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.0e-16). + +test(lars_InitModelWithDataWithGram_Too_Many_Labels, [error(_,system_error('Error'))]) :- + lars_initModelWithDataWithGram([5.1,3.5,1.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, [5.1,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.0e-16). + +test(lars_InitModelWithDataWithGram_Too_Many_Labelclasses, [error(_,system_error('Error'))]) :- + lars_initModelWithDataWithGram([5.1,3.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, [5.1,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.0e-16). + + +test(lars_InitModelWithDataWithGram_Diffrent_Dimensions, [error(_,system_error('Error'))]) :- + lars_initModelWithDataWithGram([5.1,3.5,1.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, [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.0, 0.0, -1.0e-16). + + +%% Successful Tests + +test(lars_InitModelWithDataWithGram_Normal_Use) :- + lars_initModelWithDataWithGram([5.1,3.5,1.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, [5.1,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.0e-16). + +test(lars_InitModelWithDataWithGram_Alternative_Use) :- + lars_initModelWithDataWithGram([5.1,3.5,1.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, [5.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, -1.0, 1.0e-16). + +:- end_tests(lars_initModelWithDataWithGram). + + + +%% +%% TESTING predicate lars_activeSet/1 +%% +:- begin_tests(lars_activeSet). + +%% Failure Tests + +test(lars_ActiveSet_Before_Train, [error(_,system_error('Error'))]) :- + reset_Model_NoTrain, + lars_activeSet(_). + + +%% Successful Tests + +test(lars_ActiveSet_Normal_Use) :- + reset_Model_WithTrain, + lars_activeSet(ActiveSetList), + print('\nActive Set: '), + print(ActiveSetList). + +:- end_tests(lars_activeSet). + + + +%% +%% TESTING predicate lars_beta/1 +%% +:- begin_tests(lars_beta). + +%% Failure Tests + +test(lars_Beta_Before_Train, [error(_,system_error('Error'))]) :- + reset_Model_NoTrain, + lars_beta(_). + -test(matUtriCholFactor) :- - reset_Model, - lars_matUtriCholFactor(Matrix, MatrixColNum, MatrixRowNum), - print(MatrixColNum), - convert_float_array_to_2d_list(Matrix, MatrixColNum, MatrixRowNum, Results), - print(Results). +%% Successful Tests + +test(lars_Beta_Normal_Use) :- + reset_Model_WithTrain, + lars_beta(BetaList), + print('\nBeta : '), + print(BetaList). -test(betaPath) :- - reset_Model, - lars_betaPath(Matrix, MatrixColNum, MatrixRowNum), - print(MatrixColNum), - convert_float_array_to_2d_list(Matrix, MatrixColNum, MatrixRowNum, Results), - print(Results). +:- end_tests(lars_beta). -:- end_tests(lists). %% -%% TESTING predicate predicate/10 +%% TESTING predicate lars_betaPath/2 %% -:- begin_tests(predicate). +:- begin_tests(lars_betaPath). %% 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(lars_BetaPath_Before_Train, [error(_,system_error('Error'))]) :- + reset_Model_NoTrain, + lars_betaPath(_, _). + + +%% Successful Tests + +test(lars_BetaPath_Normal_Use) :- + reset_Model_WithTrain, + lars_betaPath(BetaPathList, _), + print('\nBeta List: '), + print(BetaPathList). + +:- end_tests(lars_betaPath). + + + +%% +%% TESTING predicate lars_computeError/5 +%% +:- begin_tests(lars_computeError). + +%% Failure Tests + +test(lars_ComputeError_Before_Train, [error(_,system_error('Error'))]) :- + reset_Model_NoTrain, + lars_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, _). + + +test(lars_ComputeError_Too_Few_Labels, [error(_,system_error('Error'))]) :- + reset_Model_WithTrain, + lars_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, _). + +test(lars_ComputeError_Too_Many_Labels, [error(_,system_error('Error'))]) :- + reset_Model_WithTrain, + lars_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], 0, _). + +test(lars_ComputeError_Too_Many_Labelclasses, [error(_,system_error('Error'))]) :- + reset_Model_WithTrain, + lars_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], 0, _). + + +%% Successful Tests -test(testDescription2, [error(_,system_error('The values of the Label have to start at 0 and be >= 0 and < the given numClass!'))]) :- - reset_Model_No_Train(perceptron), - train([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0,1,0,2], 2, perceptron, 50, 0.0001, _). +test(lars_ComputeError_Normal_Use) :- + reset_Model_WithTrain, + lars_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, Error), + print('\nError : '), + print(Error). + +test(lars_ComputeError_Alternative_Use) :- + reset_Model_WithTrain, + lars_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], 1, Error), + print('\nError : '), + print(Error). + +test(lars_ComputeError_CSV_Input) :- + reset_Model_WithTrain, + open('src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,10, Data), + lars_computeError(Data, 4, [0,1,0,1,1,0,1,1,1,0], 0, Error), + print('\nError : '), + print(Error). + +:- end_tests(lars_computeError). + + + +%% +%% TESTING predicate lars_lambdaPath/1 +%% +:- begin_tests(lars_lambdaPath). + +%% Failure Tests + +test(lars_LambdaPath_Before_Train, [error(_,system_error('Error'))]) :- + reset_Model_NoTrain, + lars_lambdaPath(_). %% 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(lars_LambdaPath_Normal_Use) :- + reset_Model_WithTrain, + lars_lambdaPath(LambdaPathList), + print('\nLambda Path: '), + print(LambdaPathList). + +:- end_tests(lars_lambdaPath). + + + +%% +%% TESTING predicate lars_matUtriCholFactor/2 +%% +:- begin_tests(lars_matUtriCholFactor). + +%% Failure Tests + +test(lars_MatUtriCholFactor_Before_Train, [error(_,system_error('Error'))]) :- + reset_Model_NoTrain, + lars_matUtriCholFactor(_, _). + + +%% Successful Tests + +test(lars_MatUtriCholFactor_Normal_Use) :- + reset_Model_WithTrain, + lars_matUtriCholFactor(FactorList, _), + print('\nUtriCholFactor: '), + print(FactorList). + +:- end_tests(lars_matUtriCholFactor). + + + +%% +%% TESTING predicate lars_predict/10 +%% +:- begin_tests(lars_predict). + +%% Failure Tests + +test(lars_Predict_Before_Train, [error(_,system_error('Error'))]) :- + reset_Model_NoTrain, + lars_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, 0, _). + + +test(lars_Predict_Diffrent_Dims, [error(_,system_error('Error'))]) :- + reset_Model_WithTrain, + lars_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, 0, _). + + +%% Successful Tests + +test(lars_Predict_Normal_Use) :- + reset_Model_WithTrain, + lars_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, 0, PredictList), + print('\nPrediction: '), + print(PredictList). + +test(lars_Predict_Alternative_Use) :- + reset_Model_WithTrain, + lars_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, 1, PredictList), + print('\nPrediction: '), + print(PredictList). + +test(lars_Predict_CSV_Input) :- + reset_Model_WithTrain, + open('src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,10, Data), + lars_predict(Data, 4, 0, PredictList), + print('\nPrediction: '), + print(PredictList). + +:- end_tests(lars_predict). + + + +%% +%% TESTING predicate lars_train/10 +%% +:- begin_tests(lars_train). + +%% Failure Tests\ + +test(lars_Train_Diffrent_Dims, [error(_,system_error('Error'))]) :- + reset_Model_WithTrain, + lars_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], 0, _, _). + + +test(lars_Train_Too_Few_Labels, [error(_,system_error('Error'))]) :- + reset_Model_NoTrain, + lars_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, _, _). + +test(lars_Train_Too_Many_Labels, [error(_,system_error('Error'))]) :- + reset_Model_NoTrain, + lars_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], 0, _, _). + +test(lars_Train_Too_Many_Labelclasses, [error(_,system_error('Error'))]) :- + reset_Model_NoTrain, + lars_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], 0, _, _). + + +%% Successful Tests + +test(lars_Train_Normal_Use) :- + reset_Model_NoTrain, + lars_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, BetaList, Error), + print('\nBeta: '), + print(BetaList), + print('\nError: '), + print(Error). + +test(lars_Train_Normal_Use) :- + reset_Model_WithTrain, + lars_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, BetaList, Error), + print('\nBeta: '), + print(BetaList), + print('\nError: '), + print(Error). + +test(lars_Train_Alternative_Use) :- + reset_Model_NoTrain, + lars_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, BetaList, Error), + print('\nBeta: '), + print(BetaList), + print('\nError: '), + print(Error). -test(testDescription4, [true(Error =:= 0.9797958971132711)]) :- - reset_Model_No_Train(perceptron), +test(lars_Train_CSV_Input) :- + 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, perceptron, 50, 0.0001, Error). + lars_train(Data, 4, [0,1,0,1,1,0,1,1,1,0], 0, BetaList, Error), + print('\nBeta: '), + print(BetaList), + print('\nError: '), + print(Error). -:- end_tests(predicate). +:- end_tests(lars_train). run_lars_tests :- run_tests. \ No newline at end of file -- GitLab