How to initialize the parameter mu to zero of a Gaussian Mixture model ?

15 vues (au cours des 30 derniers jours)
X = mat_cell;
[counts,binLocations] = imhist(X);
stem(binLocations, counts, 'MarkerSize', 1 );
xlim([-1 1]);
% inital kmeans step used to initialize EM
K = 2; % number of mixtures/clusters
rng('default');
cInd = kmeans(X(:), K,'MaxIter', 75536);
% fit a GMM model
options = statset('MaxIter', 75536);
gmm = fitgmdist(X(:), K,'Start',cInd,'CovarianceType','diagonal','Regularize',1e-5,'Options',options);
Here X is the input matrix and I would like to initialize only the sigma parameter of the GMM to zero. How can i proceed?

Réponse acceptée

Richard Marveldoss
Richard Marveldoss le 7 Juil 2017
I see that you have used the 'Start' argument to initialize your Gaussian Mixture model. Instead of using 'Start' with an array that contains mapping of the observation to its label in which case you cannot specify mu and sigma as they are computed from the result of kmeans operation. You can try to explicitly specify the mu and sigma parameter by using a structure whose field elements are mu and sigma. Also, the documentation for the fitgmdist contains an example where the mu and sigma are initialized manually. Link to the documentation: https://www.mathworks.com/help/stats/fitgmdist.html. Additionally, I have attached an example code based on your code to get you started where I have assumed a random dataset for X.
dataLength = 5000;
muData = [5 30];
stdData = [4 10];
X = [muData(1) + stdData(1)*randn(dataLength/2,1); muData(2) + stdData(2)*randn(dataLength/2,1)];
[counts,binLocations] = imhist(X);
stem(binLocations, counts, 'MarkerSize', 1 );
xlim([-1 1]);
% inital kmeans step used to initialize EM
K = 2; % number of mixtures/clusters
rng('default');
[~,cInd.mu] = kmeans(X(:), K,'MaxIter', 75536);
% fit a GMM model
gmInitialVariance = 0.1;
initialSigma = cat(3,gmInitialVariance,gmInitialVariance)
% cInd.mu=[0;0]; %%if you want to initialize the mu parameter to 0.
cInd.Sigma=initialSigma;
options = statset('MaxIter', 75536);
gmm = fitgmdist(X(:), K,'Start',cInd,'CovarianceType','diagonal','Regularize',1e-5,'Options',options);
  1 commentaire
A. P. B.
A. P. B. le 8 Juil 2017
This is for univariate gaussian distribution?? How can it be done for multivariate gaussian distribution

Connectez-vous pour commenter.

Plus de réponses (1)

Richard Marveldoss
Richard Marveldoss le 12 Juil 2017
For a multivariate Gaussian distribution, the manner in which you construct your input datasets will vary. For example ,the below documentation contains a example where a dataset is generated using two bivariate Gaussian distribution. https://www.mathworks.com/help/stats/fitgmdist.html#examples

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by