From 6eaf338ea3e2d5246fb337243185be2e42378d70 Mon Sep 17 00:00:00 2001 From: Ryan Curtin Date: Sun, 7 Apr 2019 22:02:29 -0400 Subject: [PATCH] Fix style and bibliography. --- HISTORY.md | 5 +-- src/mlpack/methods/linear_svm/linear_svm.hpp | 7 ++-- .../linear_svm/linear_svm_function_impl.hpp | 33 +++++++------------ .../methods/linear_svm/linear_svm_impl.hpp | 27 +++++++-------- 4 files changed, 30 insertions(+), 42 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index 42e8ae9ab6..b809675ef5 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -6,8 +6,9 @@ * Where relevant, all models with a `Train()` method now return a `double` value representing the goodness of fit (i.e. final objective value, error, etc.) (#1678). - - * Add implementation for linear support vector machine(see src/mlpack/methods/linear_svm). + + * Add implementation for linear support vector machine (see + `src/mlpack/methods/linear_svm`). ### mlpack 3.0.5 ###### ????-??-?? diff --git a/src/mlpack/methods/linear_svm/linear_svm.hpp b/src/mlpack/methods/linear_svm/linear_svm.hpp index da164a0b62..2b46a75918 100644 --- a/src/mlpack/methods/linear_svm/linear_svm.hpp +++ b/src/mlpack/methods/linear_svm/linear_svm.hpp @@ -35,8 +35,9 @@ namespace svm { * @inproceedings{weston1999support, * title = {Support vector machines for multi-class pattern * recognition.}, - * author = {Weston, Jason and Watkins, Chris and others}, - * booktitle = {Esann}, + * author = {Weston, Jason and Watkins, Chris}, + * booktitle = {Proceedings of the 7th European Symposium on Artifical Neural + * Networks (ESANN '99)}, * volume = {99}, * pages = {219--224}, * year = {1999} @@ -47,7 +48,7 @@ namespace svm { * @article{cortes1995support, * title = {Support-vector networks}, * author = {Cortes, Corinna and Vapnik, Vladimir}, - * journal = {Machine learning}, + * journal = {Machine Learning}, * volume = {20}, * number = {3}, * pages = {273--297}, diff --git a/src/mlpack/methods/linear_svm/linear_svm_function_impl.hpp b/src/mlpack/methods/linear_svm/linear_svm_function_impl.hpp index 3e8c3217bc..560faec62a 100644 --- a/src/mlpack/methods/linear_svm/linear_svm_function_impl.hpp +++ b/src/mlpack/methods/linear_svm/linear_svm_function_impl.hpp @@ -187,8 +187,7 @@ double LinearSVMFunction::Evaluate( loss = arma::accu(arma::clamp(margin, 0.0, DBL_MAX)) / dataset.n_cols; // Adding the regularization term. - regularization = 0.5 * lambda * arma::dot(parameters, - parameters); + regularization = 0.5 * lambda * arma::dot(parameters, parameters); return loss + regularization; } @@ -229,8 +228,7 @@ double LinearSVMFunction::Evaluate( loss /= batchSize; // Adding the regularization term. - regularization = 0.5 * lambda * arma::dot(parameters, - parameters); + regularization = 0.5 * lambda * arma::dot(parameters, parameters); cost = loss + regularization; return cost; @@ -340,18 +338,15 @@ void LinearSVMFunction::Gradient( // Check intercept condition if (!fitIntercept) { - gradient = dataset.cols(firstId, lastId) - * difference.t(); + gradient = dataset.cols(firstId, lastId) * difference.t(); } else { gradient.set_size(size(parameters)); gradient.submat(0, 0, parameters.n_rows - 2, parameters.n_cols - 1) = - dataset.cols(firstId, lastId) - * difference.t(); + dataset.cols(firstId, lastId) * difference.t(); gradient.row(parameters.n_rows - 1) = - arma::ones(batchSize) - * difference.t(); + arma::ones(batchSize) * difference.t(); } gradient /= batchSize; @@ -418,8 +413,7 @@ double LinearSVMFunction::EvaluateWithGradient( loss /= dataset.n_cols; // Adding the regularization term. - regularization = 0.5 * lambda * arma::dot(parameters, - parameters); + regularization = 0.5 * lambda * arma::dot(parameters, parameters); cost = loss + regularization; return cost; @@ -468,18 +462,15 @@ double LinearSVMFunction::EvaluateWithGradient( // Check intercept condition if (!fitIntercept) { - gradient = dataset.cols(firstId, lastId) - * difference.t(); + gradient = dataset.cols(firstId, lastId) * difference.t(); } else { gradient.set_size(size(parameters)); gradient.submat(0, 0, parameters.n_rows - 2, parameters.n_cols - 1) = - dataset.cols(firstId, lastId) - * difference.t(); + dataset.cols(firstId, lastId) * difference.t(); gradient.row(parameters.n_rows - 1) = - arma::ones(batchSize) - * difference.t(); + arma::ones(batchSize) * difference.t(); } gradient /= batchSize; @@ -489,13 +480,11 @@ double LinearSVMFunction::EvaluateWithGradient( gradient += lambda * parameters; // The Hinge Loss Function - loss = arma::accu(arma::clamp(margin.cols(firstId, lastId), - 0.0, DBL_MAX)); + loss = arma::accu(arma::clamp(margin.cols(firstId, lastId), 0.0, DBL_MAX)); loss /= batchSize; // Adding the regularization term. - regularization = 0.5 * lambda * arma::dot(parameters, - parameters); + regularization = 0.5 * lambda * arma::dot(parameters, parameters); cost = loss + regularization; return cost; diff --git a/src/mlpack/methods/linear_svm/linear_svm_impl.hpp b/src/mlpack/methods/linear_svm/linear_svm_impl.hpp index ff2876c441..0a4276d821 100644 --- a/src/mlpack/methods/linear_svm/linear_svm_impl.hpp +++ b/src/mlpack/methods/linear_svm/linear_svm_impl.hpp @@ -48,8 +48,8 @@ LinearSVM::LinearSVM( delta(delta), fitIntercept(fitIntercept) { - LinearSVMFunction::InitializeWeights( - parameters, inputSize, numClasses, fitIntercept); + LinearSVMFunction::InitializeWeights( parameters, inputSize, + numClasses, fitIntercept); } template @@ -60,8 +60,8 @@ double LinearSVM::Train( const size_t numClasses, OptimizerType optimizer) { - LinearSVMFunction svm(data, labels, - numClasses, lambda, delta, fitIntercept); + LinearSVMFunction svm(data, labels, numClasses, lambda, delta, + fitIntercept); if (parameters.is_empty()) parameters = svm.InitialPoint(); @@ -79,8 +79,7 @@ double LinearSVM::Train( template void LinearSVM::Classify( const MatType& data, - arma::Row& labels) -const + arma::Row& labels) const { arma::mat scores; Classify(data, labels, scores); @@ -90,13 +89,13 @@ template void LinearSVM::Classify( const MatType& data, arma::Row& labels, - arma::mat& scores) -const + arma::mat& scores) const { Classify(data, scores); - #if ARMA_VERSION_MAJOR > 7 || ARMA_VERSION_MAJOR == 7 \ - && ARMA_VERSION_MINOR >= 300 + #if ARMA_VERSION_MAJOR > 7 || \ + (ARMA_VERSION_MAJOR == 7 && \ + ARMA_VERSION_MINOR >= 300) // Prepare necessary data labels.zeros(data.n_cols); @@ -134,8 +133,7 @@ const template void LinearSVM::Classify( const MatType& data, - arma::mat& scores) -const + arma::mat& scores) const { if (data.n_rows != FeatureSize()) { @@ -169,8 +167,7 @@ size_t LinearSVM::Classify(const VecType& point) const template double LinearSVM::ComputeAccuracy( const MatType& testData, - const arma::Row& testLabels) -const + const arma::Row& testLabels) const { arma::Row labels; @@ -184,7 +181,7 @@ const count++; // Return the accuracy. - return (double)count / labels.n_elem; + return (double) count / labels.n_elem; } } // namespace svm