Click or drag to resize
Accord.NET (logo)

MultinomialLogisticRegression Class

Nominal Multinomial Logistic Regression.
Inheritance Hierarchy
SystemObject
  Accord.MachineLearningTransformBaseDouble, Int32
    Accord.MachineLearningClassifierBaseDouble, Int32
      Accord.MachineLearningMulticlassClassifierBaseDouble
        Accord.MachineLearningMulticlassScoreClassifierBaseDouble
          Accord.MachineLearningMulticlassLikelihoodClassifierBaseDouble
            Accord.Statistics.Models.RegressionMultinomialLogisticRegression

Namespace:  Accord.Statistics.Models.Regression
Assembly:  Accord.Statistics (in Accord.Statistics.dll) Version: 3.8.0
Syntax
[SerializableAttribute]
public class MultinomialLogisticRegression : MulticlassLikelihoodClassifierBase<double[]>, 
	ICloneable
Request Example View Source

The MultinomialLogisticRegression type exposes the following members.

Constructors
Properties
  NameDescription
Public propertyCategories Obsolete.
Gets the number of categories of the model.
Public propertyCoefficients
Gets the coefficient vectors, in which the first column are the intercept values.
Public propertyInputs Obsolete.
Gets the number of inputs of the model.
Public propertyNumberOfClasses
Gets the number of classes expected and recognized by the classifier.
(Inherited from ClassifierBaseTInput, TClasses.)
Public propertyNumberOfInputs
Gets the number of inputs accepted by the model.
(Inherited from TransformBaseTInput, TOutput.)
Public propertyNumberOfOutputs
Gets the number of outputs generated by the model.
(Inherited from TransformBaseTInput, TOutput.)
Public propertyNumberOfParameters
Gets the total number of parameters in the multinomial logistic regression [(categories - 1) * (inputs + 1)].
Public propertyStandardErrors
Gets the standard errors associated with each coefficient during the model estimation phase.
Top
Methods
  NameDescription
