L2-regularized Logistic Regression and Prediction
An implementation of L2-regularized logistic regression for two-class classification.
:- use_module('path/to/.../src/methods/logistic_regression/logistic_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],
logistic_regression_initModelWithOptimizer(TrainData, 3, [0,1,0,1], lbfgs, 0.0, 1000, 1.0e-10, 0.01, 64),
logistic_regression_classifyMatrix(TestData, 3, PredictLabels, ProbsList, _, 0.5).
Available Predicates
- logistic_regression_initModelNoOptimizer/4
- logistic_regression_initModelWithOptimizer/9
- logistic_regression_classifyPoint/3
- logistic_regression_classifyMatrix/6
- logistic_regression_computeAccuracy/5
- logistic_regression_computeError/4
logistic_regression_initModelNoOptimizer/4
Initialize the logistic_regression model without specifing a optimizer.
%% predicate definition
logistic_regression_initModelNoOptimizer(DataList, DataRows, ResponsesList, Lambda) :-
Lambda >= 0.0,
convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)),
convert_list_to_float_array(ResponsesList, array(Ysize, Y)),
initModelNoOptimizerI(X, Xsize, Xrownum, Y, Ysize, Lambda).
%% foreign c++ predicate definition
foreign(initModelNoOptimizer, c, initModelNoOptimizerI( +pointer(float_array), +integer, +integer,
+pointer(float_array), +integer,
+float32)).
Parameters
Name | Type | Description | Default |
---|---|---|---|
data | +matrix | Input training variables. | - |
responses | +vector | Outputs results from input training variables. | - |
lambda | +float | L2-regularization parameter. | 0.0 |
logistic_regression_initModelWithOptimizer/9
Initialize the logistic_regression model and specify the optimizer.
%% predicate definition
logistic_regression_initModelWithOptimizer(DataList, DataRows, ResponsesList, Optimizer, Lambda, MaxIterations, Tolerance, StepSize, BatchSize) :-
Lambda >= 0.0,
MaxIterations >= 0,
Tolerance >= 0.0,
StepSize >= 0.0,
BatchSize > 0,
convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)),
convert_list_to_float_array(ResponsesList, array(Ysize, Y)),
initModelWithOptimizerI(X, Xsize, Xrownum, Y, Ysize, Optimizer, Lambda, MaxIterations, Tolerance, StepSize, BatchSize).
%% foreign c++ predicate definition
foreign(initModelWithOptimizer, c, initModelWithOptimizerI( +pointer(float_array), +integer, +integer,
+pointer(float_array), +integer,
+string,
+float32, +integer, +float32, +float32, +integer)).
Parameters
Name | Type | Description | Default |
---|---|---|---|
data | +matrix | Input training variables. | - |
responses | +vector | Outputs results from input training variables. | - |
optimizer | +string | The optimizer to use: "lbfgs", "psgd" | lbfgs |
lambda | +float | L2-regularization parameter. | 0.0 |
maxIterations | +integer | Maximum iterations for optimizer (0 indicates no limit). | 10000 |
tolerance | +float | Convergence tolerance for optimizer. | 1e-10 |
stepSize | +float | Step size for SGD optimizer. | 0.01 |
batchSize | +integer | Batch size for SGD. | 64 |
logistic_regression_classifyPoint/3
Classify the given point.
%% predicate definition
logistic_regression_classifyPoint(PointList, DecisionBoundary, PredicLabel) :-
DecisionBoundary >= 0.0,
DecisionBoundary =< 1.0,
convert_list_to_float_array(PointList, array(Xsize, X)),
classifyPointI(X, Xsize, DecisionBoundary, PredicLabel).
%% foreign c++ predicate definition
foreign(classifyPoint, c, classifyPointI( +pointer(float_array), +integer,
+float32,
[-integer])).
Parameters
Name | Type | Description | Default |
---|---|---|---|
point | +vector | Point to classify. | - |
decisionBoundary | +float | Decision boundary (default 0.5). | 0.5 |
predicLabel | -integer | Predicted label of point. | - |
logistic_regression_classifyMatrix/6
Classify the given points, returning the predicted labels for each point.
%% predicate definition
logistic_regression_classifyMatrix(DataList, DataRows, PredictionList, ProbsList, ZCols, DecisionBoundary) :-
DecisionBoundary >= 0.0,
DecisionBoundary =< 1.0,
convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrows, X)),
classifyMatrixI(X, Xsize, Xrows, Y, Ysize, Z, ZCols, ZRows, DecisionBoundary),
convert_float_array_to_list(Y, Ysize, PredictionList),
convert_float_array_to_2d_list(Z, ZCols, ZRows, ProbsList).
%% foreign c++ predicate definition
foreign(classifyMatrix, c, classifyMatrixI( +pointer(float_array), +integer, +integer,
-pointer(float_array), -integer,
-pointer(float_array), -integer, -integer,
+float32)).
Parameters
Name | Type | Description | Default |
---|---|---|---|
data | +matrix | Set of points to classify. | - |
predicLabels | -vector | Predicted labels for each point. | - |
probabilities | -matrix | Class probabilities for each point. | - |
decisionBoundary | +float | Decision boundary (default 0.5). | 0.5 |
logistic_regression_computeAccuracy/5
Compute the accuracy of the model on the given predictors and responses, using the given decision boundary.
%% predicate definition
logistic_regression_computeAccuracy(DataList, DataRows, ResponsesList, DecisionBoundary, Accuracy) :-
DecisionBoundary >= 0.0,
DecisionBoundary =< 1.0,
convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)),
convert_list_to_float_array(ResponsesList, array(Ysize, Y)),
computeAccuracyI(X, Xsize, Xrownum, Y, Ysize, DecisionBoundary, Accuracy).
%% foreign c++ predicate definition
foreign(computeAccuracy, c, computeAccuracyI( +pointer(float_array), +integer, +integer,
+pointer(float_array), +integer,
+float32,
[-float32])).
Parameters
Name | Type | Description | Default |
---|---|---|---|
data | +matrix | Input predictors. | - |
responses | +vector | Vector of responses. | - |
decisionBoundary | +float | Decision boundary (default 0.5). | 0.5 |
accuracy | -float | Percentage of responses that are predicted correctly. | - |
logistic_regression_computeError/4
Compute the error of the model.
%% predicate definition
logistic_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 |
---|---|---|---|
data | +matrix | Input predictors. | - |
responses | +vector | Vector of responses. | - |
error | -float | returns the negative objective function of the logistic regression log-likelihood function. | - |
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