OpenCV  4.1.1-pre
Open Source Computer Vision
Looking for a C++ dev who knows OpenCV?
I'm looking for work. Hire me!
cv::ml::SVMSGD Class Referenceabstract

Stochastic Gradient Descent SVM classifier. More...

#include <opencv2/ml.hpp>

Inheritance diagram for cv::ml::SVMSGD:
Collaboration diagram for cv::ml::SVMSGD:

Public Types

enum  Flags {
  UPDATE_MODEL = 1,
  RAW_OUTPUT =1,
  COMPRESSED_INPUT =2,
  PREPROCESSED_INPUT =4
}
 Predict options. More...
 
enum  MarginType {
  SOFT_MARGIN,
  HARD_MARGIN
}
 Margin type. More...
 
enum  SvmsgdType {
  SGD,
  ASGD
}
 SVMSGD type. More...
 

Public Member Functions

virtual float calcError (const Ptr< TrainData > &data, bool test, OutputArray resp) const
 Computes error on the training or test dataset. More...
 
virtual void clear ()
 Clears the algorithm state. More...
 
virtual bool empty () const CV_OVERRIDE
 Returns true if the Algorithm is empty (e.g. More...
 
virtual String getDefaultName () const
 Returns the algorithm string identifier. More...
 
virtual float getInitialStepSize () const =0
 Parameter initialStepSize of a SVMSGD optimization problem. More...
 
virtual float getMarginRegularization () const =0
 Parameter marginRegularization of a SVMSGD optimization problem. More...
 
virtual int getMarginType () const =0
 Margin type, one of SVMSGD::MarginType. More...
 
virtual float getShift ()=0
 
virtual float getStepDecreasingPower () const =0
 Parameter stepDecreasingPower of a SVMSGD optimization problem. More...
 
virtual int getSvmsgdType () const =0
 Algorithm type, one of SVMSGD::SvmsgdType. More...
 
virtual TermCriteria getTermCriteria () const =0
 Termination criteria of the training algorithm. More...
 
virtual int getVarCount () const =0
 Returns the number of variables in training samples. More...
 
virtual Mat getWeights ()=0
 
virtual bool isClassifier () const =0
 Returns true if the model is classifier. More...
 
virtual bool isTrained () const =0
 Returns true if the model is trained. More...
 
virtual float predict (InputArray samples, OutputArray results=noArray(), int flags=0) const =0
 Predicts response(s) for the provided sample(s) More...
 
virtual void read (const FileNode &fn)
 Reads algorithm parameters from a file storage. More...
 
virtual void save (const String &filename) const
 Saves the algorithm to a file. More...
 
virtual void setInitialStepSize (float InitialStepSize)=0
 Parameter initialStepSize of a SVMSGD optimization problem. More...
 
virtual void setMarginRegularization (float marginRegularization)=0
 Parameter marginRegularization of a SVMSGD optimization problem. More...
 
virtual void setMarginType (int marginType)=0
 Margin type, one of SVMSGD::MarginType. More...
 
virtual void setOptimalParameters (int svmsgdType=SVMSGD::ASGD, int marginType=SVMSGD::SOFT_MARGIN)=0
 Function sets optimal parameters values for chosen SVM SGD model. More...
 
virtual void setStepDecreasingPower (float stepDecreasingPower)=0
 Parameter stepDecreasingPower of a SVMSGD optimization problem. More...
 
virtual void setSvmsgdType (int svmsgdType)=0
 Algorithm type, one of SVMSGD::SvmsgdType. More...
 
virtual void setTermCriteria (const cv::TermCriteria &val)=0
 Termination criteria of the training algorithm. More...
 
virtual bool train (const Ptr< TrainData > &trainData, int flags=0)
 Trains the statistical model. More...
 
virtual bool train (InputArray samples, int layout, InputArray responses)
 Trains the statistical model. More...
 
virtual void write (FileStorage &fs) const
 Stores algorithm parameters in a file storage. More...
 
void write (const Ptr< FileStorage > &fs, const String &name=String()) const
 simplified API for language bindings This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. More...
 

Static Public Member Functions

static Ptr< SVMSGDcreate ()
 Creates empty model. More...
 
static Ptr< SVMSGDload (const String &filepath, const String &nodeName=String())
 Loads and creates a serialized SVMSGD from a file. More...
 
template<typename _Tp >
static Ptr< _Tp > loadFromString (const String &strModel, const String &objname=String())
 Loads algorithm from a String. More...
 
template<typename _Tp >
static Ptr< _Tp > read (const FileNode &fn)
 Reads algorithm from the file node. More...
 
template<typename _Tp >
static Ptr< _Tp > train (const Ptr< TrainData > &data, int flags=0)
 Create and train model with default parameters. More...
 

Protected Member Functions

void writeFormat (FileStorage &fs) const
 

Detailed Description

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 [9].

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 [9]).

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:

