![]() |
MultilabelSupportVectorMachine Class |
Note: This API is now obsolete.
Namespace: Accord.MachineLearning.VectorMachines
[SerializableAttribute] [ObsoleteAttribute("Please use MultilabelSupportVectorMachine<TKernel> instead.")] public class MultilabelSupportVectorMachine : MultilabelSupportVectorMachine<IKernel<double[]>>
The MultilabelSupportVectorMachine type exposes the following members.
Name | Description | |
---|---|---|
![]() | MultilabelSupportVectorMachine(KernelSupportVectorMachine[]) |
Initializes a new instance of the MultilabelSupportVectorMachine class.
|
![]() | MultilabelSupportVectorMachine(Int32, Int32) |
Initializes a new instance of the MultilabelSupportVectorMachine class.
|
![]() | MultilabelSupportVectorMachine(Int32, IKernel, Int32) |
Initializes a new instance of the MultilabelSupportVectorMachine class.
|
Name | Description | |
---|---|---|
![]() | Classes | Obsolete.
Gets the number of classes.
|
![]() | Count |
Gets the total number of binary models in this one-vs-rest
multi-label configuration. Should be equal to the
NumberOfOutputs (number of classes).
(Inherited from OneVsRest<TModel, TInput>.) |
![]() | Inputs | Obsolete.
Gets the number of inputs of the machines.
|
![]() | Item | Obsolete.
Gets the classifier for class index.
|
![]() | Machines | Obsolete.
Gets the subproblems classifiers.
|
![]() | Method |
Gets or sets the MultilabelProbabilityMethod that should be used when computing probabilities
using the Probabilities(TInput) and related methods.
(Inherited from MultilabelSupportVectorMachine<TModel, TKernel, TInput>.) |
![]() | Models |
Gets or sets the binary classifiers that have been trained
to distinguish between each class and all other classes.
(Inherited from OneVsRest<TModel, TInput>.) |
![]() | NumberOfClasses |
Gets the number of classes expected and recognized by the classifier.
(Inherited from ClassifierBase<TInput, TClasses>.) |
![]() | NumberOfInputs |
Gets the number of inputs accepted by the model.
(Inherited from TransformBase<TInput, TOutput>.) |
![]() | NumberOfOutputs |
Gets the number of outputs generated by the model.
(Inherited from TransformBase<TInput, TOutput>.) |
![]() | ParallelOptions |
Gets or sets the parallelization options used
when deciding the class of a new sample.
(Inherited from MultilabelSupportVectorMachine<TModel, TKernel, TInput>.) |
![]() | SupportVectorCount |
Gets the total number of support vectors
in the entire multi-label machine.
(Inherited from MultilabelSupportVectorMachine<TModel, TKernel, TInput>.) |
![]() | SupportVectorSharedCount |
Gets the number of shared support
vectors in the multi-label machine.
(Inherited from MultilabelSupportVectorMachine<TModel, TKernel, TInput>.) |
![]() | SupportVectorUniqueCount |
Gets the number of unique support
vectors in the multi-label machine.
(Inherited from MultilabelSupportVectorMachine<TModel, TKernel, TInput>.) |
Name | Description | |
---|---|---|
![]() | Compress |
If the inner machines have a linear kernel, compresses
their support vectors into a single parameter vector for
each machine.
(Inherited from MultilabelSupportVectorMachine<TModel, TKernel, TInput>.) |
![]() | Compute(Double[]) | Obsolete.
Computes the given input to produce the corresponding outputs.
|
![]() | 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 outputs.
|
![]() | Decide(TInput[]) |
Computes class-label decisions for a given set of input vectors.
(Inherited from ClassifierBase<TInput, TClasses>.) |
![]() | Decide(TInput) |
Computes a class-label decision for a given input.
(Inherited from MultilabelClassifierBase<TInput>.) |
![]() | Decide(TInput[],TClasses[]) |
Computes a class-label decision for a given input.
(Inherited from ClassifierBase<TInput, TClasses>.) |
![]() | Decide(TInput,Double[]) |
Computes class-label decisions for the given input.
(Inherited from MultilabelClassifierBase<TInput>.) |
![]() | Decide(TInput,Int32[]) |
Computes class-label decisions for the given input.
(Inherited from MultilabelClassifierBase<TInput>.) |
![]() | Decide(TInput[],Double[][]) |
Computes a class-label decision for a given input.
(Inherited from MultilabelClassifierBase<TInput>.) |
![]() | Decide(TInput[],Int32[][]) |
Computes a class-label decision for a given input.
(Inherited from MultilabelClassifierBase<TInput>.) |
![]() | Decide(TInput[],Double[]) |
Computes a class-label decision for a given input.
(Inherited from MultilabelScoreClassifierBase<TInput>.) |
![]() | Decide(TInput,Boolean[]) |
Computes class-label decisions for the given input.
(Inherited from MultilabelSupportVectorMachine<TModel, TKernel, TInput>.) |
![]() | Decide(TInput, Int32) |
Computes whether a class label applies to an input vector.
(Inherited from MultilabelSupportVectorMachine<TModel, TKernel, TInput>.) |
![]() | Decide(TInput[],Int32[]) |
Computes a class-label decision for a given input.
(Inherited from MultilabelSupportVectorMachine<TModel, TKernel, TInput>.) |
![]() | Dispose() |
Performs application-defined tasks associated with
freeing, releasing, or resetting unmanaged resources.
(Inherited from MultilabelSupportVectorMachine<TModel, TKernel, TInput>.) |
![]() | Dispose(Boolean) |
Releases unmanaged and - optionally - managed resources
(Inherited from MultilabelSupportVectorMachine<TModel, 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.) |
![]() | GetClassifierForClass |
Gets the binary classifier for particular class index.
(Inherited from OneVsRest<TModel, TInput>.) |
![]() | GetEnumerator |
Returns an enumerator that iterates through the collection.
(Inherited from OneVsRest<TModel, TInput>.) |
![]() | GetHashCode | Serves as the default hash function. (Inherited from Object.) |
![]() | GetLastKernelEvaluations |
Gets the total kernel evaluations performed in the last call
to Decide(TInput) and similar functions in the current thread.
(Inherited from MultilabelSupportVectorMachine<TModel, 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 MultilabelSupportVectorMachine<TModel, 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, Int32) |
Computes the log-likelihood that the given input vector
belongs to the specified classIndex.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | LogLikelihood(TInput[], Int32) |
Computes the log-likelihood that the given input vector
belongs to the specified classIndex.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | LogLikelihood(TInput[],Int32[]) |
Computes the log-likelihood that the given input vector
belongs to the specified classIndex.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | LogLikelihood(TInput[], Int32,Double[]) |
Computes the log-likelihood that the given input vector
belongs to the specified classIndex.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | LogLikelihood(TInput[],Int32[],Double[]) |
Computes the log-likelihood that the given input vector
belongs to the specified classIndex.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | LogLikelihood(TInput, Int32, Boolean) |
Computes a log-likelihood measuring the association between
the given input vector and a given
classIndex.
(Inherited from OneVsRest<TModel, TInput>.) |
![]() | LogLikelihoods(TInput) |
Computes the log-likelihood that the given input
vector belongs to each of the possible classes.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | LogLikelihoods(TInput[]) |
Computes the log-likelihood that the given input
vector belongs to each of the possible classes.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | LogLikelihoods(TInput, Double) |
Predicts a class label vector for the given input vector, returning the
log-likelihoods of the input vector belonging to each possible class.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | LogLikelihoods(TInput,Double[]) |
Computes the log-likelihood that the given input
vector belongs to each of the possible classes.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | LogLikelihoods(TInput[],Double[]) |
Predicts a class label vector for each input vector, returning the
log-likelihoods of the input vector belonging to each possible class.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | LogLikelihoods(TInput[],Double[][]) |
Computes the log-likelihood that the given input
vector belongs to each of the possible classes.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | LogLikelihoods(TInput,Boolean[],Double[]) |
Predicts a class label vector for the given input vector, returning the
log-likelihoods of the input vector belonging to each possible class.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | LogLikelihoods(TInput[],Double[],Double[][]) |
Predicts a class label vector for each input vector, returning the
log-likelihoods of the input vector belonging to each possible class.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | LogLikelihoods(TInput,Boolean[],Double[]) |
Predicts a class label vector for the given input vector, returning the
log-likelihoods of the input vector belonging to each possible class.
(Inherited from MultilabelSupportVectorMachine<TModel, TKernel, TInput>.) |
![]() | 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 MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | Probabilities(TInput[]) |
Computes the probabilities that the given input
vector belongs to each of the possible classes.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | Probabilities(TInput, 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 MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | Probabilities(TInput,Double[]) |
Computes the probabilities that the given input
vector belongs to each of the possible classes.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | Probabilities(TInput[],Double[]) |
Predicts a class label vector for each input vector, returning the
probabilities of the input vector belonging to each possible class.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | Probabilities(TInput[],Double[][]) |
Computes the probabilities that the given input
vector belongs to each of the possible classes.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | Probabilities(TInput,Boolean[],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 MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | Probabilities(TInput[],Double[],Double[][]) |
Predicts a class label vector for each input vector, returning the
probabilities of the input vector belonging to each possible class.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | Probabilities(TInput,Boolean[],Double[]) |
Predicts a class label vector for the given input vector, returning the
log-likelihoods of the input vector belonging to each possible class.
(Inherited from MultilabelSupportVectorMachine<TModel, TKernel, TInput>.) |
![]() | Probability(TInput, Int32) |
Computes the probability that the given input vector
belongs to the specified classIndex.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | Probability(TInput[], Int32) |
Computes the probability that the given input vector
belongs to the specified classIndex.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | Probability(TInput[],Int32[]) |
Computes the probability that the given input vector
belongs to the specified classIndex.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | Probability(TInput[], Int32,Double[]) |
Computes the probability that the given input vector
belongs to the specified classIndex.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | Probability(TInput[],Int32[],Double[]) |
Computes the probability that the given input vector
belongs to the specified classIndex.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | Reset |
Resets the cache and machine statistics
so they can be recomputed on next evaluation.
(Inherited from MultilabelSupportVectorMachine<TModel, TKernel, TInput>.) |
![]() | Save(Stream) | Obsolete.
Saves the machine to a stream.
|
![]() | Save(String) | Obsolete.
Saves the machine to a file.
|
![]() | Score(TInput[], Int32) |
Computes a numerical score measuring the association between
the given input vector and a given
classIndex.
(Inherited from MultilabelScoreClassifierBase<TInput>.) |
![]() | Score(TInput[],Int32[]) |
Computes a numerical score measuring the association between
the given input vector and a given
classIndex.
(Inherited from MultilabelScoreClassifierBase<TInput>.) |
![]() | Score(TInput, Int32) |
Computes a numerical score measuring the association between
the given input vector and a given
classIndex.
(Inherited from MultilabelSupportVectorMachine<TModel, TKernel, TInput>.) |
![]() | Score(TInput[], Int32,Double[]) |
Computes a numerical score measuring the association between
the given input vector and a given
classIndex.
(Inherited from MultilabelScoreClassifierBase<TInput>.) |
![]() | Score(TInput[],Int32[],Double[]) |
Computes a numerical score measuring the association between
the given input vector and a given
classIndex.
(Inherited from MultilabelScoreClassifierBase<TInput>.) |
![]() | Score(TInput, Int32, Boolean) |
Computes a numerical score measuring the association between
the given input vector and a given
classIndex.
(Inherited from OneVsRest<TModel, TInput>.) |
![]() | Scores(TInput) |
Computes a numerical score measuring the association between
the given input vector and each class.
(Inherited from MultilabelScoreClassifierBase<TInput>.) |
![]() | Scores(TInput[]) |
Computes a numerical score measuring the association between
the given input vector and each class.
(Inherited from MultilabelScoreClassifierBase<TInput>.) |
![]() | Scores(TInput,Boolean[]) |
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 MultilabelScoreClassifierBase<TInput>.) |
![]() | Scores(TInput,Double[]) |
Computes a numerical score measuring the association between
the given input vector and each class.
(Inherited from MultilabelScoreClassifierBase<TInput>.) |
![]() | Scores(TInput[],Double[][]) |
Computes a numerical score measuring the association between
the given input vector and each class.
(Inherited from MultilabelScoreClassifierBase<TInput>.) |
![]() | 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 MultilabelScoreClassifierBase<TInput>.) |
![]() | Scores(TInput,Boolean[],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 MultilabelScoreClassifierBase<TInput>.) |
![]() | Scores(TInput[],Boolean[][],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 MultilabelScoreClassifierBase<TInput>.) |
![]() | Scores(TInput,Boolean[],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 MultilabelSupportVectorMachine<TModel, TKernel, TInput>.) |
![]() | ToMulticlass() |
Views this instance as a multi-class generative classifier.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | 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 ClassifierBase<TInput, TClasses>.) |
![]() | Transform(TInput[]) |
Applies the transformation to a set of input vectors,
producing an associated set of output vectors.
(Inherited from TransformBase<TInput, TOutput>.) |
![]() | Transform(TInput,Boolean[]) |
Applies the transformation to an input, producing an associated output.
(Inherited from MultilabelClassifierBase<TInput>.) |
![]() | Transform(TInput,Int32[]) |
Applies the transformation to an input, producing an associated output.
(Inherited from MultilabelClassifierBase<TInput>.) |
![]() | Transform(TInput[],Boolean[][]) |
Applies the transformation to an input, producing an associated output.
(Inherited from MultilabelClassifierBase<TInput>.) |
![]() | Transform(TInput[],Int32[][]) |
Applies the transformation to an input, producing an associated output.
(Inherited from MultilabelClassifierBase<TInput>.) |
![]() | Transform(TInput,Double[]) |
Applies the transformation to an input, producing an associated output.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | Transform(TInput[],Double[][]) |
Applies the transformation to an input, producing an associated output.
(Inherited from MultilabelLikelihoodClassifierBase<TInput>.) |
![]() | Transform(TInput[],Double[]) |
Applies the transformation to an input, producing an associated output.
(Inherited from MultilabelScoreClassifierBase<TInput>.) |
![]() | Transform(TInput[],Int32[]) |
Applies the transformation to an input, producing an associated output.
(Inherited from MultilabelScoreClassifierBase<TInput>.) |
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.) |
![]() | To<T>() | 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. Multiple label problems are problems in which an input sample is allowed to belong to one or more classes. A way to implement multi-label classes in support vector machines is to build a one-against-all decision scheme where multiple SVMs are trained to detect each of the available classes.
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, multi-label (one-vs-rest) 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 one-vs-one multi-class SVM learning algorithm var teacher = new MultilabelSupportVectorLearning<Linear>() { // using LIBLINEAR's L2-loss 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 bool[][] predicted = machine.Decide(inputs); // Compute classification error using mean accuracy (mAcc) double error = new HammingLoss(outputs).Loss(predicted);
The following example shows how to learn a non-linear, multi-label (one-vs-rest) 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 multi-class 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 multi-class learning algorithm for the machine var teacher = new MultilabelSupportVectorLearning<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 multi-class learning algorithm for the machine var calibration = new MultilabelSupportVectorLearning<Gaussian>() { Model = machine, // We will start with an existing machine // Configure the learning algorithm to use SMO to train the // underlying SVMs in each of the binary class subproblems. 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 bool[][] predicted = machine.Decide(inputs); // Get class scores for each sample double[][] scores = machine.Scores(inputs); // Get log-likelihoods (should be same as scores) double[][] logl = machine.LogLikelihoods(inputs); // Get probability for each sample double[][] prob = machine.Probabilities(inputs); // Compute classification error using mean accuracy (mAcc) double error = new HammingLoss(outputs).Loss(predicted); double loss = new CategoryCrossEntropyLoss(outputs).Loss(prob);