/// <summary> /// Divides the input data into K clusters modeling each /// cluster as a multivariate Gaussian distribution. /// </summary> public double Compute(double[][] data, GaussianMixtureModelOptions options) { if (data == null) { throw new ArgumentNullException("data"); } int components = this.clusters.Count; if (model == null) { // TODO: Perform K-Means multiple times to avoid // a poor Gaussian Mixture model initialization. double error = Initialize(data, options.Threshold); } // Fit a multivariate Gaussian distribution var mixtureOptions = new MixtureOptions() { Threshold = options.Threshold, InnerOptions = options.NormalOptions, }; model.Fit(data, mixtureOptions); // Return the log-likelihood as a measure of goodness-of-fit return(model.LogLikelihood(data)); }