Skip to content
Snippets Groups Projects
Commit 89d3a7ce authored by Jakhes's avatar Jakhes
Browse files

Adding bayesian_linear_regression tests

parent c9748aa3
No related branches found
No related tags found
No related merge requests found
...@@ -16,6 +16,7 @@ using namespace mlpack::regression; ...@@ -16,6 +16,7 @@ using namespace mlpack::regression;
// Global Variable of the BayesianLinearRegression object so it can be accessed from all functions // Global Variable of the BayesianLinearRegression object so it can be accessed from all functions
BayesianLinearRegression regressor; BayesianLinearRegression regressor;
bool isModelTrained = false;
// input: const bool centerData, // input: const bool centerData,
// const bool scaleData, // const bool scaleData,
...@@ -25,6 +26,7 @@ BayesianLinearRegression regressor; ...@@ -25,6 +26,7 @@ BayesianLinearRegression regressor;
void initModel(SP_integer centerData, SP_integer scaleData, SP_integer nIterMax, double tol) void initModel(SP_integer centerData, SP_integer scaleData, SP_integer nIterMax, double tol)
{ {
regressor = new BayesianLinearRegression((centerData == 1), (scaleData == 1), nIterMax, tol); regressor = new BayesianLinearRegression((centerData == 1), (scaleData == 1), nIterMax, tol);
isModelTrained = false;
} }
// input: // input:
...@@ -45,8 +47,13 @@ double beta() ...@@ -45,8 +47,13 @@ double beta()
// output: const arma::colvec & dataOffset // output: const arma::colvec & dataOffset
void dataOffset(float **dataOffsetArr, SP_integer *dataOffsetArrSize) void dataOffset(float **dataOffsetArr, SP_integer *dataOffsetArrSize)
{ {
if (!isModelTrained)
{
raisePrologSystemExeption("The Model is not Trained!");
return;
}
// create the ReturnVector // create the ReturnVector
rowvec dataOffsetReturnVector = regressor.DataOffset(); vec dataOffsetReturnVector = regressor.DataOffset();
// return the Vector // return the Vector
returnVectorInformation(dataOffsetReturnVector, dataOffsetArr, dataOffsetArrSize); returnVectorInformation(dataOffsetReturnVector, dataOffsetArr, dataOffsetArrSize);
...@@ -56,8 +63,13 @@ void dataOffset(float **dataOffsetArr, SP_integer *dataOffsetArrSize) ...@@ -56,8 +63,13 @@ void dataOffset(float **dataOffsetArr, SP_integer *dataOffsetArrSize)
// output: const arma::colvec & dataScale // output: const arma::colvec & dataScale
void dataScale(float **dataScaleArr, SP_integer *dataScaleArrSize) void dataScale(float **dataScaleArr, SP_integer *dataScaleArrSize)
{ {
if (!isModelTrained)
{
raisePrologSystemExeption("The Model is not Trained!");
return;
}
// create the ReturnVector // create the ReturnVector
rowvec dataScaleReturnVector = regressor.DataScale(); vec dataScaleReturnVector = regressor.DataScale();
// return the Vector // return the Vector
returnVectorInformation(dataScaleReturnVector, dataScaleArr, dataScaleArrSize); returnVectorInformation(dataScaleReturnVector, dataScaleArr, dataScaleArrSize);
...@@ -67,8 +79,13 @@ void dataScale(float **dataScaleArr, SP_integer *dataScaleArrSize) ...@@ -67,8 +79,13 @@ void dataScale(float **dataScaleArr, SP_integer *dataScaleArrSize)
// output: const arma::colvec & omega // output: const arma::colvec & omega
void omega(float **omegaArr, SP_integer *omegaArrSize) void omega(float **omegaArr, SP_integer *omegaArrSize)
{ {
if (!isModelTrained)
{
raisePrologSystemExeption("The Model is not Trained!");
return;
}
// create the ReturnVector // create the ReturnVector
rowvec omegaReturnVector = regressor.Omega(); vec omegaReturnVector = regressor.Omega();
// return the Vector // return the Vector
returnVectorInformation(omegaReturnVector, omegaArr, omegaArrSize); returnVectorInformation(omegaReturnVector, omegaArr, omegaArrSize);
...@@ -80,6 +97,11 @@ void omega(float **omegaArr, SP_integer *omegaArrSize) ...@@ -80,6 +97,11 @@ void omega(float **omegaArr, SP_integer *omegaArrSize)
void predict(float *pointsMatArr, SP_integer pointsMatSize, SP_integer pointsMatRowNum, void predict(float *pointsMatArr, SP_integer pointsMatSize, SP_integer pointsMatRowNum,
float **predictionsArr, SP_integer *predictionsArrSize) float **predictionsArr, SP_integer *predictionsArrSize)
{ {
if (!isModelTrained)
{
raisePrologSystemExeption("The Model is not Trained!");
return;
}
// convert the Prolog array to arma::mat // convert the Prolog array to arma::mat
mat points = convertArrayToMat(pointsMatArr, pointsMatSize, pointsMatRowNum); mat points = convertArrayToMat(pointsMatArr, pointsMatSize, pointsMatRowNum);
...@@ -98,7 +120,7 @@ void predict(float *pointsMatArr, SP_integer pointsMatSize, SP_integer pointsMat ...@@ -98,7 +120,7 @@ void predict(float *pointsMatArr, SP_integer pointsMatSize, SP_integer pointsMat
return; return;
} }
cout << points << endl;
// return the Vector // return the Vector
returnVectorInformation(predictionsReturnVector, predictionsArr, predictionsArrSize); returnVectorInformation(predictionsReturnVector, predictionsArr, predictionsArrSize);
} }
...@@ -111,6 +133,11 @@ void predictWithStd(float *pointsMatArr, SP_integer pointsMatSize, SP_integer po ...@@ -111,6 +133,11 @@ void predictWithStd(float *pointsMatArr, SP_integer pointsMatSize, SP_integer po
float **predictionsArr, SP_integer *predictionsArrSize, float **predictionsArr, SP_integer *predictionsArrSize,
float **stdArr, SP_integer *stdArrSize) float **stdArr, SP_integer *stdArrSize)
{ {
if (!isModelTrained)
{
raisePrologSystemExeption("The Model is not Trained!");
return;
}
// convert the Prolog array to arma::mat // convert the Prolog array to arma::mat
mat points = convertArrayToMat(pointsMatArr, pointsMatSize, pointsMatRowNum); mat points = convertArrayToMat(pointsMatArr, pointsMatSize, pointsMatRowNum);
...@@ -141,6 +168,11 @@ void predictWithStd(float *pointsMatArr, SP_integer pointsMatSize, SP_integer po ...@@ -141,6 +168,11 @@ void predictWithStd(float *pointsMatArr, SP_integer pointsMatSize, SP_integer po
// output: double // output: double
double responsesOffset() double responsesOffset()
{ {
if (!isModelTrained)
{
raisePrologSystemExeption("The Model is not Trained!");
return 0.0;
}
return regressor.ResponsesOffset(); return regressor.ResponsesOffset();
} }
...@@ -150,6 +182,11 @@ double responsesOffset() ...@@ -150,6 +182,11 @@ double responsesOffset()
double rmse(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum, double rmse(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum,
float *responsesArr, SP_integer responsesArrSize) float *responsesArr, SP_integer responsesArrSize)
{ {
if (!isModelTrained)
{
raisePrologSystemExeption("The Model is not Trained!");
return 0.0;
}
// convert the Prolog array to arma::mat // convert the Prolog array to arma::mat
mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum); mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum);
...@@ -177,7 +214,7 @@ void train(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum, ...@@ -177,7 +214,7 @@ void train(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum,
{ {
if(dataMatSize / dataMatRowNum != responsesArrSize) if(dataMatSize / dataMatRowNum != responsesArrSize)
{ {
cout << "Target dim doesnt fit to the Data dim" << endl; raisePrologSystemExeption("Target dim doesnt fit to the Data dim");
return; return;
} }
// convert the Prolog array to arma::mat // convert the Prolog array to arma::mat
...@@ -197,12 +234,19 @@ void train(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum, ...@@ -197,12 +234,19 @@ void train(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum,
raisePrologSystemExeption(e.what()); raisePrologSystemExeption(e.what());
return; return;
} }
isModelTrained = true;
} }
// input: // input:
// output: double // output: double
double variance() double variance()
{ {
if (!isModelTrained)
{
raisePrologSystemExeption("The Model is not Trained!");
return 0.0;
}
return regressor.Variance(); return regressor.Variance();
} }
......
...@@ -2,13 +2,13 @@ ...@@ -2,13 +2,13 @@
:- module(bayesian_linear_regression, [ initModel/4, :- module(bayesian_linear_regression, [ initModel/4,
alpha/1, alpha/1,
beta/1, beta/1,
dataOffset/2, dataOffset/1,
dataScale/2, dataScale/1,
omega/2, omega/1,
predict/5, predict/3,
predictWithStd/7, predictWithStd/4,
rmse/6, rmse/4,
train/5, train/3,
variance/1]). variance/1]).
:- load_files(library(str_decl), :- load_files(library(str_decl),
...@@ -39,7 +39,12 @@ ...@@ -39,7 +39,12 @@
%% Initiates the Model so now train/5 can be called. %% Initiates the Model so now train/5 can be called.
%% Before predict/5 or predictWitStd/7 can be used train/5 has to be called before %% Before predict/5 or predictWitStd/7 can be used train/5 has to be called before
%% %%
foreign(initModel, c, initModel( +integer, initModel(CenterData, ScaleData, NIterMax, Tol) :-
NIterMax >= 0,
Tol > 0,
initModelI(CenterData, ScaleData, NIterMax, Tol).
foreign(initModel, c, initModelI( +integer,
+integer, +integer,
+integer, +float32)). +integer, +float32)).
...@@ -53,7 +58,10 @@ foreign(initModel, c, initModel( +integer, ...@@ -53,7 +58,10 @@ foreign(initModel, c, initModel( +integer,
%% Get the precision (or inverse variance) of the gaussian prior. %% Get the precision (or inverse variance) of the gaussian prior.
%% train/5 should be called before. %% train/5 should be called before.
%% %%
foreign(alpha, c, alpha([-float32])). alpha(Alpha) :-
alphaI(Alpha).
foreign(alpha, c, alphaI([-float32])).
%% --Input-- %% --Input--
...@@ -65,7 +73,10 @@ foreign(alpha, c, alpha([-float32])). ...@@ -65,7 +73,10 @@ foreign(alpha, c, alpha([-float32])).
%% Get the precision (or inverse variance) beta of the model. %% Get the precision (or inverse variance) beta of the model.
%% train/5 should be called before. %% train/5 should be called before.
%% %%
foreign(beta, c, beta([-float32])). beta(Beta) :-
betaI(Beta).
foreign(beta, c, betaI([-float32])).
%% --Input-- %% --Input--
...@@ -76,7 +87,11 @@ foreign(beta, c, beta([-float32])). ...@@ -76,7 +87,11 @@ foreign(beta, c, beta([-float32])).
%% --Description-- %% --Description--
%% Get the mean vector computed on the features over the training points. %% Get the mean vector computed on the features over the training points.
%% %%
foreign(dataOffset, c, dataOffset(-pointer(float_array), -integer)). dataOffset(ResponsesList) :-
dataOffsetI(X, Xsize),
convert_float_array_to_list(X, Xsize, ResponsesList).
foreign(dataOffset, c, dataOffsetI(-pointer(float_array), -integer)).
%% --Input-- %% --Input--
...@@ -87,7 +102,11 @@ foreign(dataOffset, c, dataOffset(-pointer(float_array), -integer)). ...@@ -87,7 +102,11 @@ foreign(dataOffset, c, dataOffset(-pointer(float_array), -integer)).
%% --Description-- %% --Description--
%% Get the vector of standard deviations computed on the features over the training points. %% Get the vector of standard deviations computed on the features over the training points.
%% %%
foreign(dataScale, c, dataScale(-pointer(float_array), -integer)). dataScale(DataOffsetList) :-
dataScaleI(X, Xsize),
convert_float_array_to_list(X, Xsize, DataOffsetList).
foreign(dataScale, c, dataScaleI(-pointer(float_array), -integer)).
%% --Input-- %% --Input--
...@@ -98,7 +117,11 @@ foreign(dataScale, c, dataScale(-pointer(float_array), -integer)). ...@@ -98,7 +117,11 @@ foreign(dataScale, c, dataScale(-pointer(float_array), -integer)).
%% --Description-- %% --Description--
%% Get the solution vector. %% Get the solution vector.
%% %%
foreign(omega, c, omega(-pointer(float_array), -integer)). omega(OmegaList) :-
omegaI(X, Xsize),
convert_float_array_to_list(X, Xsize, OmegaList).
foreign(omega, c, omegaI(-pointer(float_array), -integer)).
%% --Input-- %% --Input--
...@@ -110,7 +133,12 @@ foreign(omega, c, omega(-pointer(float_array), -integer)). ...@@ -110,7 +133,12 @@ foreign(omega, c, omega(-pointer(float_array), -integer)).
%% --Description-- %% --Description--
%% Predict yi for each data point in the given data matrix using the currently-trained Bayesian Ridge model. %% Predict yi for each data point in the given data matrix using the currently-trained Bayesian Ridge model.
%% %%
foreign(predict, c, predict( +pointer(float_array), +integer, +integer, predict(PointsList, PointsRows, PredictionsList) :-
convert_list_to_float_array(PointsList, PointsRows, array(Xsize, Xrows, X)),
predictI(X, Xsize, Xrows, Y, Ysize),
convert_float_array_to_list(Y, Ysize, PredictionsList).
foreign(predict, c, predictI( +pointer(float_array), +integer, +integer,
-pointer(float_array), -integer)). -pointer(float_array), -integer)).
...@@ -124,7 +152,13 @@ foreign(predict, c, predict( +pointer(float_array), +integer, +integer, ...@@ -124,7 +152,13 @@ foreign(predict, c, predict( +pointer(float_array), +integer, +integer,
%% --Description-- %% --Description--
%% Predict yi and the standard deviation of the predictive posterior distribution for each data point in the given data matrix, using the currently-trained Bayesian Ridge estimator. %% Predict yi and the standard deviation of the predictive posterior distribution for each data point in the given data matrix, using the currently-trained Bayesian Ridge estimator.
%% %%
foreign(predictWithStd, c, predictWithStd( +pointer(float_array), +integer, +integer, predictWithStd(PointsList, PointsRows, PredictionsList, STDList) :-
convert_list_to_float_array(PointsList, PointsRows, array(Xsize, Xrows, X)),
predictWithStdI(X, Xsize, Xrows, Y, Ysize, Z, Zsize),
convert_float_array_to_list(Y, Ysize, PredictionsList),
convert_float_array_to_list(Z, Zsize, STDList).
foreign(predictWithStd, c, predictWithStdI( +pointer(float_array), +integer, +integer,
-pointer(float_array), -integer, -pointer(float_array), -integer,
-pointer(float_array), -integer)). -pointer(float_array), -integer)).
...@@ -139,7 +173,12 @@ foreign(predictWithStd, c, predictWithStd( +pointer(float_array), +integer, ...@@ -139,7 +173,12 @@ foreign(predictWithStd, c, predictWithStd( +pointer(float_array), +integer,
%% --Description-- %% --Description--
%% Compute the Root Mean Square Error between the predictions returned by the model and the true responses. %% Compute the Root Mean Square Error between the predictions returned by the model and the true responses.
%% %%
foreign(rmse, c, rmse( +pointer(float_array), +integer, +integer, rmse(DataList, DataRows, ResponsesList, RMSE) :-
convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrows, X)),
convert_list_to_float_array(ResponsesList, array(Ysize, Y)),
rmseI(X, Xsize, Xrows, Y, Ysize, RMSE).
foreign(rmse, c, rmseI(+pointer(float_array), +integer, +integer,
+pointer(float_array), +integer, +pointer(float_array), +integer,
[-float32])). [-float32])).
...@@ -154,7 +193,12 @@ foreign(rmse, c, rmse( +pointer(float_array), +integer, +integer, ...@@ -154,7 +193,12 @@ foreign(rmse, c, rmse( +pointer(float_array), +integer, +integer,
%% Run BayesianLinearRegression. %% Run BayesianLinearRegression.
%% The input matrix (like all mlpack matrices) should be column-major each column is an observation and each row is a dimension. %% The input matrix (like all mlpack matrices) should be column-major each column is an observation and each row is a dimension.
%% %%
foreign(train, c, train( +pointer(float_array), +integer, +integer, train(DataList, DataRows, ResponsesList) :-
convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrows, X)),
convert_list_to_float_array(ResponsesList, array(Ysize, Y)),
trainI(X, Xsize, Xrows, Y, Ysize).
foreign(train, c, trainI( +pointer(float_array), +integer, +integer,
+pointer(float_array), +integer)). +pointer(float_array), +integer)).
...@@ -167,7 +211,10 @@ foreign(train, c, train( +pointer(float_array), +integer, +integer, ...@@ -167,7 +211,10 @@ foreign(train, c, train( +pointer(float_array), +integer, +integer,
%% Get the estimate variance. %% Get the estimate variance.
%% train/5 should be called before. %% train/5 should be called before.
%% %%
foreign(variance, c, variance([-float32])). variance(Variance) :-
varianceI(Variance).
foreign(variance, c, varianceI([-float32])).
%% Defines what functions should be connected from main.cpp %% Defines what functions should be connected from main.cpp
foreign_resource(bayesian_linear_regression, [ initModel, foreign_resource(bayesian_linear_regression, [ initModel,
......
...@@ -8,88 +8,390 @@ ...@@ -8,88 +8,390 @@
:- use_module('../../helper_files/helper.pl'). :- use_module('../../helper_files/helper.pl').
reset_Model :- reset_Model :-
initModel(1,0,50,0.0001). initModel(1,0,50,0.0001).
:- begin_tests(lists).
%% alpha tests %%
test(alpha_std_init) :- %% TESTING predicate initModel/4
reset_Model, %%
alpha(0). :- begin_tests(initModel).
test(alpha_wrong_input, fail) :-
%% Failure Tests
test(bay_lin_reg_InitModel_Negative_NIterMax, fail) :-
initModel(0,0,-50,0.0001).
test(bay_lin_reg_InitModel_Negative_Tolerance, fail) :-
initModel(0,0,50,-0.0001).
%% Successful Tests
test(bay_lin_reg_InitModel_Default_Inputs) :-
initModel(1,0,50,0.0001).
test(bay_lin_reg_InitModel_Alternative_Inputs) :-
initModel(1,1,0,0.0071).
:- end_tests(initModel).
%%
%% TESTING predicate alpha/1
%%
:- begin_tests(alpha).
%% Failure Tests
test(bay_lin_reg_Alpha_Wrong_Input, fail) :-
reset_Model, reset_Model,
alpha(1). alpha(1).
test(alpha_after_train, [true(A =:= -9223372036854775808)]) :-
%% Successful Tests
test(bay_lin_reg_Alpha_Std_init, [true(Alpha =:= 0.0)]) :-
reset_Model, 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)), alpha(Alpha).
convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)),
train(X,Xsize, Xrownum,Y, Ysize),
alpha(A).
%% train tests test(bay_lin_reg_Alpha_After_Train, [true(Alpha =:= 0.12986500952614138)]) :-
test(correct_train) :-
reset_Model, 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)), 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]),
convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)), alpha(Alpha).
train(X,Xsize, Xrownum,Y, Ysize).
test(false_train, fail) :- :- end_tests(alpha).
%%
%% TESTING predicate beta/1
%%
:- begin_tests(beta).
%% Failure Tests
test(bay_lin_reg_Beta_Wrong_Input, fail) :-
reset_Model, reset_Model,
convert_list_to_float_array([],3, array(Xsize, Xrownum, X)), beta(1).
convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)),
train(X,Xsize, Xrownum,Y, Ysize).
test(false_train2, fail) :- %% Successful Tests
test(bay_lin_reg_Beta_Std_init, [true(Beta =:= 0.0)]) :-
reset_Model, reset_Model,
convert_list_to_float_array([],0, array(Xsize, Xrownum, X)), beta(Beta).
convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)),
train(X,Xsize, Xrownum,Y, Ysize). test(bay_lin_reg_Beta_After_Train, [true(Beta =:= 2.317989668988762E+31)]) :-
test(false_train3, fail) :-
reset_Model, reset_Model,
convert_list_to_float_array([1,2],0, array(Xsize, Xrownum, X)), 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]),
convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)), beta(Beta).
train(X,Xsize, Xrownum,Y, Ysize).
test(false_train3, fail) :- :- end_tests(beta).
%%
%% TESTING predicate dataOffset/1
%%
:- begin_tests(dataOffset).
%% Failure Tests
test(bay_lin_reg_DataOffset_Before_Train, [error(_,system_error('The Model is not Trained!'))]) :-
reset_Model, reset_Model,
convert_list_to_float_array([1,2,44,3],3, array(Xsize, Xrownum, X)), dataOffset(_).
convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)),
train(X,Xsize, Xrownum,Y, Ysize).
test(false_train4) :- %% Successful Tests
test(bay_lin_reg_DataOffset_DirektInput) :-
reset_Model, reset_Model,
convert_list_to_float_array([1,2,44,3],2, array(Xsize, Xrownum, X)), 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]),
convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)), dataOffset(ResponsesOffsetList),
train(X,Xsize, Xrownum,Y, Ysize). print('\nResponsesOffset: '),
:- end_tests(lists). print(ResponsesOffsetList).
test(bay_lin_reg_DataOffset_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]),
dataOffset(ResponsesOffsetList),
print('\nResponsesOffset: '),
print(ResponsesOffsetList).
:- end_tests(dataOffset).
%% %%
%% TESTING predicate predicate/10 %% TESTING predicate dataScale/1
%% %%
:- begin_tests(predicate). :- begin_tests(dataScale).
%% Failure Tests %% Failure Tests
test(testDescription, [error(domain_error('expectation' , culprit), _)]) :- test(bay_lin_reg_DataScale_Before_Train, [error(_,system_error('The Model is not Trained!'))]) :-
reset_Model_No_Train(perceptron), reset_Model,
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, _). dataScale(_).
%% Successful Tests
test(bay_lin_reg_DataScale_DirektInput) :-
reset_Model,
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]),
dataScale(DataOffsetList),
print('\nDataOffset: '),
print(DataOffsetList).
test(testDescription2, [error(_,system_error('The values of the Label have to start at 0 and be >= 0 and < the given numClass!'))]) :- test(bay_lin_reg_DataScale_CSV_Input) :-
reset_Model_No_Train(perceptron), open('src/data_csv/iris2.csv', read, File),
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, _). take_csv_row(File, skipFirstRow,10, Data),
train(Data, 4, [0,1,0,1,1,0,1,1,1,0]),
dataScale(DataOffsetList),
print('\nDataOffset: '),
print(DataOffsetList).
:- end_tests(dataScale).
%%
%% TESTING predicate omega/1
%%
:- begin_tests(omega).
%% Failure Tests
test(bay_lin_reg_Omega_Before_Train, [error(_,system_error('The Model is not Trained!'))]) :-
reset_Model,
omega(_).
%% Successful Tests %% Successful Tests
test(testDescription3, [true(Error =:= 1)]) :- test(bay_lin_reg_Omega_DirektInput) :-
reset_Model_No_Train(perceptron), reset_Model,
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]),
omega(OmegaList),
print('\nOmega: '),
print(OmegaList).
test(testDescription4, [true(Error =:= 0.9797958971132711)]) :- test(bay_lin_reg_Omega_CSV_Input) :-
reset_Model_No_Train(perceptron),
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]),
omega(OmegaList),
print('\nOmega: '),
print(OmegaList).
:- end_tests(omega).
%%
%% TESTING predicate predict/3
%%
:- begin_tests(predict).
%% Failure Tests
test(bay_lin_reg_Predict_Before_Train, [error(_,system_error('The Model is not Trained!'))]) :-
reset_Model,
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, _).
test(bay_lin_reg_Predict_Different_Dims_Than_Trained, [error(_,system_error('each_col(): incompatible size; expected 4x1, got 3x1'))]) :-
reset_Model,
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]),
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(bay_lin_reg_Predict_Direct_Input) :-
reset_Model,
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]),
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, PredictionsList),
print('\nPredictions: '),
print(PredictionsList).
test(bay_lin_reg_Predict_CSV_Input) :-
reset_Model,
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]),
predict([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, PredictionsList),
print('\nPredictions: '),
print(PredictionsList).
:- end_tests(predict).
%%
%% TESTING predicate predictWithStd/3
%%
:- begin_tests(predictWithStd).
%% Failure Tests
test(bay_lin_reg_PredictWithStd_Before_Train, [error(_,system_error('The Model is not Trained!'))]) :-
reset_Model,
predictWithStd([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(bay_lin_reg_PredictWithStd_Different_Dims_Than_Trained, [error(_,system_error('each_col(): incompatible size; expected 4x1, got 3x1'))]) :-
reset_Model,
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]),
predictWithStd([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(bay_lin_reg_PredictWithStd_Direct_Input) :-
reset_Model,
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]),
predictWithStd([3, 2, 0, 5, 1, 4, 0, 0, 4, 3, 3, 5, 0, 5, 5], 3, PredictionsList, STDList),
print('\nPredictions: '),
print(PredictionsList),
print('\nSTD: '),
print(STDList).
test(bay_lin_reg_PredictWithStd_CSV_Input) :-
reset_Model,
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]),
predictWithStd([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, PredictionsList, STDList),
print('\nPredictions: '),
print(PredictionsList),
print('\nSTD: '),
print(STDList).
:- end_tests(predictWithStd).
%%
%% TESTING predicate rmse/4
%%
:- begin_tests(rmse).
%% Failure Tests
test(bay_lin_reg_RMSE_Before_Train, [error(_,system_error('The Model is not Trained!'))]) :-
reset_Model,
rmse([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], _).
test(bay_lin_reg_RMSE_Too_Small_Label_Dims, [error(_,system_error('subtraction: incompatible matrix dimensions: 1x2 and 1x4'))]) :-
reset_Model,
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]),
rmse([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(bay_lin_reg_RMSE_Too_Large_Label_Dims, [error(_,system_error('subtraction: incompatible matrix dimensions: 1x6 and 1x4'))]) :-
reset_Model,
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]),
rmse([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,1,0,0,0], _).
%% doesnt cause an exception
test(bay_lin_reg_RMSE_Wrong_Label_Value) :-
reset_Model,
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]),
rmse([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,0,-1], _).
test(bay_lin_reg_RMSE_Wrong_Data_Dims, [error(_,system_error('each_col(): incompatible size; expected 4x1, got 3x1'))]) :-
reset_Model,
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]),
rmse([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,1], _).
test(bay_lin_reg_RMSE_Wrong_Amount_Off_DataPoints, [error(_,system_error('subtraction: incompatible matrix dimensions: 1x10 and 1x5'))]) :-
reset_Model,
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]),
rmse([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, [0,1,0,1,1,0,1,1,1,0], _).
%% Successful Tests
test(bay_lin_reg_RMSE_Direct_Input) :-
reset_Model,
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]),
rmse([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], RMSE),
print('\nRMSE: '),
print(RMSE).
test(bay_lin_reg_RMSE_CSV_Input) :-
reset_Model,
open('src/data_csv/iris2.csv', read, File),
take_csv_row(File, skipFirstRow,5, Data),
train(Data, 4, [0,1,0,1,1]),
rmse([3, 2, 0, 5, 1, 4, 1, 0, 4, 3, 3, 5, 0, 5, 5, 2, 5, 5, 0, 2], 4, [0,1,0,1,1], RMSE),
print('\nRMSE: '),
print(RMSE).
:- end_tests(rmse).
%%
%% TESTING predicate train/3
%%
:- begin_tests(train).
%% Failure Tests
test(bay_lin_reg_Train_Too_Small_Label_Dims, [error(_,system_error('Target dim doesnt fit to the Data dim'))]) :-
reset_Model,
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]).
test(bay_lin_reg_Train_Too_Large_Label_Dims, [error(_,system_error('Target dim doesnt fit to the Data dim'))]) :-
reset_Model,
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,1,0,0,0]).
%% doesnt cause an Exception
test(bay_lin_reg_Train_Wrong_Label_Value) :-
reset_Model,
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,5,0,-1]).
%% Successful Tests
test(bay_lin_reg_Train_Direct_Input) :-
reset_Model,
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]).
test(bay_lin_reg_Train_CSV_Input) :-
reset_Model,
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]).
:- end_tests(train).
%%
%% TESTING predicate variance/1
%%
:- begin_tests(variance).
%% Failure Tests
test(bay_lin_reg_Variance_Before_Train, [error(_,system_error('The Model is not Trained!'))]) :-
reset_Model,
variance(_).
%% Successful Tests
test(bay_lin_reg_Variance_After_Train, [true(Variance =:= 4.3140830754274083E-32)]) :-
reset_Model,
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]),
variance(Variance).
:- end_tests(variance).
:- end_tests(predicate).
run_bayesian_linear_regression_tests :- run_bayesian_linear_regression_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