Simple Linear Regression and Prediction
An implementation of simple linear regression and ridge regression using ordinary least squares.
:- use_module('path/to/.../src/methods/linear_regression/linear_regression.pl').
%% usage example
TrainData = [5.1,3.5,1.4, 4.9,3.0,1.4, 4.7,3.2,1.3, 4.6,3.1,1.5],
TestData = [3,2,0, 5,1,4, 0,0,4, 3,3,5, 0,5,5, 2,5,5],
linear_regression_initModel(TrainData, 3, [0,1,0,1], 0.0, 1),
linear_regression_predict(TestData, 3, Responses).
Available Predicates
- linear_regression_initModel/5
- linear_regression_initModelWithWeights/6
- linear_regression_computeError/4
- linear_regression_parameters/1
- linear_regression_modifyParameters/1
- linear_regression_predict/3
- linear_regression_train/5
- linear_regression_trainWithWeights/6
linear_regression_initModel/5
Initializes the linear_regression model and trains it but doesnt include weights.
%% predicate definition
linear_regression_initModel(DataList, DataRows, ResponsesList, Lambda, Intercept) :-
convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)),
convert_list_to_float_array(ResponsesList, array(Ysize, Y)),
initModelI(X, Xsize, Xrownum, Y, Ysize, Lambda, Intercept).
%% foreign c++ predicate definition
foreign(initModel, c, initModelI( +pointer(float_array), +integer, +integer,
+pointer(float_array), +integer,
+float32,
+integer)).
Parameters
Name | Type | Description | Default |
---|---|---|---|
data | +matrix | X, matrix of data points. | - |
responses | +vector | y, the measured data for each point in X. | - |
lambda | +float | Regularization constant for ridge regression. | 0.0 |
intercept | +integer(bool) | Whether or not to include an intercept term. | (1)true |
linear_regression_initModelWithWeights/6
Initializes the linear_regression model, trains it and adds weights to it.
%% predicate definition
linear_regression_initModelWithWeights(DataList, DataRows, ResponsesList, WeightsList, Lambda, Intercept) :-
convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)),
convert_list_to_float_array(ResponsesList, array(Ysize, Y)),
convert_list_to_float_array(WeightsList, array(Zsize, Z)),
initModelWithWeightsI(X, Xsize, Xrownum, Y, Ysize, Z, Zsize, Lambda, Intercept).
%% foreign c++ predicate definition
foreign(initModelWithWeights, c, initModelWithWeightsI( +pointer(float_array), +integer, +integer,
+pointer(float_array), +integer,
+pointer(float_array), +integer,
+float32,
+integer)).
Parameters
Name | Type | Description | Default |
---|---|---|---|
data | +matrix | X, matrix of data points. | - |
responses | +vector | y, the measured data for each point in X. | - |
weights | +vector | Observation weights (for boosting). | - |
lambda | +float | Regularization constant for ridge regression. | 0.0 |
intercept | +integer(bool) | Whether or not to include an intercept term. | (1)true |
linear_regression_computeError/4
Calculate the L2 squared error on the given predictors and responses using this linear regression model.
%% predicate definition
linear_regression_computeError(DataList, DataRows, ResponsesList, Error) :-
convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)),
convert_list_to_float_array(ResponsesList, array(Ysize, Y)),
computeErrorI(X, Xsize, Xrownum, Y, Ysize, Error).
%% foreign c++ predicate definition
foreign(computeError, c, computeErrorI( +pointer(float_array), +integer, +integer,
+pointer(float_array), +integer,
[-float32])).
Parameters
Name | Type | Description | Default |
---|---|---|---|
points | +matrix | Matrix of predictors (X). | - |
responses | +vector | Transposed vector of responses (y^T). | - |
error | -float | As this number decreases to 0, the linear regression fit is better. | - |
linear_regression_parameters/1
Get the parameters (the b vector).
%% predicate definition
linear_regression_parameters(ParametersList) :-
parametersI(Y, Ysize),
convert_float_array_to_list(Y, Ysize, ParametersList).
%% foreign c++ predicate definition
foreign(parameters, c, parametersI(-pointer(float_array), -integer)).
Parameters
Name | Type | Description | Default |
---|---|---|---|
parameters | -vector | Get the parameters (the b vector). | - |
linear_regression_modifyParameters/1
Modify the parameters (the b vector).
%% predicate definition
linear_regression_modifyParameters(ParameterList) :-
convert_list_to_float_array(ParameterList, array(Ysize, Y)),
modifyParametersI(Y, Ysize).
%% foreign c++ predicate definition
foreign(modifyParameters, c, modifyParametersI(+pointer(float_array), +integer)).
Parameters
Name | Type | Description | Default |
---|---|---|---|
newParameters | +vector | Modify the parameters (the b vector). | - |
linear_regression_predict/3
Calculate y_i for each data point in points.
%% predicate definition
linear_regression_predict(PointsList, PointsRows, PredicList) :-
convert_list_to_float_array(PointsList, PointsRows, array(Xsize, Xrownum, X)),
predictI(X, Xsize, Xrownum, Y, Ysize),
convert_float_array_to_list(Y, Ysize, PredicList).
%% foreign c++ predicate definition
foreign(predict, c, predictI( +pointer(float_array), +integer, +integer,
-pointer(float_array), -integer)).
Parameters
Name | Type | Description | Default |
---|---|---|---|
points | +matrix | the data points to calculate with. | - |
predictions | -vector | y, will contain calculated values on completion. | - |
linear_regression_train/5
Train the linear_regression model on the given data.
Careful! This will completely ignore and overwrite the existing model. This particular implementation does not have an incremental training algorithm.
%% predicate definition
linear_regression_train(DataList, DataRows, ResponsesList, Intercept, Error) :-
convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)),
convert_list_to_float_array(ResponsesList, array(Ysize, Y)),
trainI(X, Xsize, Xrownum, Y, Ysize, Intercept, Error).
%% foreign c++ predicate definition
foreign(train, c, trainI( +pointer(float_array), +integer, +integer,
+pointer(float_array), +integer,
+integer,
[-float32])).
Parameters
Name | Type | Description | Default |
---|---|---|---|
data | +matrix | X, matrix of data points. | - |
responses | +vector | y, the measured data for each point in X. | - |
intercept | +integer(bool) | Whether or not to include an intercept term. | (1)true |
error | -float | The least quares error after training. | - |
linear_regression_trainWithWeights/6
Train the linear_regression model on the given data and weights.
Careful! This will completely ignore and overwrite the existing model. This particular implementation does not have an incremental training algorithm.
%% predicate definition
linear_regression_trainWithWeights(DataList, DataRows, ResponsesList, WeightsList, Intercept, Error) :-
convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)),
convert_list_to_float_array(ResponsesList, array(Ysize, Y)),
convert_list_to_float_array(WeightsList, array(Zsize, Z)),
trainWithWeightsI(X, Xsize, Xrownum, Y, Ysize, Z, Zsize, Intercept, Error).
%% foreign c++ predicate definition
foreign(trainWithWeights, c, trainWithWeightsI( +pointer(float_array), +integer, +integer,
+pointer(float_array), +integer,
+pointer(float_array), +integer,
+integer,
[-float32])).
Parameters
Name | Type | Description | Default |
---|---|---|---|
data | +matrix | X, matrix of data points. | - |
responses | +vector | y, the measured data for each point in X. | - |
weights | +vector | Observation weights (for boosting). | - |
intercept | +integer(bool) | Whether or not to include an intercept term. | (1)true |
error | -float | The least quares error after training. | - |
Connected Links/Resources
If you want a more detailed explanation, then go to the python documentation. There is most of the time a good explanation on how the methods work and what the parameters do.
added some of the links from the python documentation