Skip to content
Snippets Groups Projects
Commit 381bf673 authored by Jakhes's avatar Jakhes
Browse files

Adding perceptron tests

parent 3df5ffd5
No related branches found
No related tags found
No related merge requests found
......@@ -32,6 +32,9 @@
%% Initilizes the perceptron model and its weight matrix but doesnt train it.
%%
initModelNoTrain(NumClasses, Dimensionality, MaxIterations) :-
NumClasses >= 0,
Dimensionality > 0,
MaxIterations >= 0,
initModelNoTrainI(NumClasses, Dimensionality, MaxIterations).
foreign(initModelNoTrain, c, initModelNoTrainI(+integer, +integer, +integer)).
......@@ -48,6 +51,8 @@ foreign(initModelNoTrain, c, initModelNoTrainI(+integer, +integer, +integer)).
%% Initilizes the perceptron model and its weight matrix and trains it with the given data.
%%
initModelWithTrain(DataList, DataRows, LabelsList, NumClasses, MaxIterations) :-
NumClasses >= 0,
MaxIterations >= 0,
convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)),
convert_list_to_float_array(LabelsList, array(Ysize, Y)),
initModelWithTrainI(X, Xsize, Xrownum, Y, Ysize, NumClasses, MaxIterations).
......@@ -100,6 +105,7 @@ foreign(classify, c, classifyI( +pointer(float_array), +integer, +integer,
%% Train the perceptron on the given data for up to the maximum number of iterations. This training does not reset the model weights, so you can call train/8 on multiple datasets sequentially.
%%
train(DataList, DataRows, LabelsList, NumClasses, WeightsList) :-
NumClasses >= 0,
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(WeightsList, array(Zsize, Z)),
......
......@@ -6,38 +6,212 @@
:- use_module(perceptron).
:- use_module('../../helper_files/helper.pl').
reset_Model :-
initModel(1,0,50,0.0001).
reset_Model_NoTrain :-
initModelNoTrain(2, 3, 1000).
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, 1000).
%%
%% TESTING predicate initModelNoTrain/3
%%
:- begin_tests(initModelNoTrain).
%% Failure Tests
test(perceptron_InitModelNoTrain_Negative_NumClasses, fail) :-
initModelNoTrain(-2, 3, 1000).
test(perceptron_InitModelNoTrain_Negative_Dimensionality, fail) :-
initModelNoTrain(2, -3, 1000).
test(perceptron_InitModelNoTrain_Negative_MaxIterations, fail) :-
initModelNoTrain(2, 3, -1000).
%% Successful Tests
test(perceptron_InitModelNoTrain_Normal_Use) :-
initModelNoTrain(2, 3, 1000).
test(perceptron_InitModelNoTrain_Alternative_Input) :-
initModelNoTrain(0, 0, 1000).
:- end_tests(initModelNoTrain).
%%
%% TESTING predicate predicate/10
%% TESTING predicate initModelWithTrain/5
%%
:- begin_tests(predicate).
:- begin_tests(initModelWithTrain).
%% 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(perceptron_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, 1000).
test(perceptron_InitModelWithTrain_Negative_MaxIterations, 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, -1000).
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(random_forest_InitModelWithTrainNoWeights_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, 1000).
test(random_forest_InitModelWithTrainNoWeights_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, 1000).
test(random_forest_InitModelWithTrainNoWeights_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, 1000).
%% 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(perceptron_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, 1000).
test(testDescription4, [true(Error =:= 0.9797958971132711)]) :-
reset_Model_No_Train(perceptron),
test(perceptron_InitModelWithTrain_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).
initModelWithTrain(Data, 4, [0,1,0,1,1,0,1,1,1,0], 2, 1000).
:- end_tests(initModelWithTrain).
%%
%% TESTING predicate biases/1
%%
:- begin_tests(biases).
%% Failure Tests
test(perceptron_Biases_Before_Train, [error(_,system_error('Error'))]) :-
reset_Model_NoTrain,
biases(_).
%% Successful Tests
test(perceptron_Biases_AfterTrain) :-
reset_Model_WithTrain,
biases(Biases),
print('\nBiases: '),
print(Biases).
:- end_tests(biases).
%%
%% TESTING predicate classify/3
%%
:- begin_tests(classify).
%% Failure Tests
test(perceptron_Classify_Before_Train, [error(_,system_error('Error'))]) :-
reset_Model_NoTrain,
classify([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(perceptron_Classify_Before_Train_Wrong_Dims, [error(_,system_error('Error'))]) :-
reset_Model_NoTrain,
classify([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, _).
test(perceptron_Classify_Different_Dims_Than_Train) :-
reset_Model_WithTrain,
classify([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(perceptron_Classify_Normal_Use) :-
reset_Model_WithTrain,
classify([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, PredictList),
print('\nPredicted Labels: '),
print(PredictList).
:- end_tests(classify).
%%
%% TESTING predicate train/5
%%
:- begin_tests(train).
%% Failure Tests
test(perceptron_Train_Negaitve_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.1,0.2,0.3,0.4]).
test(perceptron_Train_Too_Small_Data_Dims, [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], 4, [0,1,0], 2, [0.1,0.2,0.3]).
test(perceptron_Train_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.1,0.2,0.3,0.4]).
test(perceptron_Train_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.1,0.2,0.3,0.4]).
test(perceptron_Train_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.1,0.2,0.3,0.4]).
test(perceptron_Train_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,0,1], 2, [0.1,0.2]).
test(perceptron_Train_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], 2, [0.1,0.2,0.3,0.4,0.6,0.7]).
test(perceptron_Train_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,0,1], 2, [-0.1,0.2,1.3,2.4]).
%% Successful Tests
test(perceptron_Train_Normal_Use) :-
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.1,0.2,0.3,0.4]).
:- end_tests(train).
%%
%% TESTING predicate weights/2
%%
:- begin_tests(weights).
%% Failure Tests
test(perceptron_Weights_Before_Train, [error(_,system_error('Error'))]) :-
reset_Model_NoTrain,
weights(_, _).
%% Successful Tests
test(perceptron_Weights_AfterTrain) :-
reset_Model_WithTrain,
weights(Weights, _),
print('\nWeights: '),
print(Weights).
:- end_tests(predicate).
:- end_tests(weights).
run_perceptron_tests :-
run_tests.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment