MulticlassSupportVectorMachine Class 
Note: This API is now obsolete.
Namespace: Accord.MachineLearning.VectorMachines
[SerializableAttribute] [ObsoleteAttribute("Please use MulticlassSupportVectorMachine<TKernel> instead.")] public class MulticlassSupportVectorMachine : MulticlassSupportVectorMachine<IKernel<double[]>>, ICloneable
The MulticlassSupportVectorMachine type exposes the following members.
Name  Description  

MulticlassSupportVectorMachine(KernelSupportVectorMachine) 
Constructs a new Multiclass Kernel Support Vector Machine
 
MulticlassSupportVectorMachine(Int32, Int32) 
Initializes a new instance of the MulticlassSupportVectorMachine class.
 
MulticlassSupportVectorMachine(Int32, IKernel, Int32) 
Initializes a new instance of the MulticlassSupportVectorMachine class.

Name  Description  

Classes  Obsolete.
Gets the number of classes.
 
Count 
Gets the number of inner binary classification models used by
this instance. It should correspond to (c * (c  1)) / 2
where c is the number of classes.
(Inherited from OneVsOneTBinary, TInput.)  
Indices 
Gets the pair of class indices handled by each inner binary classification model.
(Inherited from OneVsOneTBinary, TInput.)  
Inputs  Obsolete.
Gets the number of inputs of the machines.
 
IsProbabilistic 
Gets whether this machine has been calibrated to
produce probabilistic outputs (through the Probability(TInput)
and Probabilities(TInput) methods).
 
ItemInt32 
Gets a inner binary classification model inside this OneVsOneTBinary
classifier, together with the pair of classes that it has been designed to
distinguish.
(Inherited from OneVsOneTBinary, TInput.)  
ItemInt32, Int32 
Gets or sets the inner binary classification model used
to distinguish between the given pair of classes.
(Inherited from OneVsOneTBinary, TInput.)  
Kernel 
Gets or sets the kernel function used in all machines at once.
(Inherited from MulticlassSupportVectorMachineTModel, TKernel, TInput.)  
LastDecisionPath 
Gets the last decision path without cloning.
(Inherited from OneVsOneTBinary, TInput.)  
Machines  Obsolete.
Gets the subproblems classifiers.
 
MachinesCount  Obsolete.
Gets the total number of machines
in this multiclass classifier.
 
Method 
Gets or sets the multiclass classification method to be
used when deciding for the class of a given input vector.
Default is Elimination.
(Inherited from OneVsOneTBinary, TInput.)  
Models 
Gets the inner binary classification models.
(Inherited from OneVsOneTBinary, TInput.)  
NumberOfClasses 
Gets the number of classes expected and recognized by the classifier.
(Inherited from ClassifierBaseTInput, TClasses.)  
NumberOfInputs 
Gets the number of inputs accepted by the model.
(Inherited from TransformBaseTInput, TOutput.)  
NumberOfOutputs 
Gets the number of outputs generated by the model.
(Inherited from TransformBaseTInput, TOutput.)  
ParallelOptions 
Gets or sets the parallelization options for this algorithm.
(Inherited from OneVsOneTBinary, TInput.)  
SupportVectorCache 
Gets or sets the minimum number of shared support vectors that a
machine should have for kernel evaluation caching to be enabled.
Default is 64.
(Inherited from MulticlassSupportVectorMachineTModel, TKernel, TInput.)  
SupportVectorCount 
Gets the total number of support vectors
in the entire multiclass machine.
(Inherited from MulticlassSupportVectorMachineTModel, TKernel, TInput.)  
SupportVectorSharedCount 
Gets the number of shared support
vectors in the multiclass machine.
(Inherited from MulticlassSupportVectorMachineTModel, TKernel, TInput.)  
SupportVectorUniqueCount 
Gets the number of unique support
vectors in the multiclass machine.
(Inherited from MulticlassSupportVectorMachineTModel, TKernel, TInput.)  
Token 
Gets or sets a cancellation token that can be used
to cancel the algorithm while it is running.
(Inherited from OneVsOneTBinary, TInput.)  
Track 
Gets or sets whether to track the decision path associated
with each decision. The track will be available through the
GetLastDecisionPath method. Default is true.
(Inherited from OneVsOneTBinary, TInput.) 
Name  Description  

