Class TextbookMultivariateGaussianModel

  • All Implemented Interfaces:
    EMClusterModel<elki.data.NumberVector,​EMModel>

    public class TextbookMultivariateGaussianModel
    extends java.lang.Object
    implements EMClusterModel<elki.data.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) elki.math.linearalgebra.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.
    • 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, elki.math.linearalgebra.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​(elki.data.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​(elki.data.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​(elki.data.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
    • Field Detail

      • mean

        double[] mean
        Mean vector.
      • covariance

        double[][] covariance
        Covariance matrix.
      • chol

        elki.math.linearalgebra.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

      • updateE

        public void updateE​(elki.data.NumberVector vec,
                            double wei)
        Description copied from interface: EMClusterModel
        Process one data point in the E step
        Specified by:
        updateE in interface EMClusterModel<elki.data.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<elki.data.NumberVector,​EMModel>
        Parameters:
        weight - weight of the cluster
        prior - MAP prior (0 for MLE)
      • mahalanobisDistance

        public double mahalanobisDistance​(elki.data.NumberVector vec)
        Compute the Mahalanobis distance from the centroid for a given vector.
        Parameters:
        vec - Vector
        Returns:
        Mahalanobis distance
      • estimateLogDensity

        public double estimateLogDensity​(elki.data.NumberVector vec)
        Description copied from interface: EMClusterModel
        Estimate the log likelihood of a vector.
        Specified by:
        estimateLogDensity in interface EMClusterModel<elki.data.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<elki.data.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<elki.data.NumberVector,​EMModel>
        Parameters:
        weight - Cluster weight
      • calculateModelLimits

        public void calculateModelLimits​(double[] min,
                                         double[] max,
                                         elki.math.linearalgebra.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