This is a function tries to obtain the maximum likelihood estimation of Gaussian mixture model by expectation maximization (EM) algorithm.
It works on data set of arbitrary dimensions. Several techniques are applied to avoid the float number underflow problems that often occurs when computing probability of high dimensional data. Also the code is carefully tuned to be efficient by utilizing vertorization and matrix factorization.
This is a widely used algorithm. The detail of this algorithm can be found in many textbooks or tutorials online. Just google EM Gaussian Mixture or you can read the wiki page:
This function is robust and efficient yet the code structure is organized so that it is easy to read. Please try following code for a demo:
close all; clear;
d = 2;
k = 3;
n = 500;
[X,label] = mixGaussRnd(d,k,n);
m = floor(n/2);
X1 = X(:,1:m);
X2 = X(:,(m+1):end);
[z1,model,llh] = mixGaussEm(X1,k);
z2 = mixGaussPred(X2,model);
Besides using EM to fit GMM, I highly recommend you to try another submission of mine: Variational Bayesian Inference for Gaussian Mixture Model
(http://www.mathworks.com/matlabcentral/fileexchange/35362-variational-bayesian-inference-for-gaussian-mixture-model) which perform Bayesian inference on GMM. It has the advantage that the number of mixture components can be automatically identified by the algorithm.
Upon request, I provided a prediction function for out-of-sample inference.
This function is now a part of the PRML toolbox (http://www.mathworks.com/matlabcentral/fileexchange/55826-pattern-recognition-and-machine-learning-toolbox)