Clone 
Creates a new object that is a copy of the current instance.
(Overrides MulticlassSupportVectorMachineTModel, TKernel, TInputClone.)  
Compress 
If the inner machines have a linear kernel, compresses
their support vectors into a single parameter vector for
each machine.
(Inherited from MulticlassSupportVectorMachineTModel, TKernel, TInput.)  
Compute(Double)  Obsolete.
Computes the given input to produce the corresponding output.
 
Compute(Double, MulticlassComputeMethod)  Obsolete.
Computes the given input to produce the corresponding output.
 
Compute(Double, Double)  Obsolete.
Computes the given input to produce the corresponding output.
 
Compute(Double, Double)  Obsolete.
Computes the given input to produce the corresponding output.
 
Compute(Double, MulticlassComputeMethod, Double)  Obsolete.
Computes the given input to produce the corresponding output.
 
Compute(Double, MulticlassComputeMethod, Double)  Obsolete.
Computes the given input to produce the corresponding output.
 
Compute(Double, Double, TupleInt32, Int32)  Obsolete.
Computes the given input to produce the corresponding output.
 
Compute(Double, MulticlassComputeMethod, Double, Double)  Obsolete.
Computes the given input to produce the corresponding output.
 
Decide(TInput) 
Computes classlabel decisions for a given set of input vectors.
(Inherited from ClassifierBaseTInput, TClasses.)  
Decide(TInput) 
Computes a classlabel decision for a given input.
(Inherited from MulticlassSupportVectorMachineTModel, TKernel, TInput.)  
Decide(TInput, Boolean) 
Computes classlabel decisions for the given input.
(Inherited from MulticlassClassifierBaseTInput.)  
Decide(TInput, Double) 
Computes classlabel decisions for the given input.
(Inherited from MulticlassClassifierBaseTInput.)  
Decide(TInput, Int32) 
Computes classlabel decisions for the given input.
(Inherited from MulticlassClassifierBaseTInput.)  
Decide(TInput, Double) 
Computes a classlabel decision for a given input.
(Inherited from MulticlassClassifierBaseTInput.)  
Decide(TInput, Int32) 
Computes a classlabel decision for a given input.
(Inherited from MulticlassSupportVectorMachineTModel, TKernel, TInput.)  
Dispose 
Performs applicationdefined tasks associated with
freeing, releasing, or resetting unmanaged resources.
(Inherited from MulticlassSupportVectorMachineTModel, TKernel, TInput.)  
Dispose(Boolean) 
Releases unmanaged and  optionally  managed resources
(Inherited from MulticlassSupportVectorMachineTModel, TKernel, TInput.)  
Equals  Determines whether the specified object is equal to the current object. (Inherited from Object.)  
Finalize  Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)  
GetClassifierForClassPair 
Gets the inner binary classification model used to distinguish between
the given pair of classes.
(Inherited from OneVsOneTBinary, TInput.)  
GetEnumerator 
Returns an enumerator that iterates through all machines
contained inside this multiclass support vector machine.
(Inherited from OneVsOneTBinary, TInput.)  
GetHashCode  Serves as the default hash function. (Inherited from Object.)  
GetLastDecisionPath 
Gets the last decision path used during the last call to any of the
model evaluation (Decide, Distance, LogLikelihood, Probability) methods
in the current thread. This method is threadsafe and returns the value
obtained in the last call on the current thread.
(Inherited from OneVsOneTBinary, TInput.)  
GetLastKernelEvaluations 
Gets the total kernel evaluations performed in the last call
to Decide(TInput) and similar functions in the current thread.
(Inherited from MulticlassSupportVectorMachineTModel, TKernel, TInput.)  
GetLastKernelHits 
Gets the number of cache hits during in the last call
to Decide(TInput) and similar functions in the current thread.
(Inherited from MulticlassSupportVectorMachineTModel, TKernel, TInput.)  
GetType  Gets the Type of the current instance. (Inherited from Object.)  
Load(Stream)  Obsolete.
Loads a machine from a stream.
 
Load(String)  Obsolete.
Loads a machine from a file.
 
LogLikelihood(TInput) 
Computes the loglikelihood that the given input
vector belongs to its most plausible class.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
LogLikelihood(TInput) 
Computes the loglikelihood that the given input
vectors belongs to each of the possible classes.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
LogLikelihood(TInput, Int32) 
Predicts a class label vector for the given input vector, returning the
loglikelihood that the input vector belongs to its predicted class.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
LogLikelihood(TInput, Double) 
Computes the loglikelihood that the given input
vectors belongs to each of the possible classes.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
LogLikelihood(TInput, Int32) 
Computes the loglikelihood that the given input vector
belongs to the specified classIndex.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
LogLikelihood(TInput, Int32) 
Computes the loglikelihood that the given input vector
belongs to the specified classIndex.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
LogLikelihood(TInput, Int32) 
Predicts a class label for each input vector, returning the
loglikelihood that each vector belongs to its predicted class.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
LogLikelihood(TInput, Int32) 
Computes the loglikelihood that the given input vector
belongs to the specified classIndex.
(Inherited from OneVsOneTBinary, TInput.)  
LogLikelihood(TInput, Int32, Double) 
Computes the loglikelihood that the given input vector
belongs to the specified classIndex.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
LogLikelihood(TInput, Int32, Double) 
Computes the loglikelihood that the given input vector
belongs to the specified classIndex.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
LogLikelihood(TInput, Int32, Double) 
Predicts a class label for each input vector, returning the
loglikelihood that each vector belongs to its predicted class.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
LogLikelihoods(TInput) 
Computes the loglikelihood that the given input
vector belongs to each of the possible classes.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
LogLikelihoods(TInput) 
Computes the loglikelihood that the given input
vectors belongs to each of the possible classes.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
LogLikelihoods(TInput, Int32) 
Predicts a class label vector for the given input vector, returning the
loglikelihoods of the input vector belonging to each possible class.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
LogLikelihoods(TInput, Double) 
Computes the loglikelihood that the given input
vector belongs to each of the possible classes.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
LogLikelihoods(TInput, Int32) 
Computes the loglikelihood that the given input vector
belongs to the specified classIndex.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
LogLikelihoods(TInput, Int32) 
Predicts a class label vector for each input vector, returning the
loglikelihoods of the input vector belonging to each possible class.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
LogLikelihoods(TInput, Double) 
Predicts a class label vector for the given input vector, returning the
loglikelihoods of the input vector belonging to each possible class.
(Inherited from OneVsOneTBinary, TInput.)  
LogLikelihoods(TInput, Int32, Double) 
Predicts a class label vector for the given input vector, returning the
loglikelihoods of the input vector belonging to each possible class.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
LogLikelihoods(TInput, Int32, Double) 
Computes the loglikelihood that the given input vector
belongs to the specified classIndex.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
LogLikelihoods(TInput, Int32, Double) 
Predicts a class label vector for each input vector, returning the
loglikelihoods of the input vector belonging to each possible class.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
MemberwiseClone  Creates a shallow copy of the current Object. (Inherited from Object.)  
Probabilities(TInput) 
Computes the probabilities that the given input
vector belongs to each of the possible classes.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
Probabilities(TInput) 
Computes the probabilities that the given input
vector belongs to each of the possible classes.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
Probabilities(TInput, Double) 
Computes the probabilities that the given input
vector belongs to each of the possible classes.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
Probabilities(TInput, Int32) 
Predicts a class label vector for the given input vector, returning the
probabilities of the input vector belonging to each possible class.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
Probabilities(TInput, Double) 
Computes the probabilities that the given input
vector belongs to each of the possible classes.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
Probabilities(TInput, Int32) 
Predicts a class label vector for each input vector, returning the
probabilities of the input vector belonging to each possible class.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
Probabilities(TInput, Int32, Double) 
Predicts a class label vector for the given input vector, returning the
probabilities of the input vector belonging to each possible class.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
Probabilities(TInput, Int32, Double) 
Predicts a class label vector for each input vector, returning the
probabilities of the input vector belonging to each possible class.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
Probability(TInput) 
Predicts a class label for the given input vector, returning the
probability that the input vector belongs to its predicted class.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
Probability(TInput) 
Predicts a class label for the given input vector, returning the
probability that the input vector belongs to its predicted class.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
Probability(TInput, Int32) 
Computes the probability that the given input vector
belongs to the specified classIndex.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
Probability(TInput, Int32) 
Predicts a class label for the given input vector, returning the
probability that the input vector belongs to its predicted class.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
Probability(TInput, Double) 
Predicts a class label for the given input vector, returning the
probability that the input vector belongs to its predicted class.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
Probability(TInput, Int32) 
Computes the probability that the given input vector
belongs to the specified classIndex.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
Probability(TInput, Int32) 
Computes the probability that the given input vector
belongs to the specified classIndex.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
Probability(TInput, Int32) 
Predicts a class label for each input vector, returning the
probability that each vector belongs to its predicted class.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
Probability(TInput, Int32, Double) 
Computes the probability that the given input vector
belongs to the specified classIndex.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
Probability(TInput, Int32, Double) 
Computes the probability that the given input vector
belongs to the specified classIndex.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
Probability(TInput, Int32, Double) 
Predicts a class label for each input vector, returning the
probability that each vector belongs to its predicted class.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
Reset 
Resets the cache and machine statistics
so they can be recomputed on next evaluation.
(Inherited from MulticlassSupportVectorMachineTModel, TKernel, TInput.)  
Save(Stream)  Obsolete.
Saves the machine to a stream.
 
