Package elki.clustering.em.models
Class TextbookMultivariateGaussianModel
- java.lang.Object
-
- elki.clustering.em.models.TextbookMultivariateGaussianModel
-
- All Implemented Interfaces:
EMClusterModel<NumberVector,EMModel>
public class TextbookMultivariateGaussianModel extends java.lang.Object implements EMClusterModel<NumberVector,EMModel>
Numerically problematic implementation of the GMM model, using the textbook algorithm. There is no reason to use this in practice, it is only useful to study the reliability of the textbook approach."Textbook" refers to the E[XY]-E[X]E[Y] equation for covariance, that is numerically not reliable with floating point math, but popular in textbooks.
Again, do not use this. Always prefer
MultivariateGaussianModel
.- Since:
- 0.7.5
- Author:
- Erich Schubert
-
-
Field Summary
Fields Modifier and Type Field Description (package private) CholeskyDecomposition
chol
Decomposition of covariance matrix.(package private) double[][]
covariance
Covariance matrix.(package private) double
logNorm
Normalization factor.(package private) double
logNormDet
Normalization factor.(package private) double[]
mean
Mean vector.(package private) double[][]
priormatrix
Matrix for prior conditioning.(package private) double[]
tmp
Temporary storage, to avoid reallocations.(package private) double
weight
Weight aggregation sum.(package private) double
wsum
Weight aggregation sum.
-
Constructor Summary
Constructors Constructor Description TextbookMultivariateGaussianModel(double weight, double[] mean)
Constructor.TextbookMultivariateGaussianModel(double weight, double[] mean, double[][] covariance)
Constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
beginEStep()
Begin the E step.void
calculateModelLimits(double[] min, double[] max, ConstrainedQuadraticProblemSolver solver, double ipiPow, double[] minpnt, double[] maxpnt, double[] ret)
Compute the weight of a Gaussian with respect to a bounding box.void
clone(TextbookMultivariateGaussianModel other)
Copy the parameters of another model.double
estimateLogDensity(NumberVector vec)
Estimate the log likelihood of a vector.EMModel
finalizeCluster()
Finalize a cluster model.void
finalizeEStep(double weight, double prior)
Finalize the E step.double
getWeight()
Get the cluster weight.double
mahalanobisDistance(NumberVector vec)
Compute the Mahalanobis distance from the centroid for a given vector.void
setWeight(double weight)
Set the cluster weight.void
updateE(double[] vec, double[][] covm, double sca, double wei)
Add a set of points with covariance information, forKDTreeEM
.void
updateE(NumberVector vec, double wei)
Process one data point in the E step-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface elki.clustering.em.models.EMClusterModel
finalizeFirstPassE, firstPassE, needsTwoPass
-
-
-
-
Field Detail
-
mean
double[] mean
Mean vector.
-
covariance
double[][] covariance
Covariance matrix.
-
chol
CholeskyDecomposition chol
Decomposition of covariance matrix.
-
tmp
double[] tmp
Temporary storage, to avoid reallocations.
-
logNorm
double logNorm
Normalization factor.
-
logNormDet
double logNormDet
Normalization factor.
-
weight
double weight
Weight aggregation sum.
-
wsum
double wsum
Weight aggregation sum.
-
priormatrix
double[][] priormatrix
Matrix for prior conditioning.
-
-
Constructor Detail
-
TextbookMultivariateGaussianModel
public TextbookMultivariateGaussianModel(double weight, double[] mean)
Constructor.- Parameters:
weight
- Cluster weightmean
- Initial mean
-
TextbookMultivariateGaussianModel
public TextbookMultivariateGaussianModel(double weight, double[] mean, double[][] covariance)
Constructor.- Parameters:
weight
- Cluster weightmean
- Initial meancovariance
- initial covariance matrix
-
-
Method Detail
-
beginEStep
public void beginEStep()
Description copied from interface:EMClusterModel
Begin the E step.- Specified by:
beginEStep
in interfaceEMClusterModel<NumberVector,EMModel>
-
updateE
public void updateE(NumberVector vec, double wei)
Description copied from interface:EMClusterModel
Process one data point in the E step- Specified by:
updateE
in interfaceEMClusterModel<NumberVector,EMModel>
- Parameters:
vec
- Vector to processwei
- Weight of point ("responsibility" of the cluster)
-
updateE
public void updateE(double[] vec, double[][] covm, double sca, double wei)
Add a set of points with covariance information, forKDTreeEM
.- Parameters:
vec
- sum of new pointscovm
- sum of codeviatessca
- scaling factor applied to vec and covm instead of weiwei
- weight sum contribution
-
finalizeEStep
public void finalizeEStep(double weight, double prior)
Description copied from interface:EMClusterModel
Finalize the E step.- Specified by:
finalizeEStep
in interfaceEMClusterModel<NumberVector,EMModel>
- Parameters:
weight
- weight of the clusterprior
- MAP prior (0 for MLE)
-
mahalanobisDistance
public double mahalanobisDistance(NumberVector vec)
Compute the Mahalanobis distance from the centroid for a given vector.- Parameters:
vec
- Vector- Returns:
- Mahalanobis distance
-
estimateLogDensity
public double estimateLogDensity(NumberVector vec)
Description copied from interface:EMClusterModel
Estimate the log likelihood of a vector.- Specified by:
estimateLogDensity
in interfaceEMClusterModel<NumberVector,EMModel>
- Parameters:
vec
- Vector- Returns:
- log likelihood.
-
getWeight
public double getWeight()
Description copied from interface:EMClusterModel
Get the cluster weight.- Specified by:
getWeight
in interfaceEMClusterModel<NumberVector,EMModel>
- Returns:
- Cluster weight
-
setWeight
public void setWeight(double weight)
Description copied from interface:EMClusterModel
Set the cluster weight.- Specified by:
setWeight
in interfaceEMClusterModel<NumberVector,EMModel>
- Parameters:
weight
- Cluster weight
-
finalizeCluster
public EMModel finalizeCluster()
Description copied from interface:EMClusterModel
Finalize a cluster model.- Specified by:
finalizeCluster
in interfaceEMClusterModel<NumberVector,EMModel>
- Returns:
- Cluster model
-
clone
public void clone(TextbookMultivariateGaussianModel other)
Copy the parameters of another model.- Parameters:
other
- Other
-
calculateModelLimits
public void calculateModelLimits(double[] min, double[] max, ConstrainedQuadraticProblemSolver solver, double ipiPow, double[] minpnt, double[] maxpnt, double[] ret)
Compute the weight of a Gaussian with respect to a bounding box.- Parameters:
min
- Bounding box min will be modifiedmax
- Bounding box max will be modifiedsolver
- Quadratic solveripiPow
- scaling constantminpnt
- result array for argminmaxpnt
- result array for argmaxret
- Return array
-
-