MultilabelSupportVectorMachineTKernel Class |
Namespace: Accord.MachineLearning.VectorMachines
[SerializableAttribute] public class MultilabelSupportVectorMachine<TKernel> : MultilabelSupportVectorMachine<SupportVectorMachine<TKernel>, TKernel, double[]> where TKernel : Object, IKernel<double[]>
The MultilabelSupportVectorMachineTKernel type exposes the following members.
Name | Description | |
---|---|---|
MultilabelSupportVectorMachineTKernel(Int32, FuncSupportVectorMachineTKernel) |
Initializes a new instance of the MultilabelSupportVectorMachineTKernel class.
| |
MultilabelSupportVectorMachineTKernel(Int32, TKernel, Int32) |
Initializes a new instance of the MultilabelSupportVectorMachineTKernel class.
|
Name | Description | |
---|---|---|
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 OneVsRestTModel, TInput.) | |
Item |
Gets or sets the inner binary classifiers used to distinguish
between each class and all other classes.
(Inherited from OneVsRestTModel, TInput.) | |
Method |
Gets or sets the MultilabelProbabilityMethod that should be used when computing probabilities
using the Probabilities(TInput) and related methods.
(Inherited from MultilabelSupportVectorMachineTModel, TKernel, TInput.) | |
Models |
Gets or sets the binary classifiers that have been trained
to distinguish between each class and all other classes.
(Inherited from OneVsRestTModel, 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 used
when deciding the class of a new sample.
(Inherited from MultilabelSupportVectorMachineTModel, TKernel, TInput.) | |
SupportVectorCount |
Gets the total number of support vectors
in the entire multi-label machine.
(Inherited from MultilabelSupportVectorMachineTModel, TKernel, TInput.) | |
SupportVectorSharedCount |
Gets the number of shared support
vectors in the multi-label machine.
(Inherited from MultilabelSupportVectorMachineTModel, TKernel, TInput.) | |
SupportVectorUniqueCount |
Gets the number of unique support
vectors in the multi-label machine.
(Inherited from MultilabelSupportVectorMachineTModel, 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 MultilabelSupportVectorMachineTModel, TKernel, TInput.) | |
Decide(TInput) |
Computes class-label decisions for a given set of input vectors.
(Inherited from ClassifierBaseTInput, TClasses.) | |
Decide(TInput) |
Computes a class-label decision for a given input.
(Inherited from MultilabelClassifierBaseTInput.) | |
Decide(TInput, TClasses) |
Computes a class-label decision for a given input.
(Inherited from ClassifierBaseTInput, TClasses.) | |
Decide(TInput, Double) |
Computes class-label decisions for the given input.
(Inherited from MultilabelClassifierBaseTInput.) | |
Decide(TInput, Int32) |
Computes class-label decisions for the given input.
(Inherited from MultilabelClassifierBaseTInput.) | |
Decide(TInput, Double) |
Computes a class-label decision for a given input.
(Inherited from MultilabelClassifierBaseTInput.) | |
Decide(TInput, Int32) |
Computes a class-label decision for a given input.
(Inherited from MultilabelClassifierBaseTInput.) | |
Decide(TInput, Double) |
Computes a class-label decision for a given input.
(Inherited from MultilabelScoreClassifierBaseTInput.) | |
Decide(TInput, Boolean) |
Computes class-label decisions for the given input.
(Inherited from MultilabelSupportVectorMachineTModel, TKernel, TInput.) | |
Decide(TInput, Int32) |
Computes whether a class label applies to an input vector.
(Inherited from MultilabelSupportVectorMachineTModel, TKernel, TInput.) | |
Decide(TInput, Int32) |
Computes a class-label decision for a given input.
(Inherited from MultilabelSupportVectorMachineTModel, TKernel, TInput.) | |
Dispose |
Performs application-defined tasks associated with
freeing, releasing, or resetting unmanaged resources.
(Inherited from MultilabelSupportVectorMachineTModel, TKernel, TInput.) | |
Dispose(Boolean) |
Releases unmanaged and - optionally - managed resources
(Inherited from MultilabelSupportVectorMachineTModel, 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 OneVsRestTModel, TInput.) | |
GetEnumerator |
Returns an enumerator that iterates through the collection.
(Inherited from OneVsRestTModel, 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 MultilabelSupportVectorMachineTModel, 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 MultilabelSupportVectorMachineTModel, TKernel, TInput.) | |
GetType | Gets the Type of the current instance. (Inherited from Object.) | |
LogLikelihood(TInput, Int32) |
Computes the log-likelihood that the given input vector
belongs to the specified classIndex.
(Inherited from MultilabelLikelihoodClassifierBaseTInput.) | |
LogLikelihood(TInput, Int32) |
Computes the log-likelihood that the given input vector
belongs to the specified classIndex.
(Inherited from MultilabelLikelihoodClassifierBaseTInput.) | |
LogLikelihood(TInput, Int32) |
Computes the log-likelihood that the given input vector
belongs to the specified classIndex.
(Inherited from MultilabelLikelihoodClassifierBaseTInput.) | |
LogLikelihood(TInput, Int32, Double) |
Computes the log-likelihood that the given input vector
belongs to the specified classIndex.
(Inherited from MultilabelLikelihoodClassifierBaseTInput.) | |
LogLikelihood(TInput, Int32, Double) |
Computes the log-likelihood that the given input vector
belongs to the specified classIndex.
(Inherited from MultilabelLikelihoodClassifierBaseTInput.) | |
LogLikelihood(TInput, Int32, Boolean) |
Computes a log-likelihood measuring the association between
the given input vector and a given
classIndex.
(Inherited from OneVsRestTModel, TInput.) | |
LogLikelihoods(TInput) |
Computes the log-likelihood that the given input
vector belongs to each of the possible classes.
(Inherited from MultilabelLikelihoodClassifierBaseTInput.) | |
LogLikelihoods(TInput) |
Computes the log-likelihood that the given input
vector belongs to each of the possible classes.
(Inherited from MultilabelLikelihoodClassifierBaseTInput.) | |
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 MultilabelLikelihoodClassifierBaseTInput.) | |
LogLikelihoods(TInput, Double) |
Computes the log-likelihood that the given input
vector belongs to each of the possible classes.
(Inherited from MultilabelLikelihoodClassifierBaseTInput.) | |
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 MultilabelLikelihoodClassifierBaseTInput.) | |
LogLikelihoods(TInput, Double) |
Computes the log-likelihood that the given input
vector belongs to each of the possible classes.
(Inherited from MultilabelLikelihoodClassifierBaseTInput.) | |
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 MultilabelLikelihoodClassifierBaseTInput.) | |
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 MultilabelLikelihoodClassifierBaseTInput.) | |
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 MultilabelSupportVectorMachineTModel, 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 MultilabelLikelihoodClassifierBaseTInput.) | |
Probabilities(TInput) |
Computes the probabilities that the given input
vector belongs to each of the possible classes.
(Inherited from MultilabelLikelihoodClassifierBaseTInput.) | |
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 MultilabelLikelihoodClassifierBaseTInput.) | |
Probabilities(TInput, Double) |
Computes the probabilities that the given input
vector belongs to each of the possible classes.
(Inherited from MultilabelLikelihoodClassifierBaseTInput.) | |
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 MultilabelLikelihoodClassifierBaseTInput.) | |
Probabilities(TInput, Double) |
Computes the probabilities that the given input
vector belongs to each of the possible classes.
(Inherited from MultilabelLikelihoodClassifierBaseTInput.) | |
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 MultilabelLikelihoodClassifierBaseTInput.) | |
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 MultilabelLikelihoodClassifierBaseTInput.) | |
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 MultilabelSupportVectorMachineTModel, TKernel, TInput.) | |
Probability(TInput, Int32) |
Computes the probability that the given input vector
belongs to the specified classIndex.
(Inherited from MultilabelLikelihoodClassifierBaseTInput.) | |
Probability(TInput, Int32) |
Computes the probability that the given input vector
belongs to the specified classIndex.
(Inherited from MultilabelLikelihoodClassifierBaseTInput.) | |
Probability(TInput, Int32) |
Computes the probability that the given input vector
belongs to the specified classIndex.
(Inherited from MultilabelLikelihoodClassifierBaseTInput.) | |
Probability(TInput, Int32, Double) |
Computes the probability that the given input vector
belongs to the specified classIndex.
(Inherited from MultilabelLikelihoodClassifierBaseTInput.) | |
Probability(TInput, Int32, Double) |
Computes the probability that the given input vector
belongs to the specified classIndex.
(Inherited from MultilabelLikelihoodClassifierBaseTInput.) | |
Reset |
Resets the cache and machine statistics
so they can be recomputed on next evaluation.
(Inherited from MultilabelSupportVectorMachineTModel, TKernel, TInput.) | |
Score(TInput, Int32) |
Computes a numerical score measuring the association between
the given input vector and a given
classIndex.
(Inherited from MultilabelScoreClassifierBaseTInput.) | |
Score(TInput, Int32) |
Computes a numerical score measuring the association between
the given input vector and a given
classIndex.
(Inherited from MultilabelScoreClassifierBaseTInput.) | |
Score(TInput, Int32) |
Computes a numerical score measuring the association between
the given input vector and a given
classIndex.
(Inherited from MultilabelSupportVectorMachineTModel, TKernel, TInput.) | |
Score(TInput, Int32, Double) |
Computes a numerical score measuring the association between
the given input vector and a given
classIndex.
(Inherited from MultilabelScoreClassifierBaseTInput.) | |
Score(TInput, Int32, Double) |
Computes a numerical score measuring the association between
the given input vector and a given
classIndex.
(Inherited from MultilabelScoreClassifierBaseTInput.) | |
Score(TInput, Int32, Boolean) |
Computes a numerical score measuring the association between
the given input vector and a given
classIndex.
(Inherited from OneVsRestTModel, TInput.) | |
Scores(TInput) |
Computes a numerical score measuring the association between
the given input vector and each class.
(Inherited from MultilabelScoreClassifierBaseTInput.) | |
Scores(TInput) |
Computes a numerical score measuring the association between
the given input vector and each class.
(Inherited from MultilabelScoreClassifierBaseTInput.) | |
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 MultilabelScoreClassifierBaseTInput.) | |
Scores(TInput, Double) |
Computes a numerical score measuring the association between
the given input vector and each class.
(Inherited from MultilabelScoreClassifierBaseTInput.) | |
Scores(TInput, Double) |
Computes a numerical score measuring the association between
the given input vector and each class.
(Inherited from MultilabelScoreClassifierBaseTInput.) | |
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 MultilabelScoreClassifierBaseTInput.) | |
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 MultilabelScoreClassifierBaseTInput.) | |
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 MultilabelScoreClassifierBaseTInput.) | |
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 MultilabelSupportVectorMachineTModel, TKernel, TInput.) | |
ToMulticlass |
Views this instance as a multi-class generative classifier.
(Inherited from MultilabelLikelihoodClassifierBaseTInput.) | |
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, Boolean) |
Applies the transformation to an input, producing an associated output.
(Inherited from MultilabelClassifierBaseTInput.) | |
Transform(TInput, Int32) |
Applies the transformation to an input, producing an associated output.
(Inherited from MultilabelClassifierBaseTInput.) | |
Transform(TInput, Boolean) |
Applies the transformation to an input, producing an associated output.
(Inherited from MultilabelClassifierBaseTInput.) | |
Transform(TInput, Int32) |
Applies the transformation to an input, producing an associated output.
(Inherited from MultilabelClassifierBaseTInput.) | |
Transform(TInput, Double) |
Applies the transformation to an input, producing an associated output.
(Inherited from MultilabelLikelihoodClassifierBaseTInput.) | |
Transform(TInput, Double) |
Applies the transformation to an input, producing an associated output.
(Inherited from MultilabelLikelihoodClassifierBaseTInput.) | |
Transform(TInput, Double) |
Applies the transformation to an input, producing an associated output.
(Inherited from MultilabelScoreClassifierBaseTInput.) | |
Transform(TInput, Int32) |
Applies the transformation to an input, producing an associated output.
(Inherited from MultilabelScoreClassifierBaseTInput.) |
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. 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 SequentialMinimalOptimizationTKernel 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 MulticlassSupportVectorLearningTKernel 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);