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;
// Global Variable of the BayesianLinearRegression object so it can be accessed from all functions
BayesianLinearRegression regressor;
bool isModelTrained = false;
// input: const bool centerData,
// const bool scaleData,
......@@ -25,6 +26,7 @@ BayesianLinearRegression regressor;
void initModel(SP_integer centerData, SP_integer scaleData, SP_integer nIterMax, double tol)
{
regressor = new BayesianLinearRegression((centerData == 1), (scaleData == 1), nIterMax, tol);
isModelTrained = false;
}
// input:
......@@ -45,8 +47,13 @@ double beta()
// output: const arma::colvec & dataOffset
void dataOffset(float **dataOffsetArr, SP_integer *dataOffsetArrSize)
{
if (!isModelTrained)
{
raisePrologSystemExeption("The Model is not Trained!");
return;
}
// create the ReturnVector
rowvec dataOffsetReturnVector = regressor.DataOffset();
vec dataOffsetReturnVector = regressor.DataOffset();
// return the Vector
returnVectorInformation(dataOffsetReturnVector, dataOffsetArr, dataOffsetArrSize);
......@@ -56,8 +63,13 @@ void dataOffset(float **dataOffsetArr, SP_integer *dataOffsetArrSize)
// output: const arma::colvec & dataScale
void dataScale(float **dataScaleArr, SP_integer *dataScaleArrSize)
{
if (!isModelTrained)
{
raisePrologSystemExeption("The Model is not Trained!");
return;
}
// create the ReturnVector
rowvec dataScaleReturnVector = regressor.DataScale();
vec dataScaleReturnVector = regressor.DataScale();
// return the Vector
returnVectorInformation(dataScaleReturnVector, dataScaleArr, dataScaleArrSize);
......@@ -67,8 +79,13 @@ void dataScale(float **dataScaleArr, SP_integer *dataScaleArrSize)
// output: const arma::colvec & omega
void omega(float **omegaArr, SP_integer *omegaArrSize)
{
if (!isModelTrained)
{
raisePrologSystemExeption("The Model is not Trained!");
return;
}
// create the ReturnVector
rowvec omegaReturnVector = regressor.Omega();
vec omegaReturnVector = regressor.Omega();
// return the Vector
returnVectorInformation(omegaReturnVector, omegaArr, omegaArrSize);
......@@ -80,6 +97,11 @@ void omega(float **omegaArr, SP_integer *omegaArrSize)
void predict(float *pointsMatArr, SP_integer pointsMatSize, SP_integer pointsMatRowNum,
float **predictionsArr, SP_integer *predictionsArrSize)
{
if (!isModelTrained)
{
raisePrologSystemExeption("The Model is not Trained!");
return;
}
// convert the Prolog array to arma::mat
mat points = convertArrayToMat(pointsMatArr, pointsMatSize, pointsMatRowNum);
......@@ -98,7 +120,7 @@ void predict(float *pointsMatArr, SP_integer pointsMatSize, SP_integer pointsMat
return;
}
cout << points << endl;
// return the Vector
returnVectorInformation(predictionsReturnVector, predictionsArr, predictionsArrSize);
}
......@@ -111,6 +133,11 @@ void predictWithStd(float *pointsMatArr, SP_integer pointsMatSize, SP_integer po
float **predictionsArr, SP_integer *predictionsArrSize,
float **stdArr, SP_integer *stdArrSize)
{
if (!isModelTrained)
{
raisePrologSystemExeption("The Model is not Trained!");
return;
}
// convert the Prolog array to arma::mat
mat points = convertArrayToMat(pointsMatArr, pointsMatSize, pointsMatRowNum);
......@@ -141,6 +168,11 @@ void predictWithStd(float *pointsMatArr, SP_integer pointsMatSize, SP_integer po
// output: double
double responsesOffset()
{
if (!isModelTrained)
{
raisePrologSystemExeption("The Model is not Trained!");
return 0.0;
}
return regressor.ResponsesOffset();
}
......@@ -150,6 +182,11 @@ double responsesOffset()
double rmse(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum,
float *responsesArr, SP_integer responsesArrSize)
{
if (!isModelTrained)
{
raisePrologSystemExeption("The Model is not Trained!");
return 0.0;
}
// convert the Prolog array to arma::mat
mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum);
......@@ -177,7 +214,7 @@ void train(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum,
{
if(dataMatSize / dataMatRowNum != responsesArrSize)
{
cout << "Target dim doesnt fit to the Data dim" << endl;
raisePrologSystemExeption("Target dim doesnt fit to the Data dim");
return;
}
// convert the Prolog array to arma::mat
......@@ -197,12 +234,19 @@ void train(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum,
raisePrologSystemExeption(e.what());
return;
}
isModelTrained = true;
}
// input:
// output: double
double variance()
{
if (!isModelTrained)
{
raisePrologSystemExeption("The Model is not Trained!");
return 0.0;
}
return regressor.Variance();
}
......
......@@ -2,13 +2,13 @@
:- module(bayesian_linear_regression, [ initModel/4,
alpha/1,
beta/1,
dataOffset/2,
dataScale/2,
omega/2,
predict/5,
predictWithStd/7,
rmse/6,
train/5,
dataOffset/1,
dataScale/1,
omega/1,
predict/3,
predictWithStd/4,
rmse/4,
train/3,
variance/1]).
:- load_files(library(str_decl),
......@@ -39,7 +39,12 @@
%% 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
%%
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, +float32)).
......@@ -53,7 +58,10 @@ foreign(initModel, c, initModel( +integer,
%% Get the precision (or inverse variance) of the gaussian prior.
%% train/5 should be called before.
%%
foreign(alpha, c, alpha([-float32])).
alpha(Alpha) :-
alphaI(Alpha).
foreign(alpha, c, alphaI([-float32])).
%% --Input--
......@@ -65,7 +73,10 @@ foreign(alpha, c, alpha([-float32])).
%% Get the precision (or inverse variance) beta of the model.
%% train/5 should be called before.
%%
foreign(beta, c, beta([-float32])).
beta(Beta) :-
betaI(Beta).
foreign(beta, c, betaI([-float32])).
%% --Input--
......@@ -76,7 +87,11 @@ foreign(beta, c, beta([-float32])).
%% --Description--
%% 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--
......@@ -87,7 +102,11 @@ foreign(dataOffset, c, dataOffset(-pointer(float_array), -integer)).
%% --Description--
%% 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--
......@@ -98,7 +117,11 @@ foreign(dataScale, c, dataScale(-pointer(float_array), -integer)).
%% --Description--
%% 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--
......@@ -110,7 +133,12 @@ foreign(omega, c, omega(-pointer(float_array), -integer)).
%% --Description--
%% 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)).
......@@ -124,7 +152,13 @@ foreign(predict, c, predict( +pointer(float_array), +integer, +integer,
%% --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.
%%
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)).
......@@ -139,7 +173,12 @@ foreign(predictWithStd, c, predictWithStd( +pointer(float_array), +integer,
%% --Description--
%% 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,
[-float32])).
......@@ -154,7 +193,12 @@ foreign(rmse, c, rmse( +pointer(float_array), +integer, +integer,
%% Run BayesianLinearRegression.
%% 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)).
......@@ -167,7 +211,10 @@ foreign(train, c, train( +pointer(float_array), +integer, +integer,
%% Get the estimate variance.
%% 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
foreign_resource(bayesian_linear_regression, [ initModel,
......
......@@ -8,88 +8,390 @@
:- use_module('../../helper_files/helper.pl').
reset_Model :-
initModel(1,0,50,0.0001).
:- begin_tests(lists).
%% alpha tests
test(alpha_std_init) :-
reset_Model,
alpha(0).
test(alpha_wrong_input, fail) :-
%%
%% TESTING predicate initModel/4
%%
:- begin_tests(initModel).
%% 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,
alpha(1).
test(alpha_after_train, [true(A =:= -9223372036854775808)]) :-
%% Successful Tests
test(bay_lin_reg_Alpha_Std_init, [true(Alpha =:= 0.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)),
train(X,Xsize, Xrownum,Y, Ysize),
alpha(A).
alpha(Alpha).
%% train tests
test(correct_train) :-
test(bay_lin_reg_Alpha_After_Train, [true(Alpha =:= 0.12986500952614138)]) :-
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)),
train(X,Xsize, Xrownum,Y, Ysize).
test(false_train, fail) :-
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]),
alpha(Alpha).
:- end_tests(alpha).
%%
%% TESTING predicate beta/1
%%
:- begin_tests(beta).
%% Failure Tests
test(bay_lin_reg_Beta_Wrong_Input, fail) :-
reset_Model,
convert_list_to_float_array([],3, array(Xsize, Xrownum, X)),
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) :-
beta(1).
%% Successful Tests
test(bay_lin_reg_Beta_Std_init, [true(Beta =:= 0.0)]) :-
reset_Model,
convert_list_to_float_array([],0, array(Xsize, Xrownum, X)),
convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)),
train(X,Xsize, Xrownum,Y, Ysize).
test(false_train3, fail) :-
beta(Beta).
test(bay_lin_reg_Beta_After_Train, [true(Beta =:= 2.317989668988762E+31)]) :-
reset_Model,
convert_list_to_float_array([1,2],0, array(Xsize, Xrownum, X)),
convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)),
train(X,Xsize, Xrownum,Y, Ysize).
test(false_train3, fail) :-
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]),
beta(Beta).
:- 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,
convert_list_to_float_array([1,2,44,3],3, array(Xsize, Xrownum, X)),
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) :-
dataOffset(_).
%% Successful Tests
test(bay_lin_reg_DataOffset_DirektInput) :-
reset_Model,
convert_list_to_float_array([1,2,44,3],2, array(Xsize, Xrownum, X)),
convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)),
train(X,Xsize, Xrownum,Y, Ysize).
:- end_tests(lists).
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]),
dataOffset(ResponsesOffsetList),
print('\nResponsesOffset: '),
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
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(bay_lin_reg_DataScale_Before_Train, [error(_,system_error('The Model is not Trained!'))]) :-
reset_Model,
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!'))]) :-
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(bay_lin_reg_DataScale_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]),
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
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(bay_lin_reg_Omega_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]),
omega(OmegaList),
print('\nOmega: '),
print(OmegaList).
test(testDescription4, [true(Error =:= 0.9797958971132711)]) :-
reset_Model_No_Train(perceptron),
test(bay_lin_reg_Omega_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).
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_tests.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment