Documentation>C API
svm.c File Reference

Support Vector Machines (SVM) - Implementation. More...

#include "svm.h"
#include "mathop.h"
#include <string.h>

Functions

VlSvmvl_svm_new (VlSvmSolverType type, double const *data, vl_size dimension, vl_size numData, double const *labels, double lambda)
 Create a new object with plain data. More...
 
VlSvmvl_svm_new_with_dataset (VlSvmSolverType solver, VlSvmDataset *dataset, double const *labels, double lambda)
 Create a new object with a dataset. More...
 
VlSvmvl_svm_new_with_abstract_data (VlSvmSolverType solver, void *data, vl_size dimension, vl_size numData, double const *labels, double lambda)
 Create a new object with abstract data. More...
 
void vl_svm_delete (VlSvm *self)
 Delete object. More...
 
void vl_svm_set_epsilon (VlSvm *self, double epsilon)
 Set the convergence threshold. More...
 
double vl_svm_get_epsilon (VlSvm const *self)
 Get the convergence threshold. More...
 
void vl_svm_set_bias_learning_rate (VlSvm *self, double rate)
 Set the bias learning rate. More...
 
double vl_svm_get_bias_learning_rate (VlSvm const *self)
 Get the bias leraning rate. More...
 
void vl_svm_set_bias_multiplier (VlSvm *self, double b)
 Set the bias multiplier. More...
 
double vl_svm_get_bias_multiplier (VlSvm const *self)
 Get the bias multiplier. More...
 
void vl_svm_set_iteration_number (VlSvm *self, vl_uindex n)
 Set the current iteratio number. More...
 
vl_size vl_svm_get_iteration_number (VlSvm const *self)
 Get the current iteration number. More...
 
void vl_svm_set_max_num_iterations (VlSvm *self, vl_size n)
 Set the maximum number of iterations. More...
 
vl_size vl_svm_get_max_num_iterations (VlSvm const *self)
 Get the maximum number of iterations. More...
 
void vl_svm_set_diagnostic_frequency (VlSvm *self, vl_size f)
 Set the diagnostic frequency. More...
 
vl_size vl_svm_get_diagnostic_frequency (VlSvm const *self)
 Get the diagnostic frequency. More...
 
VlSvmSolverType vl_svm_get_solver (VlSvm const *self)
 Get the SVM solver type. More...
 
void vl_svm_set_lambda (VlSvm *self, double lambda)
 Set the regularizer parameter lambda. More...
 
double vl_svm_get_lambda (VlSvm const *self)
 Get the regularizer parameter lambda. More...
 
void vl_svm_set_weights (VlSvm *self, double const *weights)
 Set the data weights. More...
 
double const * vl_svm_get_weights (VlSvm const *self)
 Get the data weights. More...
 
vl_size vl_svm_get_dimension (VlSvm *self)
 Get the model dimenison. More...
 
vl_size vl_svm_get_num_data (VlSvm *self)
 Get the number of data samples. More...
 
double const * vl_svm_get_model (VlSvm const *self)
 Get the SVM model. More...
 
void vl_svm_set_model (VlSvm *self, double const *model)
 Set the SVM model. More...
 
void vl_svm_set_bias (VlSvm *self, double b)
 Set the SVM bias. More...
 
double vl_svm_get_bias (VlSvm const *self)
 Get the value of the bias. More...
 
VlSvmStatistics const * vl_svm_get_statistics (VlSvm const *self)
 Get the solver statistics. More...
 
double const * vl_svm_get_scores (VlSvm const *self)
 Get the scores of the data points. More...
 
void vl_svm_set_diagnostic_function (VlSvm *self, VlSvmDiagnosticFunction f, void *data)
 Set the diagnostic function callback. More...
 
void vl_svm_set_data_functions (VlSvm *self, VlSvmInnerProductFunction inner, VlSvmAccumulateFunction acc)
 Set the data functions. More...
 
void vl_svm_set_loss_function (VlSvm *self, VlSvmLossFunction f)
 Set the loss function callback. More...
 
void vl_svm_set_loss_derivative_function (VlSvm *self, VlSvmLossFunction f)
 Set the loss derivative function callback. More...
 