Save(String)  Obsolete.
Saves the machine to a file.
 
Score(TInput) 
Computes a numerical score measuring the association between
the given input vector and its most strongly
associated class (as predicted by the classifier).
(Inherited from MulticlassScoreClassifierBaseTInput.)  
Score(TInput) 
Computes a numerical score measuring the association between
the given input vector and its most strongly
associated class (as predicted by the classifier).
(Inherited from MulticlassScoreClassifierBaseTInput.)  
Score(TInput, Int32) 
Computes a numerical score measuring the association between
the given input vector and a given
classIndex.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
Score(TInput, Int32) 
Predicts a class label for the input vector, returning a
numerical score measuring the strength of association of the
input vector to its most strongly related class.
(Inherited from MulticlassScoreClassifierBaseTInput.)  
Score(TInput, Double) 
Computes a numerical score measuring the association between
the given input vector and its most strongly
associated class (as predicted by the classifier).
(Inherited from MulticlassScoreClassifierBaseTInput.)  
Score(TInput, Int32) 
Computes a numerical score measuring the association between
the given input vector and a given
classIndex.
(Inherited from MulticlassScoreClassifierBaseTInput.)  
Score(TInput, Int32) 
Computes a numerical score measuring the association between
the given input vector and a given
classIndex.
(Inherited from MulticlassScoreClassifierBaseTInput.)  
Score(TInput, Int32) 
Predicts a class label for each input vector, returning a
numerical score measuring the strength of association of the
input vector to the most strongly related class.
(Inherited from MulticlassScoreClassifierBaseTInput.)  
Score(TInput, Int32, Double) 
Computes a numerical score measuring the association between
the given input vector and a given
classIndex.
(Inherited from MulticlassScoreClassifierBaseTInput.)  
Score(TInput, Int32, Double) 
Computes a numerical score measuring the association between
the given input vector and a given
classIndex.
(Inherited from MulticlassScoreClassifierBaseTInput.)  
Score(TInput, Int32, Double) 
Predicts a class label for each input vector, returning a
numerical score measuring the strength of association of the
input vector to the most strongly related class.
(Inherited from MulticlassScoreClassifierBaseTInput.)  
Scores(TInput) 
Computes a numerical score measuring the association between
the given input vector and each class.
(Inherited from MulticlassScoreClassifierBaseTInput.)  
Scores(TInput) 
Computes a numerical score measuring the association between
the given input vector and each class.
(Inherited from MulticlassScoreClassifierBaseTInput.)  
Scores(TInput, Int32) 
Predicts a class label vector for the given input vector, returning a
numerical score measuring the strength of association of the input vector
to each of the possible classes.
(Inherited from MulticlassScoreClassifierBaseTInput.)  
Scores(TInput, Double) 
Computes a numerical score measuring the association between
the given input vector and each class.
(Inherited from MulticlassScoreClassifierBaseTInput.)  
Scores(TInput, Int32) 
Predicts a class label vector for each input vector, returning a
numerical score measuring the strength of association of the input vector
to each of the possible classes.
(Inherited from MulticlassScoreClassifierBaseTInput.)  
Scores(TInput, Double) 
Computes a numerical score measuring the association between
the given input vector and each class.
(Inherited from MulticlassSupportVectorMachineTModel, TKernel, TInput.)  
Scores(TInput, Int32, Double) 
Predicts a class label vector for the given input vector, returning a
numerical score measuring the strength of association of the input vector
to each of the possible classes.
(Inherited from MulticlassScoreClassifierBaseTInput.)  
Scores(TInput, Int32, Double) 
Predicts a class label vector for each input vector, returning a
numerical score measuring the strength of association of the input vector
to each of the possible classes.
(Inherited from MulticlassScoreClassifierBaseTInput.)  
ToMulticlass 
Views this instance as a multiclass generative classifier.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
ToMultilabel 
Views this instance as a multilabel generative classifier,
giving access to more advanced methods, such as the prediction
of onehot vectors.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
ToString  Returns a string that represents the current object. (Inherited from Object.)  
Transform(TInput) 
Applies the transformation to an input, producing an associated output.
(Inherited from ClassifierBaseTInput, TClasses.)  
Transform(TInput) 
Applies the transformation to a set of input vectors,
producing an associated set of output vectors.
(Inherited from TransformBaseTInput, TOutput.)  
Transform(TInput, TClasses) 
Applies the transformation to an input, producing an associated output.
(Inherited from ClassifierBaseTInput, TClasses.)  
Transform(TInput, Boolean) 
Applies the transformation to an input, producing an associated output.
(Inherited from MulticlassClassifierBaseTInput.)  
Transform(TInput, Int32) 
Applies the transformation to an input, producing an associated output.
(Inherited from MulticlassClassifierBaseTInput.)  
Transform(TInput, Boolean) 
Applies the transformation to an input, producing an associated output.
(Inherited from MulticlassClassifierBaseTInput.)  
Transform(TInput, Double) 
Applies the transformation to an input, producing an associated output.
(Inherited from MulticlassClassifierBaseTInput.)  
Transform(TInput, Int32) 
Applies the transformation to an input, producing an associated output.
(Inherited from MulticlassClassifierBaseTInput.)  
Transform(TInput, Double) 
Applies the transformation to an input, producing an associated output.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)  
Transform(TInput, Double) 
Applies the transformation to an input, producing an associated output.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.) 
Name  Description  

