## 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
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, for KDTreeEM.
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 weight
mean - Initial mean
• #### TextbookMultivariateGaussianModel

public TextbookMultivariateGaussianModel​(double weight,
double[] mean,
double[][] covariance)
Constructor.
Parameters:
weight - Cluster weight
mean - Initial mean
covariance - initial covariance matrix
• ### Method Detail

• #### beginEStep

public void beginEStep()
Description copied from interface: EMClusterModel
Begin the E step.
Specified by:
beginEStep in interface EMClusterModel<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 interface EMClusterModel<NumberVector,​EMModel>
Parameters:
vec - Vector to process
wei - 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, for KDTreeEM.
Parameters:
vec - sum of new points
covm - sum of codeviates
sca - scaling factor applied to vec and covm instead of wei
wei - weight sum contribution
• #### finalizeEStep

public void finalizeEStep​(double weight,
double prior)
Description copied from interface: EMClusterModel
Finalize the E step.
Specified by:
finalizeEStep in interface EMClusterModel<NumberVector,​EMModel>
Parameters:
weight - weight of the cluster
prior - 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 interface EMClusterModel<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 interface EMClusterModel<NumberVector,​EMModel>
Returns:
Cluster weight
• #### setWeight

public void setWeight​(double weight)
Description copied from interface: EMClusterModel
Set the cluster weight.
Specified by:
setWeight in interface EMClusterModel<NumberVector,​EMModel>
Parameters:
weight - Cluster weight
• #### finalizeCluster

public EMModel finalizeCluster()
Description copied from interface: EMClusterModel
Finalize a cluster model.
Specified by:
finalizeCluster in interface EMClusterModel<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 modified
max - Bounding box max will be modified
solver - Quadratic solver
ipiPow - scaling constant
minpnt - result array for argmin
maxpnt - result array for argmax
ret - Return array