Public methodChiSquare(Double, Double)
The likelihood ratio test of the overall model, also called the model chi-square test.
Public methodChiSquare(Double, Int32)
The likelihood ratio test of the overall model, also called the model chi-square test.
Public methodClone
Creates a new MultinomialLogisticRegression that is a copy of the current instance.
Public methodCompute(Double) Obsolete.
Computes the model output for the given input vector.
Public methodCompute(Double) Obsolete.
Computes the model outputs for the given input vectors.
Public methodDecide(TInput)
Computes class-label decisions for a given set of input vectors.
(Inherited from ClassifierBaseTInput, TClasses.)
Public methodDecide(TInput)
Computes a class-label decision for a given input.
(Inherited from MulticlassScoreClassifierBaseTInput.)
Public methodDecide(TInput, TClasses)
Computes a class-label decision for a given input.
(Inherited from ClassifierBaseTInput, TClasses.)
Public methodDecide(TInput, Boolean)
Computes class-label decisions for the given input.
(Inherited from MulticlassClassifierBaseTInput.)
Public methodDecide(TInput, Double)
Computes class-label decisions for the given input.
(Inherited from MulticlassClassifierBaseTInput.)
Public methodDecide(TInput, Int32)
Computes class-label decisions for the given input.
(Inherited from MulticlassClassifierBaseTInput.)
Public methodDecide(TInput, Double)
Computes a class-label decision for a given input.
(Inherited from MulticlassClassifierBaseTInput.)
Public methodEquals
Determines whether the specified object is equal to the current object.
(Inherited from Object.)
Protected methodFinalize
Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.
(Inherited from Object.)
Public methodGetConfidenceInterval(Int32)
Gets the 95% confidence intervals for the Odds Ratios for all coefficients.
Public methodGetConfidenceInterval(Int32, Int32)
Gets the 95% confidence interval for the Odds Ratio for a given coefficient.
Public methodGetDeviance(Double, Double)
Gets the Deviance for the model.
Public methodGetDeviance(Double, Int32)
Gets the Deviance for the model.
Public methodGetHashCode
Serves as the default hash function.
(Inherited from Object.)
Public methodGetLogLikelihood(Double, Double)
Gets the Log-Likelihood for the model.
Public methodGetLogLikelihood(Double, Int32)
Gets the Deviance for the model.
Public methodGetLogLikelihoodRatio
Gets the Log-Likelihood Ratio between two models.
Public methodGetOddsRatio(Int32)
Gets the Odds Ratio for all coefficients.
Public methodGetOddsRatio(Int32, Int32)
Gets the Odds Ratio for a given coefficient.
Public methodGetType
Gets the Type of the current instance.
(Inherited from Object.)
Public methodGetWaldTest(Int32)
Gets the Wald Test for all coefficients.
Public methodGetWaldTest(Int32, Int32)
Gets the Wald Test for a given coefficient.
Public methodLogLikelihood(TInput)
Computes the log-likelihood that the given input vector belongs to its most plausible class.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodLogLikelihood(TInput)
Computes the log-likelihood that the given input vectors belongs to each of the possible classes.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodLogLikelihood(TInput, Int32)
Predicts a class label vector for the given input vector, returning the log-likelihood that the input vector belongs to its predicted class.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodLogLikelihood(TInput, Double)
Computes the log-likelihood that the given input vectors belongs to each of the possible classes.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodLogLikelihood(TInput, Int32)
Computes the log-likelihood that the given input vector belongs to the specified classIndex.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodLogLikelihood(TInput, Int32)
Computes the log-likelihood that the given input vector belongs to the specified classIndex.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodLogLikelihood(TInput, Int32)
Predicts a class label for each input vector, returning the log-likelihood that each vector belongs to its predicted class.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodLogLikelihood(Double, Int32)
Computes the log-likelihood that the given input vector belongs to the specified classIndex.
(Overrides MulticlassLikelihoodClassifierBaseTInputLogLikelihood(TInput, Int32).)
Public methodLogLikelihood(TInput, Int32, Double)
Computes the log-likelihood that the given input vector belongs to the specified classIndex.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodLogLikelihood(TInput, Int32, Double)
Computes the log-likelihood that the given input vector belongs to the specified classIndex.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodLogLikelihood(TInput, Int32, Double)
Predicts a class label for each input vector, returning the log-likelihood that each vector belongs to its predicted class.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodLogLikelihoods(TInput)
Computes the log-likelihood that the given input vector belongs to each of the possible classes.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodLogLikelihoods(TInput)
Computes the log-likelihood that the given input vectors belongs to each of the possible classes.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodLogLikelihoods(TInput, Double)
Computes the log-likelihood that the given input vector belongs to each of the possible classes.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodLogLikelihoods(TInput, Int32)
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 MulticlassLikelihoodClassifierBaseTInput.)
Public methodLogLikelihoods(TInput, Double)
Computes the log-likelihood that the given input vector belongs to each of the possible classes.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodLogLikelihoods(TInput, Int32)
Computes the log-likelihood that the given input vector belongs to the specified classIndex.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodLogLikelihoods(TInput, Int32)
Predicts a class label vector for each input vector, returning the log-likelihoods of the input vector belonging to each possible class.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodLogLikelihoods(TInput, Int32, 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 MulticlassLikelihoodClassifierBaseTInput.)
Public methodLogLikelihoods(TInput, Int32, Double)
Computes the log-likelihood that the given input vector belongs to the specified classIndex.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodLogLikelihoods(TInput, Int32, 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 MulticlassLikelihoodClassifierBaseTInput.)
Public methodLogLikelihoods(Double, Int32, Double)
Predicts a class label vector for the given input vector, returning the log-likelihoods of the input vector belonging to each possible class.
(Overrides MulticlassLikelihoodClassifierBaseTInputLogLikelihoods(TInput, Int32, Double).)
Protected methodMemberwiseClone
Creates a shallow copy of the current Object.
(Inherited from Object.)
Public methodProbabilities(TInput)
Computes the probabilities that the given input vector belongs to each of the possible classes.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodProbabilities(TInput)
Computes the probabilities that the given input vector belongs to each of the possible classes.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodProbabilities(TInput, Double)
Computes the probabilities that the given input vector belongs to each of the possible classes.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodProbabilities(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.)
Public methodProbabilities(TInput, Double)
Computes the probabilities that the given input vector belongs to each of the possible classes.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodProbabilities(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.)
Public methodProbabilities(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.)
Public methodProbabilities(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.)
Public methodProbability(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.)
Public methodProbability(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.)
Public methodProbability(TInput, Int32)
Computes the probability that the given input vector belongs to the specified classIndex.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodProbability(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.)
Public methodProbability(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.)
Public methodProbability(TInput, Int32)
Computes the probability that the given input vector belongs to the specified classIndex.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodProbability(TInput, Int32)
Computes the probability that the given input vector belongs to the specified classIndex.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodProbability(TInput, Int32)
Predicts a class label for each input vector, returning the probability that each vector belongs to its predicted class.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodProbability(TInput, Int32, Double)
Computes the probability that the given input vector belongs to the specified classIndex.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodProbability(TInput, Int32, Double)
Computes the probability that the given input vector belongs to the specified classIndex.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodProbability(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.)
Public methodScore(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.)
Public methodScore(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.)
Public methodScore(TInput, Int32)
Computes a numerical score measuring the association between the given input vector and a given classIndex.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodScore(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.)
Public methodScore(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.)
Public methodScore(TInput, Int32)
Computes a numerical score measuring the association between the given input vector and a given classIndex.
(Inherited from MulticlassScoreClassifierBaseTInput.)
Public methodScore(TInput, Int32)
Computes a numerical score measuring the association between the given input vector and a given classIndex.
(Inherited from MulticlassScoreClassifierBaseTInput.)
Public methodScore(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.)
Public methodScore(TInput, Int32, Double)
Computes a numerical score measuring the association between the given input vector and a given classIndex.
(Inherited from MulticlassScoreClassifierBaseTInput.)
Public methodScore(TInput, Int32, Double)
Computes a numerical score measuring the association between the given input vector and a given classIndex.
(Inherited from MulticlassScoreClassifierBaseTInput.)
Public methodScore(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.)
Public methodScores(TInput)
Computes a numerical score measuring the association between the given input vector and each class.
(Inherited from MulticlassScoreClassifierBaseTInput.)
Public methodScores(TInput)
Computes a numerical score measuring the association between the given input vector and each class.
(Inherited from MulticlassScoreClassifierBaseTInput.)
Public methodScores(TInput, Double)
Computes a numerical score measuring the association between the given input vector and each class.
(Inherited from MulticlassScoreClassifierBaseTInput.)
Public methodScores(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.)
Public methodScores(TInput, Double)
Computes a numerical score measuring the association between the given input vector and each class.
(Inherited from MulticlassScoreClassifierBaseTInput.)
Public methodScores(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.)
Public methodScores(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.)
Public methodScores(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.)
Public methodToMulticlass
Views this instance as a multi-class generative classifier.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodToMultilabel
Views this instance as a multi-label generative classifier, giving access to more advanced methods, such as the prediction of one-hot vectors.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodToString
Returns a string that represents the current object.
(Inherited from Object.)
Public methodTransform(TInput)
Applies the transformation to an input, producing an associated output.
(Inherited from ClassifierBaseTInput, TClasses.)
Public methodTransform(TInput)
Applies the transformation to a set of input vectors, producing an associated set of output vectors.
(Inherited from TransformBaseTInput, TOutput.)
Public methodTransform(TInput, TClasses)
Applies the transformation to an input, producing an associated output.
(Inherited from ClassifierBaseTInput, TClasses.)
Public methodTransform(TInput, Boolean)
Applies the transformation to an input, producing an associated output.
(Inherited from MulticlassClassifierBaseTInput.)
Public methodTransform(TInput, Int32)
Applies the transformation to an input, producing an associated output.
(Inherited from MulticlassClassifierBaseTInput.)
Public methodTransform(TInput, Boolean)
Applies the transformation to an input, producing an associated output.
(Inherited from MulticlassClassifierBaseTInput.)
Public methodTransform(TInput, Double)
Applies the transformation to an input, producing an associated output.
(Inherited from MulticlassClassifierBaseTInput.)
Public methodTransform(TInput, Int32)
Applies the transformation to an input, producing an associated output.
(Inherited from MulticlassClassifierBaseTInput.)
Public methodTransform(TInput, Double)
Applies the transformation to an input, producing an associated output.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Public methodTransform(TInput, Double)
Applies the transformation to an input, producing an associated output.
(Inherited from MulticlassLikelihoodClassifierBaseTInput.)
Top
Extension Methods
  NameDescription
Public Extension MethodHasMethod
Checks whether an object implements a method with the given name.
(Defined by ExtensionMethods.)
Public Extension MethodIsEqual
Compares two objects for equality, performing an elementwise comparison if the elements are vectors or matrices.
(Defined by Matrix.)
Public Extension MethodTo(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.)
Public Extension MethodToTOverloaded.
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.)
Top
Examples

The default optimizer for MultinomialLogisticRegression is the LowerBoundNewtonRaphson class:

// Declare a very simple classification/regression
// problem with only 2 input variables (x and y):
double[][] inputs =
{
    new[] { 3.0, 1.0 },
    new[] { 7.0, 1.0 },
    new[] { 3.0, 1.1 },
    new[] { 3.0, 2.0 },
    new[] { 6.0, 1.0 },
};

// Class labels for each of the inputs
int[] outputs =
{
    0, 2, 0, 1, 2
};

// Create a estimation algorithm to estimate the regression
LowerBoundNewtonRaphson lbnr = new LowerBoundNewtonRaphson()
{
    MaxIterations = 100,
    Tolerance = 1e-6
};

// Now, we will iteratively estimate our model:
MultinomialLogisticRegression mlr = lbnr.Learn(inputs, outputs);

// We can compute the model answers
int[] answers = mlr.Decide(inputs);

