support_vector_machines.rst 14.1 KB

Support Vector Machines

Originally, support vector machines (SVM) was a technique for building an optimal binary (2-class) classifier. Later the technique was extended to regression and clustering problems. SVM is a partial case of kernel-based methods. It maps feature vectors into a higher-dimensional space using a kernel function and builds an optimal linear discriminating function in this space or an optimal hyper-plane that fits into the training data. In case of SVM, the kernel is not defined explicitly. Instead, a distance between any 2 points in the hyper-space needs to be defined.

The solution is optimal, which means that the margin between the separating hyper-plane and the nearest feature vectors from both classes (in case of 2-class classifier) is maximal. The feature vectors that are the closest to the hyper-plane are called support vectors, which means that the position of other vectors does not affect the hyper-plane (the decision function).

SVM implementation in OpenCV is based on [LibSVM].

[Burges98]
  1. Burges. A tutorial on support vector machines for pattern recognition, Knowledge Discovery and Data Mining 2(2), 1998 (available online at http://citeseer.ist.psu.edu/burges98tutorial.html)
[LibSVM] C.-C. Chang and C.-J. Lin. LIBSVM: a library for support vector machines, ACM Transactions on Intelligent Systems and Technology, 2:27:1--27:27, 2011. (http://www.csie.ntu.edu.tw/~cjlin/papers/libsvm.pdf)

CvParamGrid

The grid determines the following iteration sequence of the statmodel parameter values:

(min\_val, min\_val*step, min\_val*{step}^2, \dots,  min\_val*{step}^n),

where n is the maximal index satisfying

\texttt{min\_val} * \texttt{step} ^n <  \texttt{max\_val}

The grid is logarithmic, so step must always be greater then 1.

CvParamGrid::CvParamGrid

The constructors.

The full constructor initializes corresponding members. The default constructor creates a dummy grid:

CvParamGrid::CvParamGrid()
{
    min_val = max_val = step = 0;
}

CvParamGrid::check

Checks validness of the grid.

Returns true if the grid is valid and false otherwise. The grid is valid if and only if:

  • Lower bound of the grid is less then the upper one.
  • Lower bound of the grid is positive.
  • Grid step is greater then 1.

CvSVMParams

SVM training parameters.

The structure must be initialized and passed to the training method of :ocv:class:`CvSVM`.

CvSVMParams::CvSVMParams

The constructors.

The default constructor initialize the structure with following values:

CvSVMParams::CvSVMParams() :
    svm_type(CvSVM::C_SVC), kernel_type(CvSVM::RBF), degree(0),
    gamma(1), coef0(0), C(1), nu(0), p(0), class_weights(0)
{
    term_crit = cvTermCriteria( CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, 1000, FLT_EPSILON );
}

CvSVM

Support Vector Machines.

CvSVM::CvSVM

Default and training constructors.

The constructors follow conventions of :ocv:func:`CvStatModel::CvStatModel`. See :ocv:func:`CvStatModel::train` for parameters descriptions.

CvSVM::train

Trains an SVM.

The method trains the SVM model. It follows the conventions of the generic :ocv:func:`CvStatModel::train` approach with the following limitations:

  • Only the CV_ROW_SAMPLE data layout is supported.
  • Input variables are all ordered.
  • Output variables can be either categorical (params.svm_type=CvSVM::C_SVC or params.svm_type=CvSVM::NU_SVC), or ordered (params.svm_type=CvSVM::EPS_SVR or params.svm_type=CvSVM::NU_SVR), or not required at all (params.svm_type=CvSVM::ONE_CLASS).
  • Missing measurements are not supported.

All the other parameters are gathered in the :ocv:class:`CvSVMParams` structure.

CvSVM::train_auto

Trains an SVM with optimal parameters.

The method trains the SVM model automatically by choosing the optimal parameters C, gamma, p, nu, coef0, degree from :ocv:class:`CvSVMParams`. Parameters are considered optimal when the cross-validation estimate of the test set error is minimal.

If there is no need to optimize a parameter, the corresponding grid step should be set to any value less than or equal to 1. For example, to avoid optimization in gamma, set gamma_grid.step = 0, gamma_grid.min_val, gamma_grid.max_val as arbitrary numbers. In this case, the value params.gamma is taken for gamma.

And, finally, if the optimization in a parameter is required but the corresponding grid is unknown, you may call the function :ocv:func:`CvSVM::get_default_grid`. To generate a grid, for example, for gamma, call CvSVM::get_default_grid(CvSVM::GAMMA).

This function works for the classification (params.svm_type=CvSVM::C_SVC or params.svm_type=CvSVM::NU_SVC) as well as for the regression (params.svm_type=CvSVM::EPS_SVR or params.svm_type=CvSVM::NU_SVR). If params.svm_type=CvSVM::ONE_CLASS, no optimization is made and the usual SVM with parameters specified in params is executed.

CvSVM::predict

Predicts the response for input sample(s).

If you pass one sample then prediction result is returned. If you want to get responses for several samples then you should pass the results matrix where prediction results will be stored.

The function is parallelized with the TBB library.

CvSVM::get_default_grid

Generates a grid for SVM parameters.

The function generates a grid for the specified parameter of the SVM algorithm. The grid may be passed to the function :ocv:func:`CvSVM::train_auto`.

CvSVM::get_params

Returns the current SVM parameters.

This function may be used to get the optimal parameters obtained while automatically training :ocv:func:`CvSVM::train_auto`.

CvSVM::get_support_vector

Retrieves a number of support vectors and the particular vector.

The methods can be used to retrieve a set of support vectors.

CvSVM::get_var_count

Returns the number of used features (variables count).