14 #ifndef MLPACK_METHODS_LOGISTIC_REGRESSION_LOGISTIC_REGRESSION_IMPL_HPP 15 #define MLPACK_METHODS_LOGISTIC_REGRESSION_LOGISTIC_REGRESSION_IMPL_HPP 21 namespace regression {
23 template<
typename MatType>
25 const MatType& predictors,
26 const arma::Row<size_t>& responses,
27 const double lambda) :
30 Train(predictors, responses);
33 template<
typename MatType>
35 const MatType& predictors,
36 const arma::Row<size_t>& responses,
37 const arma::rowvec& initialPoint,
38 const double lambda) :
39 parameters(initialPoint),
42 Train(predictors, responses);
45 template<
typename MatType>
47 const size_t dimensionality,
48 const double lambda) :
49 parameters(
arma::rowvec(dimensionality + 1,
arma::fill::zeros)),
55 template<
typename MatType>
56 template<
typename OptimizerType>
58 const MatType& predictors,
59 const arma::Row<size_t>& responses,
60 OptimizerType& optimizer,
61 const double lambda) :
64 Train(predictors, responses, optimizer);
67 template<
typename MatType>
68 template<
typename OptimizerType,
typename... CallbackTypes>
70 const MatType& predictors,
71 const arma::Row<size_t>& responses,
72 CallbackTypes&&... callbacks)
74 OptimizerType optimizer;
75 return Train(predictors, responses, optimizer, callbacks...);
78 template<
typename MatType>
79 template<
typename OptimizerType,
typename... CallbackTypes>
81 const MatType& predictors,
82 const arma::Row<size_t>& responses,
83 OptimizerType& optimizer,
84 CallbackTypes&&... callbacks)
90 if (parameters.n_elem != predictors.n_rows + 1)
91 parameters = arma::rowvec(predictors.n_rows + 1, arma::fill::zeros);
94 const double out = optimizer.Optimize(errorFunction, parameters,
98 Log::Info <<
"LogisticRegression::LogisticRegression(): final objective of " 99 <<
"trained model is " << out <<
"." << std::endl;
104 template<
typename MatType>
105 template<
typename VecType>
107 const double decisionBoundary)
110 return size_t(1.0 / (1.0 + std::exp(-parameters(0) - arma::dot(point,
111 parameters.tail_cols(parameters.n_elem - 1)))) +
112 (1.0 - decisionBoundary));
115 template<
typename MatType>
117 arma::Row<size_t>& labels,
118 const double decisionBoundary)
const 122 labels = arma::conv_to<arma::Row<size_t>>::from((1.0 /
123 (1.0 + arma::exp(-parameters(0) -
124 parameters.tail_cols(parameters.n_elem - 1) * dataset))) +
125 (1.0 - decisionBoundary));
128 template<
typename MatType>
130 arma::mat& probabilities)
const 133 probabilities.set_size(2, dataset.n_cols);
135 probabilities.row(1) = 1.0 / (1.0 + arma::exp(-parameters(0) -
136 parameters.tail_cols(parameters.n_elem - 1) * dataset));
137 probabilities.row(0) = 1.0 - probabilities.row(1);
140 template<
typename MatType>
142 const MatType& predictors,
143 const arma::Row<size_t>& responses)
const 149 return newErrorFunction.
Evaluate(parameters);
152 template<
typename MatType>
154 const MatType& predictors,
155 const arma::Row<size_t>& responses,
156 const double decisionBoundary)
const 159 arma::Row<size_t> tempResponses;
160 Classify(predictors, tempResponses, decisionBoundary);
164 for (
size_t i = 0; i < responses.n_elem; ++i)
166 if (responses(i) == tempResponses(i))
170 return (
double) (count * 100) / responses.n_elem;
173 template<
typename MatType>
174 template<
typename Archive>
178 ar(CEREAL_NVP(parameters));
179 ar(CEREAL_NVP(lambda));
185 #endif // MLPACK_METHODS_LOGISTIC_REGRESSION_LOGISTIC_REGRESSION_IMPL_HPP The log-likelihood function for the logistic regression objective function.
Definition: logistic_regression_function.hpp:30
double ComputeError(const MatType &predictors, const arma::Row< size_t > &responses) const
Compute the error of the model.
Definition: logistic_regression_impl.hpp:141
static void Start(const std::string &name)
Start the given timer.
Definition: timers.cpp:28
Linear algebra utility functions, generally performed on matrices or vectors.
Definition: cv.hpp:1
double Evaluate(const arma::mat ¶meters) const
Evaluate the logistic regression log-likelihood function with the given parameters.
Definition: logistic_regression_function_impl.hpp:69
size_t Classify(const VecType &point, const double decisionBoundary=0.5) const
Classify the given point.
Definition: logistic_regression_impl.hpp:106
double Train(const MatType &predictors, const arma::Row< size_t > &responses, CallbackTypes &&... callbacks)
Train the LogisticRegression model on the given input data.
Definition: logistic_regression_impl.hpp:69
void serialize(Archive &ar, const uint32_t)
Serialize the model.
Definition: logistic_regression_impl.hpp:175
LogisticRegression(const MatType &predictors, const arma::Row< size_t > &responses, const double lambda=0)
Construct the LogisticRegression class with the given labeled training data.
Definition: logistic_regression_impl.hpp:24
static void Stop(const std::string &name)
Stop the given timer.
Definition: timers.cpp:36
static MLPACK_EXPORT util::PrefixedOutStream Info
Prints informational messages if –verbose is specified, prefixed with [INFO ].
Definition: log.hpp:84
double ComputeAccuracy(const MatType &predictors, const arma::Row< size_t > &responses, const double decisionBoundary=0.5) const
Compute the accuracy of the model on the given predictors and responses, optionally using the given d...
Definition: logistic_regression_impl.hpp:153