// And also the probability of each of the answers
double[][] probabilities = mlr.Probabilities(inputs);

// Now we can check how good our model is at predicting
double error = new ZeroOneLoss(outputs).Loss(answers);

// We can also verify the classes with highest 
// probability are the ones being decided for:
int[] argmax = probabilities.ArgMax(dimension: 1); // should be same as 'answers

Additionally, the MultinomialLogisticLearningTMethod class allows multinomial logistic regression models to be learnt using any mathematical optimization algorithm that implements the IFunctionOptimizationMethodTInput, TOutput interface.

// Declare a simple classification/regression
// problem with 5 input variables (a,b,c,d,e):
double[][] inputs =
{
    new double[] { 1, 4, 2, 0, 1 },
    new double[] { 1, 3, 2, 0, 1 },
    new double[] { 3, 0, 1, 1, 1 },
    new double[] { 3, 0, 1, 0, 1 },
    new double[] { 0, 5, 5, 5, 5 },
    new double[] { 1, 5, 5, 5, 5 },
    new double[] { 1, 0, 0, 0, 0 },
    new double[] { 1, 0, 0, 0, 0 },
    new double[] { 2, 4, 2, 0, 1 },
    new double[] { 2, 4, 2, 0, 1 },
    new double[] { 2, 6, 2, 0, 1 },
    new double[] { 2, 7, 5, 0, 1 },
};

// Class labels for each of the inputs
int[] outputs =
{
    0, 0, 1, 1, 2, 2, 3, 3, 0, 0, 0, 0
};

Using Conjugate Gradient:

// Create a Conjugate Gradient algorithm to estimate the regression
var mcg = new MultinomialLogisticLearning<ConjugateGradient>();

// Now, we can estimate our model using Conjugate Gradient
MultinomialLogisticRegression mlr = mcg.Learn(inputs, outputs);

// We can compute the model answers
int[] answers = mlr.Decide(inputs);

// And also the probability of each of the answers
double[][] probabilities = mlr.Probabilities(inputs);

// Now we can check how good our model is at predicting
double error = new ZeroOneLoss(outputs).Loss(answers);

Using Gradient Descent:

// Create a Conjugate Gradient algorithm to estimate the regression
var mgd = new MultinomialLogisticLearning<GradientDescent>();

// Now, we can estimate our model using Gradient Descent
MultinomialLogisticRegression mlr = mgd.Learn(inputs, outputs);

// We can compute the model answers
int[] answers = mlr.Decide(inputs);

// And also the probability of each of the answers
double[][] probabilities = mlr.Probabilities(inputs);

// Now we can check how good our model is at predicting
double error = new ZeroOneLoss(outputs).Loss(answers);

Using BFGS:

// Create a Conjugate Gradient algorithm to estimate the regression
var mlbfgs = new MultinomialLogisticLearning<BroydenFletcherGoldfarbShanno>();

// Now, we can estimate our model using BFGS
MultinomialLogisticRegression mlr = mlbfgs.Learn(inputs, outputs);

// We can compute the model answers
int[] answers = mlr.Decide(inputs);

// And also the probability of each of the answers
double[][] probabilities = mlr.Probabilities(inputs);

// Now we can check how good our model is at predicting
double error = new ZeroOneLoss(outputs).Loss(answers);
See Also