class cv::ml::SVMSGD
Overview
Stochastic Gradient Descent SVM classifier. Moreā¦
#include <ml.hpp> class SVMSGD: public cv::ml::StatModel { public: // enums enum MarginType; enum SvmsgdType; // methods virtual float getInitialStepSize() const = 0; virtual float getMarginRegularization() const = 0; virtual int getMarginType() const = 0; virtual float getShift() = 0; virtual float getStepDecreasingPower() const = 0; virtual int getSvmsgdType() const = 0; virtual TermCriteria getTermCriteria() const = 0; virtual Mat getWeights() = 0; virtual void setInitialStepSize(float InitialStepSize) = 0; virtual void setMarginRegularization(float marginRegularization) = 0; virtual void setMarginType(int marginType) = 0; virtual void setOptimalParameters( int svmsgdType = SVMSGD::ASGD, int marginType = SVMSGD::SOFT_MARGIN ) = 0; virtual void setStepDecreasingPower(float stepDecreasingPower) = 0; virtual void setSvmsgdType(int svmsgdType) = 0; virtual void setTermCriteria(const cv::TermCriteria& val) = 0; static Ptr<SVMSGD> create(); static Ptr<SVMSGD> load( const String& filepath, const String& nodeName = String() ); };
Inherited Members
public: // enums enum Flags; // methods virtual void clear(); virtual bool empty() const; virtual String getDefaultName() const; virtual void read(const FileNode& fn); virtual void save(const String& filename) const; virtual void write(FileStorage& fs) const; template <typename _Tp> static Ptr<_Tp> load( const String& filename, const String& objname = String() ); template <typename _Tp> static Ptr<_Tp> loadFromString( const String& strModel, const String& objname = String() ); template <typename _Tp> static Ptr<_Tp> read(const FileNode& fn); virtual float calcError( const Ptr<TrainData>& data, bool test, OutputArray resp ) const; virtual bool empty() const; virtual int getVarCount() const = 0; virtual bool isClassifier() const = 0; virtual bool isTrained() const = 0; virtual float predict( InputArray samples, OutputArray results = noArray(), int flags = 0 ) const = 0; virtual bool train( const Ptr<TrainData>& trainData, int flags = 0 ); virtual bool train( InputArray samples, int layout, InputArray responses ); template <typename _Tp> static Ptr<_Tp> train( const Ptr<TrainData>& data, int flags = 0 ); protected: // methods void writeFormat(FileStorage& fs) const;
Detailed Documentation
Stochastic Gradient Descent SVM classifier.
SVMSGD provides a fast and easy-to-use implementation of the SVM classifier using the Stochastic Gradient Descent approach, as presented in [6].
The classifier has following parameters:
- model type,
- margin type,
- margin regularization (\(\lambda\)),
- initial step size (\(\gamma_0\)),
- step decreasing power (\(c\)),
- and termination criteria.
The model type may have one of the following values: SGD and ASGD.
SGD is the classic version of SVMSGD classifier: every next step is calculated by the formula
\[w_{t+1} = w_t - \gamma(t) \frac{dQ_i}{dw} |_{w = w_t}\]where
- \(w_t\) is the weights vector for decision function at step \(t\),
- \(\gamma(t)\) is the step size of model parameters at the iteration \(t\), it is decreased on each step by the formula \(\gamma(t) = \gamma_0 (1 + \lambda \gamma_0 t) ^ {-c}\)
- \(Q_i\) is the target functional from SVM task for sample with number \(i\), this sample is chosen stochastically on each step of the algorithm.
ASGD is Average Stochastic Gradient Descent SVM Classifier. ASGD classifier averages weights vector on each step of algorithm by the formula \(\widehat{w}_{t+1} = \frac{t}{1+t}\widehat{w}_{t} + \frac{1}{1+t}w_{t+1}\)
The recommended model type is ASGD (following [6]).
The margin type may have one of the following values: SOFT_MARGIN or HARD_MARGIN.
- You should use HARD_MARGIN type, if you have linearly separable sets.
- You should use SOFT_MARGIN type, if you have non-linearly separable sets or sets with outliers.
- In the general case (if you know nothing about linear separability of your sets), use SOFT_MARGIN.
The other parameters may be described as follows:
- Margin regularization parameter is responsible for weights decreasing at each step and for the strength of restrictions on outliers (the less the parameter, the less probability that an outlier will be ignored). Recommended value for SGD model is 0.0001, for ASGD model is 0.00001.
- Initial step size parameter is the initial value for the step size \(\gamma(t)\). You will have to find the best initial step for your problem.
- Step decreasing power is the power parameter for \(\gamma(t)\) decreasing by the formula, mentioned above. Recommended value for SGD model is 1, for ASGD model is 0.75.
- Termination criteria can be TermCriteria::COUNT, TermCriteria::EPS or TermCriteria::COUNT + TermCriteria::EPS. You will have to find the best termination criteria for your problem.
Note that the parameters margin regularization, initial step size, and step decreasing power should be positive.
To use SVMSGD algorithm do as follows:
- first, create the SVMSGD object. The algoorithm will set optimal parameters by default, but you can set your own parameters via functions setSvmsgdType(), setMarginType(), setMarginRegularization(), setInitialStepSize(), and setStepDecreasingPower().
- then the SVM model can be trained using the train features and the correspondent labels by the method train().
- after that, the label of a new feature vector can be predicted using the method predict().
// Create empty object cv::Ptr<SVMSGD> svmsgd = SVMSGD::create(); // Train the Stochastic Gradient Descent SVM svmsgd->train(trainData); // Predict labels for the new samples svmsgd->predict(samples, responses);
Methods
virtual float getInitialStepSize() const = 0
Parameter initialStepSize of a SVMSGD optimization problem.
See also:
virtual float getMarginRegularization() const = 0
Parameter marginRegularization of a SVMSGD optimization problem.
See also:
virtual int getMarginType() const = 0
Margin type, one of SVMSGD::MarginType.
See also:
virtual float getShift() = 0
Returns:
the shift of the trained model (decision function f(x) = weights * x + shift).
virtual float getStepDecreasingPower() const = 0
Parameter stepDecreasingPower of a SVMSGD optimization problem.
See also:
virtual int getSvmsgdType() const = 0
Algorithm type, one of SVMSGD::SvmsgdType.
See also:
virtual TermCriteria getTermCriteria() const = 0
Termination criteria of the training algorithm. You can specify the maximum number of iterations (maxCount) and/or how much the error could change between the iterations to make the algorithm continue (epsilon).
See also:
virtual Mat getWeights() = 0
Returns:
the weights of the trained model (decision function f(x) = weights * x + shift).
virtual void setInitialStepSize(float InitialStepSize) = 0
Parameter initialStepSize of a SVMSGD optimization problem.
See also:
virtual void setMarginRegularization(float marginRegularization) = 0
Parameter marginRegularization of a SVMSGD optimization problem.
See also:
virtual void setMarginType(int marginType) = 0
Margin type, one of SVMSGD::MarginType.
See also:
virtual void setOptimalParameters( int svmsgdType = SVMSGD::ASGD, int marginType = SVMSGD::SOFT_MARGIN ) = 0
Function sets optimal parameters values for chosen SVM SGD model.
Parameters:
svmsgdType | is the type of SVMSGD classifier. |
marginType | is the type of margin constraint. |
virtual void setStepDecreasingPower(float stepDecreasingPower) = 0
Parameter stepDecreasingPower of a SVMSGD optimization problem.
See also:
virtual void setSvmsgdType(int svmsgdType) = 0
Algorithm type, one of SVMSGD::SvmsgdType.
See also:
virtual void setTermCriteria(const cv::TermCriteria& val) = 0
Termination criteria of the training algorithm. You can specify the maximum number of iterations (maxCount) and/or how much the error could change between the iterations to make the algorithm continue (epsilon).
See also:
static Ptr<SVMSGD> create()
Creates empty model. Use StatModel::train to train the model. Since SVMSGD has several parameters, you may want to find the best parameters for your problem or use setOptimalParameters() to set some default parameters.
static Ptr<SVMSGD> load( const String& filepath, const String& nodeName = String() )
Loads and creates a serialized SVMSGD from a file.
Use SVMSGD::save to serialize and store an SVMSGD to disk. Load the SVMSGD from this file again, by calling this function with the path to the file. Optionally specify the node for the file containing the classifier
Parameters:
filepath | path to serialized SVMSGD |
nodeName | name of node containing the classifier |