www.pudn.com > HMM1.zip > condgaussTrainObserved.m


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