void vl_svm_set_conjugate_loss_function (VlSvm *self, VlSvmLossFunction f)
 Set the conjugate loss function callback. More...
 
void vl_svm_set_dca_update_function (VlSvm *self, VlSvmDcaUpdateFunction f)
 Set the DCA update function callback. More...
 
void vl_svm_set_loss (VlSvm *self, VlSvmLossType loss)
 Set the loss function to one of the default types. More...
 
double vl_svm_hinge_loss (double inner, double label)
 SVM hinge loss. More...
 
double vl_svm_hinge_loss_derivative (double inner, double label)
 SVM hinge loss derivative. More...
 
double vl_svm_hinge_conjugate_loss (double u, double label)
 SVM hinge loss conjugate. More...
 
double vl_svm_hinge_dca_update (double alpha, double inner, double norm2, double label)
 SVM hinge loss DCA update. More...
 
double vl_svm_hinge2_loss (double inner, double label)
 SVM square hinge loss. More...
 
double vl_svm_hinge2_loss_derivative (double inner, double label)
 SVM square hinge loss derivative. More...
 
double vl_svm_hinge2_conjugate_loss (double u, double label)
 SVM square hinge loss conjugate. More...
 
double vl_svm_hinge2_dca_update (double alpha, double inner, double norm2, double label)
 SVM square hinge loss DCA update. More...
 
double vl_svm_l1_loss (double inner, double label)
 SVM l1 loss. More...
 
double vl_svm_l1_loss_derivative (double inner, double label)
 SVM l1 loss derivative. More...
 
double vl_svm_l1_conjugate_loss (double u, double label)
 SVM l1 loss conjugate. More...
 
double vl_svm_l1_dca_update (double alpha, double inner, double norm2, double label)
 SVM l1 loss DCA update. More...
 
double vl_svm_l2_loss (double inner, double label)
 SVM l2 loss. More...
 
double vl_svm_l2_loss_derivative (double inner, double label)
 SVM l2 loss derivative. More...
 
double vl_svm_l2_conjugate_loss (double u, double label)
 SVM l2 loss conjugate. More...
 
double vl_svm_l2_dca_update (double alpha, double inner, double norm2, double label)
 SVM l2 loss DCA update. More...
 
double vl_svm_logistic_loss (double inner, double label)
 SVM l2 loss. More...
 
double vl_svm_logistic_loss_derivative (double inner, double label)
 SVM l2 loss derivative. More...
 
double vl_svm_logistic_conjugate_loss (double u, double label)
 SVM l2 loss conjugate. More...
 
double vl_svm_logistic_dca_update (double alpha, double inner, double norm2, double label)
 SVM l2 loss DCA update. More...
 
void _vl_svm_update_statistics (VlSvm *self)
 Update SVM statistics. More...
 
void vl_svm_train (VlSvm *self)
 Run the SVM solver. More...
 

Detailed Description

Author
Milan Sulc
Daniele Perrone
Andrea Vedaldi

Function Documentation

void _vl_svm_update_statistics ( VlSvm self)
Parameters
selfobject.
void vl_svm_delete ( VlSvm self)
Parameters
selfobject.
See also
vl_svm_new
double vl_svm_get_bias ( VlSvm const *  self)
Parameters
selfobject.
Returns
bias \(b\).

The value of the bias returned already include the effect of bias mutliplier.

double vl_svm_get_bias_learning_rate ( VlSvm const *  self)
Parameters
selfobject
Returns
bias learning rate.
double vl_svm_get_bias_multiplier ( VlSvm const *  self)
Parameters
selfobject.
Returns
bias multiplier.
vl_size vl_svm_get_diagnostic_frequency ( VlSvm const *  self)
Parameters
selfobject.
Returns
diagnostic frequency.
vl_size vl_svm_get_dimension ( VlSvm self)
Parameters
selfobject.
Returns
model dimension.

This is the dimensionality of the weight vector \(\bw\).

double vl_svm_get_epsilon ( VlSvm const *  self)
Parameters
selfobject
Returns
epsilon threshold.
vl_size vl_svm_get_iteration_number ( VlSvm const *  self)
Parameters
selfobject.
Returns
current iteration number.
double vl_svm_get_lambda ( VlSvm const *  self)
Parameters
selfobject.
Returns
diagnostic frequency.
vl_size vl_svm_get_max_num_iterations ( VlSvm const *  self)
Parameters
selfobject.
Returns
maximum number of iterations.
double const* vl_svm_get_model ( VlSvm const *  self)
Parameters
selfobject.
Returns
model.

