public class LDA extends java.lang.Object implements SoftClassifier<double[]>
LDA is closely related to ANOVA (analysis of variance) and linear regression analysis, which also attempt to express one dependent variable as a linear combination of other features or measurements. In the other two methods, however, the dependent variable is a numerical quantity, while for LDA it is a categorical variable (i.e. the class label). Logistic regression and probit regression are more similar to LDA, as they also explain a categorical variable. These other methods are preferable in applications where it is not reasonable to assume that the independent variables are normally distributed, which is a fundamental assumption of the LDA method.
One complication in applying LDA (and Fisher's discriminant) to real data occurs when the number of variables/features does not exceed the number of samples. In this case, the covariance estimates do not have full rank, and so cannot be inverted. This is known as small sample size problem.
FLD
,
QDA
,
RDA
,
NaiveBayes
,
Serialized FormModifier and Type | Class and Description |
---|---|
static class |
LDA.Trainer
Trainer for linear discriminant analysis.
|
Constructor and Description |
---|
LDA(double[][] x,
int[] y)
Constructor.
|
LDA(double[][] x,
int[] y,
double tol)
Constructor.
|
LDA(double[][] x,
int[] y,
double[] priori)
Constructor.
|
LDA(double[][] x,
int[] y,
double[] priori,
double tol)
Constructor.
|
Modifier and Type | Method and Description |
---|---|
double[] |
getPriori()
Returns a priori probabilities.
|
int |
predict(double[] x)
Predicts the class label of an instance.
|
int |
predict(double[] x,
double[] posteriori)
Predicts the class label of an instance and also calculate a posteriori
probabilities.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
predict
public LDA(double[][] x, int[] y)
x
- training samples.y
- training labels in [0, k), where k is the number of classes.public LDA(double[][] x, int[] y, double[] priori)
x
- training samples.y
- training labels in [0, k), where k is the number of classes.priori
- the priori probability of each class.public LDA(double[][] x, int[] y, double tol)
x
- training samples.y
- training labels in [0, k), where k is the number of classes.tol
- a tolerance to decide if a covariance matrix is singular; it
will reject variables whose variance is less than tol2.public LDA(double[][] x, int[] y, double[] priori, double tol)
x
- training samples.y
- training labels in [0, k), where k is the number of classes.priori
- the priori probability of each class. If null, it will be
estimated from the training data.tol
- a tolerance to decide if a covariance matrix is singular; it
will reject variables whose variance is less than tol2.public double[] getPriori()
public int predict(double[] x)
Classifier
predict
in interface Classifier<double[]>
x
- the instance to be classified.public int predict(double[] x, double[] posteriori)
SoftClassifier
predict
in interface SoftClassifier<double[]>
x
- the instance to be classified.posteriori
- the array to store a posteriori probabilities on output.