wolffd@0: function [mu, Sigma] = mixgaussTrainObserved(obsData, hiddenData, nstates, varargin); wolffd@0: % mixgaussTrainObserved Max likelihood estimates of conditional Gaussian from raw data wolffd@0: % function [mu, Sigma] = mixgaussTrainObserved(obsData, hiddenData, nstates, ...); wolffd@0: % wolffd@0: % Input: wolffd@0: % obsData(:,i) wolffd@0: % hiddenData(i) - this is the mixture component label for example i wolffd@0: % Optional arguments - same as mixgauss_Mstep wolffd@0: % wolffd@0: % Output: wolffd@0: % mu(:,q) wolffd@0: % Sigma(:,:,q) - same as mixgauss_Mstep wolffd@0: wolffd@0: [D numex] = size(obsData); wolffd@0: Y = zeros(D, nstates); wolffd@0: YY = zeros(D,D,nstates); wolffd@0: YTY = zeros(nstates,1); wolffd@0: w = zeros(nstates, 1); wolffd@0: for q=1:nstates wolffd@0: ndx = find(hiddenData==q); wolffd@0: w(q) = length(ndx); % each data point has probability 1 of being in this cluster wolffd@0: data = obsData(:,ndx); wolffd@0: Y(:,q) = sum(data,2); wolffd@0: YY(:,:,q) = data*data'; wolffd@0: YTY(q) = sum(diag(data'*data)); wolffd@0: end wolffd@0: [mu, Sigma] = mixgauss_Mstep(w, Y, YY, YTY, varargin{:});