# Support Vector Machine¶

## LinearKernel¶

A linear kernel.

This function has the following formula:

$K(\boldsymbol{x}, \boldsymbol{x'}) = \boldsymbol{x}^T \boldsymbol{x'}$
message LinearKernel {
}


## RBFKernel¶

A Gaussian radial basis function (RBF) kernel.

This function has the following formula:

$K(\boldsymbol{x}, \boldsymbol{x'}) = \ \exp(-\gamma || \boldsymbol{x} - \boldsymbol{x'} ||^2 )$
message RBFKernel {
double gamma = 1;
}


## PolyKernel¶

A polynomial kernel.

This function has the following formula:

$K(\boldsymbol{x}, \boldsymbol{x'}) = \ (\gamma \boldsymbol{x}^T \boldsymbol{x'} + c)^{degree}$
message PolyKernel {
int32 degree = 1;
double c = 2;
double gamma = 3;
}


## SigmoidKernel¶

A sigmoid kernel.

This function has the following formula:

$K(\boldsymbol{x}, \boldsymbol{x'}) = \ \tanh(\gamma \boldsymbol{x}^T \boldsymbol{x'} + c)$
message SigmoidKernel {
double gamma = 1;
double c = 2;
}


## Kernel¶

A kernel.

message Kernel {
oneof kernel {
LinearKernel linearKernel = 1;
RBFKernel rbfKernel = 2;
PolyKernel polyKernel = 3;
SigmoidKernel sigmoidKernel = 4;
}
}


## SparseNode¶

A sparse node.

message SparseNode {
int32 index = 1; // 1-based indexes, like libsvm
double value = 2;
}


## SparseVector¶

A sparse vector.

message SparseVector {
repeated SparseNode nodes = 1;
}


## SparseSupportVectors¶

One or more sparse support vectors.

message SparseSupportVectors {
repeated SparseVector vectors = 1;
}


## DenseVector¶

A dense vector.

message DenseVector {
repeated double values = 1;
}


## DenseSupportVectors¶

One or more dense support vectors.

message DenseSupportVectors {
repeated DenseVector vectors = 1;
}


## Coefficients¶

One or more coefficients.

message Coefficients {
repeated double alpha = 1;
}


## SupportVectorRegressor¶

A support vector regressor.

message SupportVectorRegressor {
Kernel kernel = 1;

// Support vectors, either sparse or dense format
oneof supportVectors {
SparseSupportVectors sparseSupportVectors = 2;
DenseSupportVectors denseSupportVectors = 3;
}

// Coefficients, one for each support vector
Coefficients coefficients = 4;

double rho = 5;
}


## SupportVectorClassifier¶

A support vector classifier

message SupportVectorClassifier {
Kernel kernel = 1;

repeated int32 numberOfSupportVectorsPerClass = 2;

oneof supportVectors {
SparseSupportVectors sparseSupportVectors = 3;
DenseSupportVectors denseSupportVectors = 4;
}

repeated Coefficients coefficients = 5;

repeated double rho = 6;

repeated double probA = 7;
repeated double probB = 8;

oneof ClassLabels {
StringVector stringClassLabels = 100;
Int64Vector int64ClassLabels = 101;
}
}