HasMethod 
Checks whether an object implements a method with the given name.
(Defined by ExtensionMethods.)  
IsEqual 
Compares two objects for equality, performing an elementwise
comparison if the elements are vectors or matrices.
(Defined by Matrix.)  
To(Type)  Overloaded.
Converts an object into another type, irrespective of whether
the conversion can be done at compile time or not. This can be
used to convert generic types to numeric types during runtime.
(Defined by ExtensionMethods.)  
ToT  Overloaded.
Converts an object into another type, irrespective of whether
the conversion can be done at compile time or not. This can be
used to convert generic types to numeric types during runtime.
(Defined by ExtensionMethods.) 
The Support Vector Machine is by nature a binary classifier. One of the ways to extend the original SVM algorithm to multiple classes is to build a one againstone scheme where multiple SVMs specialize to recognize each of the available classes. By using a competition scheme, the original multiclass classification problem is then reduced to n*(n/2) smaller binary problems.
Currently this class supports only Kernel machines as the underlying classifiers. If a Linear Support Vector Machine is needed, specify a Linear kernel in the constructor at the moment of creation.
References:
The following example shows how to learn a linear, multiclass support vector machine using the LinearDualCoordinateDescent algorithm.
// Let's say we have the following data to be classified // into three possible classes. Those are the samples: // double[][] inputs = { // input output new double[] { 0, 1, 1, 0 }, // 0 new double[] { 0, 1, 0, 0 }, // 0 new double[] { 0, 0, 1, 0 }, // 0 new double[] { 0, 1, 1, 0 }, // 0 new double[] { 0, 1, 0, 0 }, // 0 new double[] { 1, 0, 0, 0 }, // 1 new double[] { 1, 0, 0, 0 }, // 1 new double[] { 1, 0, 0, 1 }, // 1 new double[] { 0, 0, 0, 1 }, // 1 new double[] { 0, 0, 0, 1 }, // 1 new double[] { 1, 1, 1, 1 }, // 2 new double[] { 1, 0, 1, 1 }, // 2 new double[] { 1, 1, 0, 1 }, // 2 new double[] { 0, 1, 1, 1 }, // 2 new double[] { 1, 1, 1, 1 }, // 2 }; int[] outputs = // those are the class labels { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, }; // Create a onevsone multiclass SVM learning algorithm var teacher = new MulticlassSupportVectorLearning<Linear>() { // using LIBLINEAR's L2loss SVC dual for each SVM Learner = (p) => new LinearDualCoordinateDescent() { Loss = Loss.L2 } }; // The following line is only needed to ensure reproducible results. Please remove it to enable full parallelization teacher.ParallelOptions.MaxDegreeOfParallelism = 1; // (Remove, comment, or change this line to enable full parallelism) // Learn a machine var machine = teacher.Learn(inputs, outputs); // Obtain class predictions for each sample int[] predicted = machine.Decide(inputs); // Compute classification error double error = new ZeroOneLoss(outputs).Loss(predicted);
The following example shows how to learn a nonlinear, multiclass support vector machine using the Gaussian kernel and the SequentialMinimalOptimization algorithm.
// Let's say we have the following data to be classified // into three possible classes. Those are the samples: // double[][] inputs = { // input output new double[] { 0, 1, 1, 0 }, // 0 new double[] { 0, 1, 0, 0 }, // 0 new double[] { 0, 0, 1, 0 }, // 0 new double[] { 0, 1, 1, 0 }, // 0 new double[] { 0, 1, 0, 0 }, // 0 new double[] { 1, 0, 0, 0 }, // 1 new double[] { 1, 0, 0, 0 }, // 1 new double[] { 1, 0, 0, 1 }, // 1 new double[] { 0, 0, 0, 1 }, // 1 new double[] { 0, 0, 0, 1 }, // 1 new double[] { 1, 1, 1, 1 }, // 2 new double[] { 1, 0, 1, 1 }, // 2 new double[] { 1, 1, 0, 1 }, // 2 new double[] { 0, 1, 1, 1 }, // 2 new double[] { 1, 1, 1, 1 }, // 2 }; int[] outputs = // those are the class labels { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, }; // Create the multiclass learning algorithm for the machine var teacher = new MulticlassSupportVectorLearning<Gaussian>() { // Configure the learning algorithm to use SMO to train the // underlying SVMs in each of the binary class subproblems. Learner = (param) => new SequentialMinimalOptimization<Gaussian>() { // Estimate a suitable guess for the Gaussian kernel's parameters. // This estimate can serve as a starting point for a grid search. UseKernelEstimation = true } }; // The following line is only needed to ensure reproducible results. Please remove it to enable full parallelization teacher.ParallelOptions.MaxDegreeOfParallelism = 1; // (Remove, comment, or change this line to enable full parallelism) // Learn a machine var machine = teacher.Learn(inputs, outputs); // Obtain class predictions for each sample int[] predicted = machine.Decide(inputs); // Get class scores for each sample double[] scores = machine.Score(inputs); // Compute classification error double error = new ZeroOneLoss(outputs).Loss(predicted);
Support vector machines can have their weights calibrated in order to produce probability estimates (instead of simple class separation distances). The following example shows how to use ProbabilisticOutputCalibration within MulticlassSupportVectorLearning to generate a probabilistic SVM:
// Let's say we have the following data to be classified // into three possible classes. Those are the samples: // double[][] inputs = { // input output new double[] { 0, 1, 1, 0 }, // 0 new double[] { 0, 1, 0, 0 }, // 0 new double[] { 0, 0, 1, 0 }, // 0 new double[] { 0, 1, 1, 0 }, // 0 new double[] { 0, 1, 0, 0 }, // 0 new double[] { 1, 0, 0, 1 }, // 1 new double[] { 0, 0, 0, 1 }, // 1 new double[] { 0, 0, 0, 1 }, // 1 new double[] { 1, 0, 1, 1 }, // 2 new double[] { 1, 1, 0, 1 }, // 2 new double[] { 0, 1, 1, 1 }, // 2 new double[] { 1, 1, 1, 1 }, // 2 }; int[] outputs = // those are the class labels { 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, }; // Create the multiclass learning algorithm for the machine var teacher = new MulticlassSupportVectorLearning<Gaussian>() { // Configure the learning algorithm to use SMO to train the // underlying SVMs in each of the binary class subproblems. Learner = (param) => new SequentialMinimalOptimization<Gaussian>() { // Estimate a suitable guess for the Gaussian kernel's parameters. // This estimate can serve as a starting point for a grid search. UseKernelEstimation = true } }; // Learn a machine var machine = teacher.Learn(inputs, outputs); // Create the multiclass learning algorithm for the machine var calibration = new MulticlassSupportVectorLearning<Gaussian>() { Model = machine, // We will start with an existing machine // Configure the learning algorithm to use Platt's calibration Learner = (param) => new ProbabilisticOutputCalibration<Gaussian>() { Model = param.Model // Start with an existing machine } }; // Configure parallel execution options calibration.ParallelOptions.MaxDegreeOfParallelism = 1; // Learn a machine calibration.Learn(inputs, outputs); // Obtain class predictions for each sample int[] predicted = machine.Decide(inputs); // Get class scores for each sample double[] scores = machine.Score(inputs); // Get loglikelihoods (should be same as scores) double[][] logl = machine.LogLikelihoods(inputs); // Get probability for each sample double[][] prob = machine.Probabilities(inputs); // Compute classification error double error = new ZeroOneLoss(outputs).Loss(predicted); double loss = new CategoryCrossEntropyLoss(outputs).Loss(prob);