// Create empty object
// Train the Stochastic Gradient Descent SVM
svmsgd->train(trainData);
// Predict labels for the new samples
svmsgd->predict(samples, responses);

Member Enumeration Documentation

◆ Flags

enum cv::ml::StatModel::Flags
inherited

Predict options.

Enumerator
UPDATE_MODEL 
RAW_OUTPUT 

makes the method return the raw results (the sum), not the class label

COMPRESSED_INPUT 
PREPROCESSED_INPUT 

◆ MarginType

Margin type.

Enumerator
SOFT_MARGIN 

General case, suits to the case of non-linearly separable sets, allows outliers.

HARD_MARGIN 

More accurate for the case of linearly separable sets.

◆ SvmsgdType

SVMSGD type.

ASGD is often the preferable choice.

Enumerator
SGD 

Stochastic Gradient Descent.

ASGD 

Average Stochastic Gradient Descent.

Member Function Documentation

◆ calcError()

virtual float cv::ml::StatModel::calcError ( const Ptr< TrainData > &  data,
bool  test,
OutputArray  resp 
) const
virtualinherited

Computes error on the training or test dataset.

Parameters
datathe training data
testif true, the error is computed over the test subset of the data, otherwise it's computed over the training subset of the data. Please note that if you loaded a completely different dataset to evaluate already trained classifier, you will probably want not to set the test subset at all with TrainData::setTrainTestSplitRatio and specify test=false, so that the error is computed for the whole new set. Yes, this sounds a bit confusing.
respthe optional output responses.

The method uses StatModel::predict to compute the error. For regression models the error is computed as RMS, for classifiers - as a percent of missclassified samples (0%-100%).

◆ clear()

virtual void cv::Algorithm::clear ( )
inlinevirtualinherited

Clears the algorithm state.

Reimplemented in cv::FlannBasedMatcher, and cv::DescriptorMatcher.

◆ create()

static Ptr<SVMSGD> cv::ml::SVMSGD::create ( )
static

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.

◆ empty()

virtual bool cv::ml::StatModel::empty ( ) const
virtualinherited

