Skip to content
Snippets Groups Projects
Commit 9a2bcf4d authored by Dean Samuel Schmitz's avatar Dean Samuel Schmitz
Browse files

Adding nbc tests

parent 943fa702
No related branches found
No related tags found
No related merge requests found
...@@ -61,6 +61,8 @@ foreign(initModelWithTrain, c, initModelWithTrainI( +pointer(float_array), + ...@@ -61,6 +61,8 @@ foreign(initModelWithTrain, c, initModelWithTrainI( +pointer(float_array), +
%% All of the parameters of the model will be initialized to zero. Be sure to use train before calling classify, otherwise the results may be meaningless. %% All of the parameters of the model will be initialized to zero. Be sure to use train before calling classify, otherwise the results may be meaningless.
%% %%
initModelNoTrain(NumClasses, IncrementalVar, Epsilon) :- initModelNoTrain(NumClasses, IncrementalVar, Epsilon) :-
NumClasses >= 0,
Epsilon >= 0,
initModelNoTrainI(NumClasses, IncrementalVar, Epsilon). initModelNoTrainI(NumClasses, IncrementalVar, Epsilon).
foreign(initModelNoTrain, c, initModelNoTrainI( +integer, foreign(initModelNoTrain, c, initModelNoTrainI( +integer,
...@@ -146,6 +148,7 @@ foreign(probabilities, c, probabilitiesI(-pointer(float_array), -integer, -integ ...@@ -146,6 +148,7 @@ foreign(probabilities, c, probabilitiesI(-pointer(float_array), -integer, -integ
%% Train the Naive Bayes classifier on the given dataset. The data must be the same dimensionality as the existing model parameters. %% Train the Naive Bayes classifier on the given dataset. The data must be the same dimensionality as the existing model parameters.
%% %%
trainMatrix(DataList, DataRows, LabelsList, NumClasses, IncrementalVar) :- trainMatrix(DataList, DataRows, LabelsList, NumClasses, IncrementalVar) :-
NumClasses >= 0,
convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)),
convert_list_to_float_array(LabelsList, array(Ysize, Y)), convert_list_to_float_array(LabelsList, array(Ysize, Y)),
trainMatrixI(X, Xsize, Xrownum, Y, Ysize, NumClasses, IncrementalVar). trainMatrixI(X, Xsize, Xrownum, Y, Ysize, NumClasses, IncrementalVar).
......
...@@ -6,38 +6,258 @@ ...@@ -6,38 +6,258 @@
:- use_module(naive_bayes_classifier). :- use_module(naive_bayes_classifier).
:- use_module('../../helper_files/helper.pl'). :- use_module('../../helper_files/helper.pl').
reset_Model :- reset_Model_NoTrain :-
initModel(1,0,50,0.0001). initModelNoTrain(2, 0, 0.000001).
reset_Model_WithTrain :-
initModelWithTrain([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, 0.000001).
%%
%% TESTING predicate initModelNoTrain/3
%%
:- begin_tests(initModelNoTrain).
%% Failure Tests
test(nbc_InitModelNoTrain_Negative_NumClasses, fail) :-
initModelNoTrain(-2, 0, 0.000001).
test(nbc_InitModelNoTrain_Negative_Epsilon, fail) :-
initModelNoTrain(2, 0, -0.0001).
%% Successful Tests
test(nbc_InitModelNoTrain_Normal_Use) :-
initModelNoTrain(2, 0, 0.000001).
:- end_tests(initModelNoTrain).
%%
%% TESTING predicate initModelWithTrain/6
%%
:- begin_tests(initModelWithTrain).
%% Failure Tests
test(nbc_InitModelWithTrain_Negative_NumClasses, fail) :-
initModelWithTrain([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, 0.000001).
test(nbc_InitModelWithTrain_Negative_Epsilon, fail) :-
initModelWithTrain([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, -0.000001).
test(nbc_InitModelWithTrain_Too_Short_Label, [error(_,system_error('Error'))]) :-
initModelWithTrain([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, 0.000001).
test(nbc_InitModelWithTrain_Too_Long_Label, [error(_,system_error('Error'))]) :-
initModelWithTrain([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, 0.000001).
test(nbc_InitModelWithTrain_Too_Many_Label_Classes, [error(_,system_error('Error'))]) :-
initModelWithTrain([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, 0.000001).
%% Successful Tests
test(nbc_InitModelWithTrain_Normal_Use) :-
initModelWithTrain([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, 0.000001).
test(nbc_InitModelWithTrain_CSV_Input) :-
open('src/data_csv/iris2.csv', read, File),
take_csv_row(File, skipFirstRow,10, Data),
initModelWithTrain(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 1, 0.0042).
:- end_tests(initModelWithTrain).
%%
%% TESTING predicate classifyMatrix/10
%%
:- begin_tests(classifyMatrix).
%% Failure Tests
test(nbc_ClassifyMatrix_Before_Train, [error(_,system_error('Error'))]) :-
reset_Model_NoTrain,
initModelWithTrain([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(nbc_ClassifyMatrix_Diffrent_Dims_To_Train, [error(_,system_error('Error'))]) :-
reset_Model_WithTrain,
initModelWithTrain([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(nbc_ClassifyMatrix_Normal_Use) :-
reset_Model_WithTrain,
initModelWithTrain([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, PredictionList, _, ProbabilitiesList),
print('\nPredictions: '),
print(PredictionList),
print('\nProbabilities: '),
print(ProbabilitiesList).
test(nbc_ClassifyMatrix_CSV_Input) :-
reset_Model_WithTrain,
open('src/data_csv/iris2.csv', read, File),
take_csv_row(File, skipFirstRow,10, Data),
initModelWithTrain(Data, 4, PredictionList, _, ProbabilitiesList),
print('\nPredictions: '),
print(PredictionList),
print('\nProbabilities: '),
print(ProbabilitiesList).
:- end_tests(classifyMatrix).
%%
%% TESTING predicate means/10
%% %%
%% TESTING predicate predicate/10 :- begin_tests(means).
%% Failure Tests
test(nbc_Means_Before_Train, [error(_,system_error('Error'))]) :-
reset_Model_NoTrain,
means(MeansList, _),
print('\nMeans: '),
print(MeansList).
%% Successful Tests
test(nbc_Means_Normal_Use) :-
reset_Model_WithTrain,
means(MeansList, _),
print('\nMeans: '),
print(MeansList).
:- end_tests(means).
%%
%% TESTING predicate probabilities/10
%% %%
:- begin_tests(predicate). :- begin_tests(probabilities).
%% Failure Tests %% Failure Tests
test(nbc_Probabilities_Before_Train, [error(_,system_error('Error'))]) :-
reset_Model_NoTrain,
probabilities(ProbabilitiesList, _),
print('\nProbabilities: '),
print(ProbabilitiesList).
%% Successful Tests
test(testDescription, [error(domain_error('expectation' , culprit), _)]) :- test(nbc_Probabilities_Normal_Use) :-
reset_Model_No_Train(perceptron), reset_Model_WithTrain,
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, _). probabilities(ProbabilitiesList, _),
print('\nProbabilities: '),
print(ProbabilitiesList).
test(testDescription2, [error(_,system_error('The values of the Label have to start at 0 and be >= 0 and < the given numClass!'))]) :- :- end_tests(probabilities).
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, _).
%%
%% TESTING predicate trainMatrix/5
%%
:- begin_tests(trainMatrix).
%% Failure Tests
test(nbc_TrainMatrix_Negative_NumClasses, fail) :-
reset_Model_NoTrain,
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], -2, 0).
test(nbc_TrainMatrix_Too_Short_Label, [error(_,system_error('Error'))]) :-
reset_Model_NoTrain,
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, 0).
test(nbc_TrainMatrix_Too_Long_Label, [error(_,system_error('Error'))]) :-
reset_Model_NoTrain,
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], 2, 0).
test(nbc_TrainMatrix_Too_Many_Label_Classes, [error(_,system_error('Error'))]) :-
reset_Model_NoTrain,
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], 2, 0).
%% Successful Tests %% Successful Tests
test(testDescription3, [true(Error =:= 1)]) :- test(nbc_TrainMatrix_Normal_Use) :-
reset_Model_No_Train(perceptron), reset_Model_NoTrain,
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). 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], 2, 0).
test(nbc_TrainMatrix_After_InitTrain) :-
reset_Model_WithTrain,
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], 2, 0).
test(testDescription4, [true(Error =:= 0.9797958971132711)]) :- test(nbc_TrainMatrix_CSV_Input) :-
reset_Model_No_Train(perceptron), reset_Model_NoTrain,
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). train(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 0).
:- end_tests(trainMatrix).
%%
%% TESTING predicate trainPoint/5
%%
:- begin_tests(trainPoint).
%% Failure Tests
test(nbc_TrainPoint_Bad_Label, [error(_,system_error('Error'))]) :-
reset_Model_NoTrain,
train([5.1,3.5,1.4], -5).
test(nbc_TrainPoint_Too_Long_Point, [error(_,system_error('Error'))]) :-
reset_Model_WithTrain,
train([5.1,3.5,1.4,3.5], 0).
%% Successful Tests
test(nbc_TrainPoint_Normal_Use) :-
reset_Model_NoTrain,
train([5.1,3.5,1.4], 0).
test(nbc_TrainPoint_After_InitTrain) :-
reset_Model_WithTrain,
train([5.1,3.5,1.4], 1).
:- end_tests(trainPoint).
%%
%% TESTING predicate variances/10
%%
:- begin_tests(variances).
%% Failure Tests
test(nbc_Variances_Before_Train, [error(_,system_error('Error'))]) :-
reset_Model_NoTrain,
variances(VariancesList, _),
print('\nVariances: '),
print(VariancesList).
%% Successful Tests
test(nbc_Variances_Normal_Use) :-
reset_Model_WithTrain,
variances(VariancesList, _),
print('\nVariances: '),
print(VariancesList).
:- end_tests(predicate). :- end_tests(variances).
run_naive_bayes_classifier_tests :- run_naive_bayes_classifier_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