function initmemberships = gaussian_mixture_initialize(data,K,kseed,option); % function initmemberships = gaussian_mixture_initialize(data,K,kseed,option); % % Initialize the parameters for a mixture model for Gaussian mixtures. % % INPUTS % data: N x d real-valued data matrix % K = number of components % kseed = random seed (integer) % option: 1 for kmeans, 2 for random memberships % % OUTPUTS % initimemberships: n x k array of component memberships (rows sum to 1) % % % Padhraic Smyth, CS 274A, Winter 2009 % Ideally need to add some error-checking here.... [n d] = size(data); if option==1 % Use kmeans to estimate initial class means (stored in mu, a k x d array) [cluster,mu,kseed] = kmeans(data,K,kseed); initmemberships = zeros(n,d); for i=1:n initmemberships(i,cluster(i))=1; end elseif option==2 % start with random memberships for each row in the % data matrix, and then call the Mstep to provide % initial parameter estimates given these memberships rand('state',kseed); tmp = rand(n,K); initmemberships = tmp./repmat(sum(tmp')',1,K); else error('Option parameter = %d, should be either 1 or 2',option); end