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:

// 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:

setInitialStepSize

virtual
float
getMarginRegularization() const = 0

Parameter marginRegularization of a SVMSGD optimization problem.

See also:

setMarginRegularization

virtual
int
getMarginType() const = 0

Margin type, one of SVMSGD::MarginType.

See also:

setMarginType

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:

setStepDecreasingPower

virtual
int
getSvmsgdType() const = 0

Algorithm type, one of SVMSGD::SvmsgdType.

See also:

setSvmsgdType

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:

setTermCriteria

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:

getInitialStepSize

virtual
void
setMarginRegularization(float marginRegularization) = 0

Parameter marginRegularization of a SVMSGD optimization problem.

See also:

getMarginRegularization

virtual
void
setMarginType(int marginType) = 0

Margin type, one of SVMSGD::MarginType.

See also:

getMarginType

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:

getStepDecreasingPower

virtual
void
setSvmsgdType(int svmsgdType) = 0

Algorithm type, one of SVMSGD::SvmsgdType.

See also:

getSvmsgdType

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:

getTermCriteria

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