This is the weight vector \(\bw\).

vl_size vl_svm_get_num_data ( VlSvm self)
Parameters
selfobject.
Returns
model number of data samples

This is the dimensionality of the weight vector \(\bw\).

double const* vl_svm_get_scores ( VlSvm const *  self)
Parameters
selfobject.
Returns
vector of scores.

After training or during the diagnostic callback, this function can be used to retrieve the scores of the points, i.e. \(\langle \bx_i, \bw \rangle + b\).

VlSvmSolverType vl_svm_get_solver ( VlSvm const *  self)
Parameters
selfobject.
Returns
SVM solver type.
VlSvmStatistics const* vl_svm_get_statistics ( VlSvm const *  self)
Parameters
selfobject.
Returns
statistics.
double const* vl_svm_get_weights ( VlSvm const *  self)
Parameters
selfobject.
Returns
data weights.
double vl_svm_hinge2_conjugate_loss ( double  u,
double  label 
)
Parameters
udual variable.
labellabel value.
Returns
conjugate loss.
double vl_svm_hinge2_dca_update ( double  alpha,
double  inner,
double  norm2,
double  label 
)
Parameters
alphacurrent value of the dual variable.
innerinner product \(\bw^\top \bx\) of the sample with the SVM model.
norm2normalization factor \(\|\bx\|^2/\lambda n\).
labellabel \(y\) of the sample.
Returns
incremental update \(\Delta\alpha\) of the dual variable.
See also
Stochastic Dual Coordinate Ascent
double vl_svm_hinge2_loss ( double  inner,
double  label 
)
Parameters
innerinner product between sample and model \(\bw^\top \bx\).
labelsample label \(y\).
Returns
value of the loss.

The interface is the same for a loss function, its derivative, or the conjugate loss.

See also
SVM fundamentals
double vl_svm_hinge2_loss_derivative ( double  inner,
double  label 
)
Parameters
innerinner product between sample and model \(\bw^\top \bx\).
labelsample label \(y\).
Returns
value of the loss.

The interface is the same for a loss function, its derivative, or the conjugate loss.

See also
SVM fundamentals
double vl_svm_hinge_conjugate_loss ( double  u,
double  label 
)
Parameters
udual variable.
labellabel value.
Returns
conjugate loss.
double vl_svm_hinge_dca_update ( double  alpha,
double  inner,
double  norm2,
double  label 
)
Parameters
alphacurrent value of the dual variable.
innerinner product \(\bw^\top \bx\) of the sample with the SVM model.
norm2normalization factor \(\|\bx\|^2/\lambda n\).
labellabel \(y\) of the sample.
Returns
incremental update \(\Delta\alpha\) of the dual variable.
See also
Stochastic Dual Coordinate Ascent
double vl_svm_hinge_loss ( double  inner,
double  label 
)
Parameters
innerinner product between sample and model \(\bw^\top \bx\).
labelsample label \(y\).
Returns
value of the loss.

The interface is the same for a loss function, its derivative, or the conjugate loss.

See also
SVM fundamentals
double vl_svm_hinge_loss_derivative ( double  inner,
double  label 
)
Parameters
innerinner product between sample and model \(\bw^\top \bx\).
labelsample label \(y\).
Returns
value of the loss.

The interface is the same for a loss function, its derivative, or the conjugate loss.

See also
SVM fundamentals
double vl_svm_l1_conjugate_loss ( double  u,
double  label 
)
Parameters
udual variable.
labellabel value.
Returns
conjugate loss.
double vl_svm_l1_dca_update ( double  alpha,
double  inner,
double  norm2,
double  label 
)
Parameters
alphacurrent value of the dual variable.
innerinner product \(\bw^\top \bx\) of the sample with the SVM model.
norm2normalization factor \(\|\bx\|^2/\lambda n\).
labellabel \(y\) of the sample.
Returns
incremental update \(\Delta\alpha\) of the dual variable.
See also
Stochastic Dual Coordinate Ascent
double vl_svm_l1_loss ( double  inner,
double  label 
)
Parameters
innerinner product between sample and model \(\bw^\top \bx\).
labelsample label \(y\).
Returns
value of the loss.

The interface is the same for a loss function, its derivative, or the conjugate loss.

See also
SVM fundamentals
double vl_svm_l1_loss_derivative ( double  inner,
double  label 
)
Parameters
innerinner product between sample and model \(\bw^\top \bx\).
labelsample label \(y\).
Returns
value of the loss.

The interface is the same for a loss function, its derivative, or the conjugate loss.

See also
SVM fundamentals
double vl_svm_l2_conjugate_loss ( double  u,
double  label 
)
Parameters
udual variable.
labellabel value.
Returns
conjugate loss.
double vl_svm_l2_dca_update ( double  alpha,
double  inner,
double  norm2,
double  label 
)
Parameters
alphacurrent value of the dual variable.
innerinner product \(\bw^\top \bx\) of the sample with the SVM model.
norm2normalization factor \(\|\bx\|^2/\lambda n\).
labellabel \(y\) of the sample.
Returns
incremental update \(\Delta\alpha\) of the dual variable.
See also
Stochastic Dual Coordinate Ascent
double vl_svm_l2_loss ( double  inner,
double  label 
)
Parameters
innerinner product between sample and model \(\bw^\top \bx\).
labelsample label \(y\).
Returns
value of the loss.

The interface is the same for a loss function, its derivative, or the conjugate loss.

See also
SVM fundamentals
double vl_svm_l2_loss_derivative ( double  inner,
double  label 
)
Parameters
innerinner product between sample and model \(\bw^\top \bx\).
labelsample label \(y\).
Returns
value of the loss.

The interface is the same for a loss function, its derivative, or the conjugate loss.

See also
SVM fundamentals
double vl_svm_logistic_conjugate_loss ( double  u,
double  label 
)
Parameters
udual variable.
labellabel value.
Returns
conjugate loss.
double vl_svm_logistic_dca_update ( double  alpha,
double  inner,
double  norm2,
double  label 
)
Parameters
alphacurrent value of the dual variable.
innerinner product \(\bw^\top \bx\) of the sample with the SVM model.
norm2normalization factor \(\|\bx\|^2/\lambda n\).
labellabel \(y\) of the sample.
Returns
incremental update \(\Delta\alpha\) of the dual variable.
See also
Stochastic Dual Coordinate Ascent
double vl_svm_logistic_loss ( double  inner,
double  label 
)
Parameters
innerinner product between sample and model \(\bw^\top \bx\).
labelsample label \(y\).
Returns
value of the loss.

The interface is the same for a loss function, its derivative, or the conjugate loss.

See also
SVM fundamentals
double vl_svm_logistic_loss_derivative ( double  inner,
double  label 
)
Parameters
innerinner product between sample and model \(\bw^\top \bx\).
labelsample label \(y\).
Returns
value of the loss.

The interface is the same for a loss function, its derivative, or the conjugate loss.

See also
SVM fundamentals
VlSvm* vl_svm_new ( VlSvmSolverType  type,
double const *  data,
vl_size  dimension,
vl_size  numData,
double const *  labels,
double  lambda 
)
Parameters
typetype of SMV solver.
dataa pointer to a matrix of data.
dimensiondimension of the SVM model.
numDatanumber of training samples.
labelstraining labels.
lambdaregularizer parameter.
Returns
the new object.

data has one column per sample, in double format. More advanced inputs can be used with vl_svm_new_with_dataset and vl_svm_new_with_abstract_data.

See also
vl_svm_delete
VlSvm* vl_svm_new_with_abstract_data ( VlSvmSolverType  solver,
void *  data,
vl_size  dimension,
vl_size  numData,
double const *  labels,
double  lambda 
)
Parameters
solvertype of SMV solver.
datapointer to the data.
dimensiondimension of the SVM model.
numDatanum training samples.
labelstraining samples labels.
lambdaregularizer parameter.
Returns
the new object.

After calling this function, vl_svm_set_data_functions must be used to setup suitable callbacks for the inner product and accumulation operations (

See also
svm-data-abstraction).
vl_svm_delete
VlSvm* vl_svm_new_with_dataset ( VlSvmSolverType  solver,
VlSvmDataset dataset,
double const *  labels,
double  lambda 
)
Parameters
solvertype of SMV solver.
datasetSVM dataset object
labelstraining samples labels.
lambdaregularizer parameter.
Returns
the new object.
See also
vl_svm_delete
void vl_svm_set_bias ( VlSvm self,
double  b 
)
Parameters
selfobject.
bbias.

The function set the internal representation of the SVM bias to be equal to b (the bias multiplier is applied). The same remark that applies to vl_svm_set_model applies here too.

void vl_svm_set_bias_learning_rate ( VlSvm self,
double  rate 
)
Parameters
selfobject
ratebias learning rate (positive).

This parameter applies only to the SGD solver.

void vl_svm_set_bias_multiplier ( VlSvm self,
double  b 
)
Parameters
selfobject
bbias multiplier.

The bias multiplier is the value of the constant feature appended to the data vectors to implement the bias (Adding a bias).

void vl_svm_set_conjugate_loss_function ( VlSvm self,
VlSvmLossFunction  f 
)
void vl_svm_set_data_functions ( VlSvm self,
VlSvmInnerProductFunction  inner,
VlSvmAccumulateFunction  acc 
)
Parameters
selfobject.
innerinner product function.
accaccumulate function.

See Data abstraction: working with compressed data.

void vl_svm_set_dca_update_function ( VlSvm self,
VlSvmDcaUpdateFunction  f 
)
void vl_svm_set_diagnostic_frequency ( VlSvm self,
vl_size  f 
)
Parameters
selfobject.
fdiagnostic frequency (>= 1).

A diagnostic round (to test for convergence and to printout information) is performed every f iterations.

void vl_svm_set_diagnostic_function ( VlSvm self,
VlSvmDiagnosticFunction  f,
void *  data 
)
Parameters
selfobject.
fdiagnostic function pointer.
datapointer to data used by the diagnostic function.
void vl_svm_set_epsilon ( VlSvm self,
double  epsilon 
)
Parameters
selfobject
epsilonthreshold (non-negative).
void vl_svm_set_iteration_number ( VlSvm self,
vl_uindex  n 
)
Parameters
selfobject.
niteration number.

If called before training, this can be used with SGD for a warm start, as the net effect is to slow down the learning rate.

void vl_svm_set_lambda ( VlSvm self,
double  lambda 
)
Parameters
selfobject.
lambdaregularizer parameter.

Note that lambda is usually set when calling a constructor for VlSvm as certain parameters, such as the maximum number of iterations, are tuned accordingly. This tuning is not performed when lambda is changed using this function.

void vl_svm_set_loss ( VlSvm self,
VlSvmLossType  loss 
)
Parameters
selfobject.
losstype of loss function.
See also
Loss functions.
void vl_svm_set_loss_derivative_function ( VlSvm self,
VlSvmLossFunction  f 
)
void vl_svm_set_loss_function ( VlSvm self,
VlSvmLossFunction  f 
)
Parameters
selfobject.
floss function callback.

Note that setting up a loss requires specifying more than just one callback. See Loss functions for details.

void vl_svm_set_max_num_iterations ( VlSvm self,
vl_size  n 
)
Parameters
selfobject.
nmaximum number of iterations.
void vl_svm_set_model ( VlSvm self,
double const *  model 
)
Parameters
selfobject.
modelmodel.

The function copies the content of the vector model to the internal model buffer. This operation can be used for warm start with the SGD algorithm, but has undefined effect with the SDCA algorithm.

void vl_svm_set_weights ( VlSvm self,
double const *  weights 
)
Parameters
selfobject.
weightsdata weights.

weights must be an array of non-negative weights. The loss of each data point is multiplied by the corresponding weight.

Set weights to NULL to weight the data uniformly by 1 (default).

Note that the weights array is not copied and must be valid througout the object lifetime (unless it is replaced).

void vl_svm_train ( VlSvm self)
Parameters
selfobject.

The data on which the SVM operates is passed upon the cration of the VlSvm object. This function runs a solver to learn a corresponding model. See Getting started.