Support vector machines

Given a set of vectors \(\{a_i\}_{i=0}^{n-1} \subset \mathbb{R}^m\) and binary labels \(\{\eta_i\} \subset \{0,1\}\), a soft-margin Support Vector Machine solves the problem

\[\min_{w,\beta} \frac{1}{n} \sum_{i=0}^{n-1} h(1-\eta_i(w^H a_i - \beta)) + \gamma \| w \|_2^2,\]

where \(h(t)\) is the hinge loss, or unit ramp function, which is zero when \(t \le 0\) and equal to \(t\) otherwise, and whose purpose is to linearly penalize the modeled distance of a point from a chosen hyperplane separator.

The pair \((w,\beta)\) can be interpreted as an unnormalized description of the hyperplane which approximately partitions the labeled data. In particular, \(w\)‘s direction is the normal for the hyperplane, \(\beta/\|w\|_2\) is the offset of the plane from the origin in the direction of \(w\), and \(1/\|w\|_2\) is the half-margin of the separator, which is the minimum distance a point can be from the separator without being penalized.

Note

While sometimes functional, this implementation is still very much a work-in-progress.

C++ API

Int SVM(const Matrix<Real> &G, const Matrix<Real> &q, Matrix<Real> &z, Real gamma, Real rho = 1, Int maxIter = 500, bool inv = true, bool progress = true)
Int SVM(const AbstractDistMatrix<Real> &G, const AbstractDistMatrix<Real> &q, AbstractDistMatrix<Real> &z, Real gamma, Real rho = 1, Int maxIter = 500, bool inv = true, bool progress = true)

C API

ElError ElSVM_s(ElConstMatrix_s G, ElConstMatrix_s q, ElMatrix_s z, float gamma, ElInt* numIts)
ElError ElSVM_d(ElConstMatrix_d G, ElConstMatrix_d q, ElMatrix_d z, double gamma, ElInt* numIts)
ElError ElSVMDist_s(ElConstDistMatrix_s G, ElConstDistMatrix_s q, ElDistMatrix_s z, float gamma, ElInt* numIts)
ElError ElSVMDist_d(ElConstDistMatrix_d G, ElConstDistMatrix_d q, ElDistMatrix_d z, double gamma, ElInt* numIts)