public class SVM<T> extends KernelMachine<T> implements Classifier<T>
If there exists no hyperplane that can perfectly split the positive and negative instances, the soft margin method will choose a hyperplane that splits the instances as cleanly as possible, while still maximizing the distance to the nearest cleanly split instances.
The nonlinear SVMs are created by applying the kernel trick to maximum-margin hyperplanes. The resulting algorithm is formally similar, except that every dot product is replaced by a nonlinear kernel function. This allows the algorithm to fit the maximum-margin hyperplane in a transformed feature space. The transformation may be nonlinear and the transformed space be high dimensional. For example, the feature space corresponding Gaussian kernel is a Hilbert space of infinite dimension. Thus though the classifier is a hyperplane in the high-dimensional feature space, it may be nonlinear in the original input space. Maximum margin classifiers are well regularized, so the infinite dimension does not spoil the results.
The effectiveness of SVM depends on the selection of kernel, the kernel's parameters, and soft margin parameter C. Given a kernel, best combination of C and kernel's parameters is often selected by a grid-search with cross validation.
The dominant approach for creating multi-class SVMs is to reduce the single multi-class problem into multiple binary classification problems. Common methods for such reduction is to build binary classifiers which distinguish between (i) one of the labels to the rest (one-versus-all) or (ii) between every pair of classes (one-versus-one). Classification of new instances for one-versus-all case is done by a winner-takes-all strategy, in which the classifier with the highest output function assigns the class. For the one-versus-one approach, classification is done by a max-wins voting strategy, in which every classifier assigns the instance to one of the two classes, then the vote for the assigned class is increased by one vote, and finally the class with most votes determines the instance classification.
Constructor and Description |
---|
SVM(smile.math.kernel.MercerKernel<T> kernel,
T[] instances,
double[] weight,
double b)
Constructor.
|
Modifier and Type | Method and Description |
---|---|
static Classifier<double[]> |
fit(double[][] x,
int[] y,
double C,
double tol)
Fits a binary-class linear SVM.
|
static Classifier<int[]> |
fit(int[][] x,
int[] y,
int p,
double C,
double tol)
Fits a binary-class linear SVM of binary sparse data.
|
static Classifier<smile.util.SparseArray> |
fit(smile.util.SparseArray[] x,
int[] y,
int p,
double C,
double tol)
Fits a binary-class linear SVM.
|
static <T> SVM<T> |
fit(T[] x,
int[] y,
smile.math.kernel.MercerKernel<T> kernel,
double C,
double tol)
Fits a binary-class SVM.
|
int |
predict(T x)
Predicts the class label of an instance.
|
f, instances, intercept, kernel, toString, toSVM, weights
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
applyAsDouble, applyAsInt, f, predict
public int predict(T x)
Classifier
predict
in interface Classifier<T>
x
- the instance to be classified.public static Classifier<double[]> fit(double[][] x, int[] y, double C, double tol)
x
- training samples.y
- training labels.C
- the soft margin penalty parameter.tol
- the tolerance of convergence test.public static Classifier<int[]> fit(int[][] x, int[] y, int p, double C, double tol)
x
- training samples.y
- training labels.p
- the dimension of input vector.C
- the soft margin penalty parameter.tol
- the tolerance of convergence test.public static Classifier<smile.util.SparseArray> fit(smile.util.SparseArray[] x, int[] y, int p, double C, double tol)
x
- training samples.y
- training labels.p
- the dimension of input vector.C
- the soft margin penalty parameter.tol
- the tolerance of convergence test.public static <T> SVM<T> fit(T[] x, int[] y, smile.math.kernel.MercerKernel<T> kernel, double C, double tol)
x
- training samples.y
- training labels.kernel
- the kernel function.C
- the soft margin penalty parameter.tol
- the tolerance of convergence test.