Returns true if the Algorithm is empty (e.g.

in the very beginning or after unsuccessful read

Reimplemented from cv::Algorithm.

◆ getDefaultName()

virtual String cv::Algorithm::getDefaultName ( ) const
virtualinherited

Returns the algorithm string identifier.

This string is used as top level xml/yml node tag when the object is saved to a file or string.

Reimplemented in cv::AKAZE, cv::KAZE, cv::SimpleBlobDetector, cv::GFTTDetector, cv::AgastFeatureDetector, cv::FastFeatureDetector, cv::MSER, cv::ORB, cv::BRISK, and cv::Feature2D.

◆ getInitialStepSize()

virtual float cv::ml::SVMSGD::getInitialStepSize ( ) const
pure virtual

Parameter initialStepSize of a SVMSGD optimization problem.

See also
setInitialStepSize

◆ getMarginRegularization()

virtual float cv::ml::SVMSGD::getMarginRegularization ( ) const
pure virtual

Parameter marginRegularization of a SVMSGD optimization problem.

See also
setMarginRegularization

◆ getMarginType()

virtual int cv::ml::SVMSGD::getMarginType ( ) const
pure virtual

Margin type, one of SVMSGD::MarginType.

See also
setMarginType

◆ getShift()

virtual float cv::ml::SVMSGD::getShift ( )
pure virtual
Returns
the shift of the trained model (decision function f(x) = weights * x + shift).

◆ getStepDecreasingPower()

virtual float cv::ml::SVMSGD::getStepDecreasingPower ( ) const
pure virtual

Parameter stepDecreasingPower of a SVMSGD optimization problem.

See also
setStepDecreasingPower

◆ getSvmsgdType()

virtual int cv::ml::SVMSGD::getSvmsgdType ( ) const
pure virtual

Algorithm type, one of SVMSGD::SvmsgdType.

See also
setSvmsgdType

◆ getTermCriteria()

virtual TermCriteria cv::ml::SVMSGD::getTermCriteria ( ) const
pure virtual

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
setTermCriteria

◆ getVarCount()

virtual int cv::ml::StatModel::getVarCount ( ) const
pure virtualinherited

Returns the number of variables in training samples.

◆ getWeights()

virtual Mat cv::ml::SVMSGD::getWeights ( )
pure virtual
Returns
the weights of the trained model (decision function f(x) = weights * x + shift).

◆ isClassifier()

virtual bool cv::ml::StatModel::isClassifier ( ) const
pure virtualinherited

Returns true if the model is classifier.

◆ isTrained()

virtual bool cv::ml::StatModel::isTrained ( ) const
pure virtualinherited

Returns true if the model is trained.

◆ load()

static Ptr<SVMSGD> cv::ml::SVMSGD::load ( const String filepath,
const String nodeName = String() 
)
static

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
filepathpath to serialized SVMSGD
nodeNamename of node containing the classifier

◆ loadFromString()

template<typename _Tp >
static Ptr<_Tp> cv::Algorithm::loadFromString ( const String strModel,
const String objname = String() 
)
inlinestaticinherited

Loads algorithm from a String.

Parameters
strModelThe string variable containing the model you want to load.
objnameThe optional name of the node to read (if empty, the first top-level node will be used)

This is static template method of Algorithm. It's usage is following (in the case of SVM):

Ptr<SVM> svm = Algorithm::loadFromString<SVM>(myStringModel);

References CV_WRAP, cv::FileNode::empty(), cv::FileStorage::getFirstTopLevelNode(), cv::FileStorage::MEMORY, and cv::FileStorage::READ.

Here is the call graph for this function:

◆ predict()

virtual float cv::ml::StatModel::predict ( InputArray  samples,
OutputArray  results = noArray(),
int  flags = 0 
) const
pure virtualinherited

Predicts response(s) for the provided sample(s)

Parameters
samplesThe input samples, floating-point matrix
resultsThe optional output matrix of results.
flagsThe optional flags, model-dependent. See cv::ml::StatModel::Flags.

Implemented in cv::ml::LogisticRegression, and cv::ml::EM.

◆ read() [1/2]

virtual void cv::Algorithm::read ( const FileNode fn)
inlinevirtualinherited

Reads algorithm parameters from a file storage.

Reimplemented in cv::FlannBasedMatcher, cv::DescriptorMatcher, and cv::Feature2D.

◆ read() [2/2]

template<typename _Tp >
static Ptr<_Tp> cv::Algorithm::read ( const FileNode fn)
inlinestaticinherited

Reads algorithm from the file node.

This is static template method of Algorithm. It's usage is following (in the case of SVM):

cv::FileStorage fsRead("example.xml", FileStorage::READ);
Ptr<SVM> svm = Algorithm::read<SVM>(fsRead.root());

In order to make this method work, the derived class must overwrite Algorithm::read(const FileNode& fn) and also have static create() method without parameters (or with all the optional parameters)

◆ save()

virtual void cv::Algorithm::save ( const String filename) const
virtualinherited

Saves the algorithm to a file.

In order to make this method work, the derived class must implement Algorithm::write(FileStorage& fs).

◆ setInitialStepSize()

virtual void cv::ml::SVMSGD::setInitialStepSize ( float  InitialStepSize)
pure virtual

Parameter initialStepSize of a SVMSGD optimization problem.

See also
getInitialStepSize

◆ setMarginRegularization()

virtual void cv::ml::SVMSGD::setMarginRegularization ( float  marginRegularization)
pure virtual

Parameter marginRegularization of a SVMSGD optimization problem.

See also
getMarginRegularization

◆ setMarginType()

virtual void cv::ml::SVMSGD::setMarginType ( int  marginType)
pure virtual

Margin type, one of SVMSGD::MarginType.

See also
getMarginType

◆ setOptimalParameters()

virtual void cv::ml::SVMSGD::setOptimalParameters ( int  svmsgdType = SVMSGD::ASGD,
int  marginType = SVMSGD::SOFT_MARGIN 
)
pure virtual

Function sets optimal parameters values for chosen SVM SGD model.

Parameters
svmsgdTypeis the type of SVMSGD classifier.
marginTypeis the type of margin constraint.

◆ setStepDecreasingPower()

virtual void cv::ml::SVMSGD::setStepDecreasingPower ( float  stepDecreasingPower)
pure virtual

Parameter stepDecreasingPower of a SVMSGD optimization problem.

See also
getStepDecreasingPower

◆ setSvmsgdType()

virtual void cv::ml::SVMSGD::setSvmsgdType ( int  svmsgdType)
pure virtual

Algorithm type, one of SVMSGD::SvmsgdType.

See also
getSvmsgdType

◆ setTermCriteria()

virtual void cv::ml::SVMSGD::setTermCriteria ( const cv::TermCriteria val)
pure virtual

Termination criteria of the training algorithm.

See also
getTermCriteria

◆ train() [1/3]

virtual bool cv::ml::StatModel::train ( const Ptr< TrainData > &  trainData,
int  flags = 0 
)
virtualinherited

Trains the statistical model.

Parameters
trainDatatraining data that can be loaded from file using TrainData::loadFromCSV or created with TrainData::create.
flagsoptional flags, depending on the model. Some of the models can be updated with the new training samples, not completely overwritten (such as NormalBayesClassifier or ANN_MLP).

◆ train() [2/3]

virtual bool cv::ml::StatModel::train ( InputArray  samples,
int  layout,
InputArray  responses 
)
virtualinherited

Trains the statistical model.

Parameters
samplestraining samples
layoutSee ml::SampleTypes.
responsesvector of responses associated with the training samples.

◆ train() [3/3]

template<typename _Tp >
static Ptr<_Tp> cv::ml::StatModel::train ( const Ptr< TrainData > &  data,
int  flags = 0 
)
inlinestaticinherited

Create and train model with default parameters.

The class must implement static create() method with no parameters or with all default parameter values

◆ write() [1/2]

virtual void cv::Algorithm::write ( FileStorage fs) const
inlinevirtualinherited

Stores algorithm parameters in a file storage.

Reimplemented in cv::FlannBasedMatcher, cv::DescriptorMatcher, and cv::Feature2D.

References CV_WRAP.

Referenced by cv::Feature2D::write(), and cv::DescriptorMatcher::write().

Here is the caller graph for this function:

◆ write() [2/2]

void cv::Algorithm::write ( const Ptr< FileStorage > &  fs,
const String name = String() 
) const
inherited

simplified API for language bindings This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

◆ writeFormat()

void cv::Algorithm::writeFormat ( FileStorage fs) const
protectedinherited

The documentation for this class was generated from the following file: