Skip to content
Snippets Groups Projects
Commit 3df5ffd5 authored by Jakhes's avatar Jakhes
Browse files

Adding pca tests

parent 28c7c521
No related branches found
No related tags found
No related merge requests found
...@@ -58,7 +58,7 @@ void pca(SP_integer scaleData, char const *decompositionPolicy, ...@@ -58,7 +58,7 @@ void pca(SP_integer scaleData, char const *decompositionPolicy,
{ {
PCA<RandomizedSVDPolicy>((scaleData == 1)).Apply(data, transformedReturnMat, eigValReturnVector, eigVecReturnMat); PCA<RandomizedSVDPolicy>((scaleData == 1)).Apply(data, transformedReturnMat, eigValReturnVector, eigVecReturnMat);
} }
else if (strcmp(decompositionPolicy, "randomized-block-krylov") == 0) else if (strcmp(decompositionPolicy, "randomized_block_krylov") == 0)
{ {
PCA<RandomizedBlockKrylovSVDPolicy>((scaleData == 1)).Apply(data, transformedReturnMat, eigValReturnVector, eigVecReturnMat); PCA<RandomizedBlockKrylovSVDPolicy>((scaleData == 1)).Apply(data, transformedReturnMat, eigValReturnVector, eigVecReturnMat);
} }
......
...@@ -39,7 +39,8 @@ pca(ScaleData, DecompositionPolicy, DataList, DataRows, TransformedList, TDataCo ...@@ -39,7 +39,8 @@ pca(ScaleData, DecompositionPolicy, DataList, DataRows, TransformedList, TDataCo
convert_float_array_to_list(Y, Ysize, EigValList), convert_float_array_to_list(Y, Ysize, EigValList),
convert_float_array_to_2d_list(Z, ZCols, ZRows, EigVecList). convert_float_array_to_2d_list(Z, ZCols, ZRows, EigVecList).
foreign(pca, c, pcaI( +integer, +string, foreign(pca, c, pcaI( +integer,
+string,
+pointer(float_array), +integer, +integer, +pointer(float_array), +integer, +integer,
-pointer(float_array), -integer, -integer, -pointer(float_array), -integer, -integer,
-pointer(float_array), -integer, -pointer(float_array), -integer,
...@@ -61,11 +62,13 @@ foreign(pca, c, pcaI( +integer, +string, ...@@ -61,11 +62,13 @@ foreign(pca, c, pcaI( +integer, +string,
%% Define the new dimensionality of the data with newDimension. %% Define the new dimensionality of the data with newDimension.
%% %%
pcaDimReduction(ScaleData, DecompositionPolicy, DataList, DataRows, NewDim, TransformedList, TDataCols, Variance) :- pcaDimReduction(ScaleData, DecompositionPolicy, DataList, DataRows, NewDim, TransformedList, TDataCols, Variance) :-
NewDim > 0,
convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrows, X)), convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrows, X)),
pcaDimReductionI(ScaleData, DecompositionPolicy, X, Xsize, Xrows, NewDim, TData, TDataCols, TDataRows, Variance), pcaDimReductionI(ScaleData, DecompositionPolicy, X, Xsize, Xrows, NewDim, TData, TDataCols, TDataRows, Variance),
convert_float_array_to_2d_list(TData, TDataCols, TDataRows, TransformedList). convert_float_array_to_2d_list(TData, TDataCols, TDataRows, TransformedList).
foreign(pcaDimReduction, c, pcaDimReductionI( +integer, +string, foreign(pcaDimReduction, c, pcaDimReductionI( +integer,
+string,
+pointer(float_array), +integer, +integer, +pointer(float_array), +integer, +integer,
+integer, +integer,
-pointer(float_array), -integer, -integer, -pointer(float_array), -integer, -integer,
...@@ -87,11 +90,14 @@ foreign(pcaDimReduction, c, pcaDimReductionI( +integer, +string, ...@@ -87,11 +90,14 @@ foreign(pcaDimReduction, c, pcaDimReductionI( +integer, +string,
%% Define to which variance the data should be reduced to. %% Define to which variance the data should be reduced to.
%% %%
pcaVarianceDimReduction(ScaleData, DecompositionPolicy, DataList, DataRows, VarRetained, TransformedList, TDataCols, Variance) :- pcaVarianceDimReduction(ScaleData, DecompositionPolicy, DataList, DataRows, VarRetained, TransformedList, TDataCols, Variance) :-
VarRetained >= 0.0,
VarRetained =< 1.0,
convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrows, X)), convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrows, X)),
pcaVarianceDimReductionI(ScaleData, DecompositionPolicy, X, Xsize, Xrows, VarRetained, TData, TDataCols, TDataRows, Variance), pcaVarianceDimReductionI(ScaleData, DecompositionPolicy, X, Xsize, Xrows, VarRetained, TData, TDataCols, TDataRows, Variance),
convert_float_array_to_2d_list(TData, TDataCols, TDataRows, TransformedList). convert_float_array_to_2d_list(TData, TDataCols, TDataRows, TransformedList).
foreign(pcaVarianceDimReduction, c, pcaVarianceDimReductionI( +integer, +string, foreign(pcaVarianceDimReduction, c, pcaVarianceDimReductionI( +integer,
+string,
+pointer(float_array), +integer, +integer, +pointer(float_array), +integer, +integer,
+float32, +float32,
-pointer(float_array), -integer, -integer, -pointer(float_array), -integer, -integer,
......
...@@ -7,49 +7,184 @@ ...@@ -7,49 +7,184 @@
:- use_module('../../helper_files/helper.pl'). :- use_module('../../helper_files/helper.pl').
:- begin_tests(lists).
test(alpha_after_train) :- %%
open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris.csv', read, A), %% TESTING predicate pca/9
take_csv_row(A, 10, B), %%
convert_list_to_float_array(B , 10, array(Xsize, Xrownum, X)), :- begin_tests(pca).
pca(0, randomized, X, Xsize, Xrownum, Tansfomed, TCols, TRows, EigVal, EigValSize, EigVec, EigVecCols, EigVecRows),
convert_float_array_to_2d_list(Tansfomed, TCols, TRows, TOut), %% Failure Tests
convert_float_array_to_list(EigVal, EigValSize, EigValOut),
convert_float_array_to_2d_list(EigVec, EigVecCols, EigVecRows, EigVecOut), test(pca_Wrong_DecompositionPolicy_Input, [error(domain_error('The given DecompositionPolicy is unkown!' , wrongInput), _)]) :-
print(TOut). pca(0, wrongInput, [5.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(pca_Normal_Use_Exact) :-
pca(0, exact, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, TDataList, _, EigValList, EigVecList, _),
print('\nTransformed Data: '),
print(TDataList),
print('\nEigenValues: '),
print(EigValList),
print('\nEigenVectors: '),
print(EigVecList).
test(pca_Normal_Use_Randomized) :-
pca(0, randomized, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, TDataList, _, EigValList, EigVecList, _),
print('\nTransformed Data: '),
print(TDataList),
print('\nEigenValues: '),
print(EigValList),
print('\nEigenVectors: '),
print(EigVecList).
test(pca_Normal_Use_Randomized_Block_Krylov) :-
pca(0, randomized_block_krylov, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, TDataList, _, EigValList, EigVecList, _),
print('\nTransformed Data: '),
print(TDataList),
print('\nEigenValues: '),
print(EigValList),
print('\nEigenVectors: '),
print(EigVecList).
test(pca_Normal_Use_Quic) :-
pca(0, quic, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, TDataList, _, EigValList, EigVecList, _),
print('\nTransformed Data: '),
print(TDataList),
print('\nEigenValues: '),
print(EigValList),
print('\nEigenVectors: '),
print(EigVecList).
test(pca_CSV_Input) :-
open('src/data_csv/iris2.csv', read, File),
take_csv_row(File, skipFirstRow,10, Data),
pca(1, exact, Data, 4, TDataList, _, EigValList, EigVecList, _),
print('\nTransformed Data: '),
print(TDataList),
print('\nEigenValues: '),
print(EigValList),
print('\nEigenVectors: '),
print(EigVecList).
:- end_tests(pca).
:- end_tests(lists).
%% %%
%% TESTING predicate predicate/10 %% TESTING predicate pcaDimReduction/8
%% %%
:- begin_tests(predicate). :- begin_tests(pcaDimReduction).
%% Failure Tests %% Failure Tests
test(testDescription, [error(domain_error('expectation' , culprit), _)]) :- test(pcaDimReduction_Wrong_DecompositionPolicy_Input, [error(domain_error('The given DecompositionPolicy is unkown!' , wrongInput), _)]) :-
reset_Model_No_Train(perceptron), pcaDimReduction(0, wrongInput, [5.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, _, _, _).
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(testDescription2, [error(_,system_error('The values of the Label have to start at 0 and be >= 0 and < the given numClass!'))]) :- test(pcaDimReduction_Negative_NewDimension, fail) :-
reset_Model_No_Train(perceptron), pcaDimReduction(0, randomized, [5.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, _, _, _).
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(pcaDimReduction_Too_Big_NewDimension, fail) :-
pcaDimReduction(0, randomized, [5.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, _, _, _).
%% Successful Tests %% Successful Tests
test(testDescription3, [true(Error =:= 1)]) :- test(pcaDimReduction_Normal_Use_Exact) :-
reset_Model_No_Train(perceptron), pcaDimReduction(0, exact, [5.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, TDataList, _, RetainedVar),
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). print('\nTransformed Data: '),
print(TDataList),
print('\nRetained Variance: '),
print(RetainedVar).
test(pcaDimReduction_Normal_Use_Randomized) :-
pcaDimReduction(0, randomized, [5.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, TDataList, _, RetainedVar),
print('\nTransformed Data: '),
print(TDataList),
print('\nRetained Variance: '),
print(RetainedVar).
test(pcaDimReduction_Normal_Use_Randomized_Block_Krylov) :-
pcaDimReduction(0, randomized_block_krylov, [5.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, TDataList, _, RetainedVar),
print('\nTransformed Data: '),
print(TDataList),
print('\nRetained Variance: '),
print(RetainedVar).
test(pcaDimReduction_Normal_Use_Quic) :-
pcaDimReduction(0, quic, [5.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, TDataList, _, RetainedVar),
print('\nTransformed Data: '),
print(TDataList),
print('\nRetained Variance: '),
print(RetainedVar).
test(pcaDimReduction_CSV_Input) :-
open('src/data_csv/iris2.csv', read, File),
take_csv_row(File, skipFirstRow,10, Data),
pcaDimReduction(1, exact, Data, 4, 2, TDataList, _, RetainedVar),
print('\nTransformed Data: '),
print(TDataList),
print('\nRetained Variance: '),
print(RetainedVar).
:- end_tests(pcaDimReduction).
%%
%% TESTING predicate pcaVarianceDimReduction/8
%%
:- begin_tests(pcaVarianceDimReduction).
%% Failure Tests
test(pcaVarianceDimReduction_Wrong_DecompositionPolicy_Input, [error(domain_error('The given DecompositionPolicy is unkown!' , wrongInput), _)]) :-
pcaVarianceDimReduction(0, wrongInput, [5.1,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, _, _, _).
test(pcaVarianceDimReduction_Bad_ToRetainVar_Input, fail) :-
pcaVarianceDimReduction(0, randomized, [5.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, _, _, _),
pcaVarianceDimReduction(0, randomized, [5.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, _, _, _).
%% Successful Tests
test(testDescription4, [true(Error =:= 0.9797958971132711)]) :- test(pcaVarianceDimReduction_Normal_Use_Exact) :-
reset_Model_No_Train(perceptron), pcaVarianceDimReduction(0, exact, [5.1,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, TDataList, _, RetainedVar),
print('\nTransformed Data: '),
print(TDataList),
print('\nRetained Variance: '),
print(RetainedVar).
test(pcaVarianceDimReduction_Normal_Use_Randomized) :-
pcaVarianceDimReduction(0, randomized, [5.1,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, TDataList, _, RetainedVar),
print('\nTransformed Data: '),
print(TDataList),
print('\nRetained Variance: '),
print(RetainedVar).
test(pcaVarianceDimReduction_Normal_Use_Randomized_Block_Krylov) :-
pcaVarianceDimReduction(0, randomized_block_krylov, [5.1,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, TDataList, _, RetainedVar),
print('\nTransformed Data: '),
print(TDataList),
print('\nRetained Variance: '),
print(RetainedVar).
test(pcaVarianceDimReduction_Normal_Use_Quic) :-
pcaVarianceDimReduction(0, quic, [5.1,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, TDataList, _, RetainedVar),
print('\nTransformed Data: '),
print(TDataList),
print('\nRetained Variance: '),
print(RetainedVar).
test(pcaVarianceDimReduction_CSV_Input) :-
open('src/data_csv/iris2.csv', read, File), open('src/data_csv/iris2.csv', read, File),
take_csv_row(File, skipFirstRow,10, Data), 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). pcaVarianceDimReduction(1, exact, Data, 4, 0.2, TDataList, _, RetainedVar),
print('\nTransformed Data: '),
print(TDataList),
print('\nRetained Variance: '),
print(RetainedVar).
:- end_tests(predicate). :- end_tests(pcaVarianceDimReduction).
run_pca_tests :- run_pca_tests :-
run_tests. run_tests.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment