⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hmminit.m

📁 hmm的matlab原码和hmm相关资料
💻 M
字号:
function [hmm] = hmminit (X,hmm,covtype,gamma)% function [hmm] = hmminit (X,hmm,covtype,gamma)%% Initialise Gaussian observation HMM model % using a static Gaussian Mixture Model (using NetLab routines)%% X		N x p data matrix% hmm		hmm data structure% covtype	'full' or 'diag' covariance matrices% gamma		weighting of each of N data points %		(default is 1 for each data point)N=size(X,1);if nargin < 4 | isempty(gamma), gamma=ones(N,1); endp=size(X,2);mix=gmm(p,hmm.K,covtype);options=foptions;options(14) = 5; % Just use 5 iterations of k-means initialisationmix = gmminit(mix, X, options);options = zeros(1, 18);options(1)  = 0;                % Prints out error values.% Termination criteriaoptions(3) = 0.000001;          % tolerance in likelihoodoptions(14) = 100;              % Max. Number of iterations.% Reset cov matrix if singular values become too smalloptions(5)=1;              [mix, options, errlog] = wgmmem(mix, X, gamma,options);hmm.gmmll=options(8);     % Log likelihood of gmm modelfor k=1:mix.ncentres;  hmm.state(k).Mu=mix.centres(k,:);  switch covtype    case 'full',      hmm.state(k).Cov=squeeze(mix.covars(:,:,k));      hmm.init_val(k).Cov = hmm.state(k).Cov; % In case we need to re-init    case 'diag',      hmm.state(k).Cov=diag(mix.covars(k,:));      hmm.init_val(k).Cov = hmm.state(k).Cov; % In case we need to re-init    otherwise,            disp('Unknown type of covariance matrix');    endendhmm.train.init='gmm';hmm.mix=mix;% Setting of default priorsrange=max(X)-min(X);S=diag(cov(X))/100;			% educated guess with scalingdefhmmpriors=struct('Dir2d_alpha',ones(hmm.K),'Dir_alpha',ones(1,hmm.K));defstatepriors=struct('Norm_Mu',range,'Norm_Cov',diag(range.^2),...		      'Norm_Prec',diag(range.^(-2)),'Wish_B',diag(S),...		      'Wish_alpha',ceil(p/2),'Wish_k',p);% assigning default priors for hidden statesif ~isfield(hmm,'priors'),  hmm.priors=defhmmpriors;else  % priors not specified are set to default  hmmpriorlist=fieldnames(defhmmpriors);  fldname=fieldnames(hmm.priors);  misfldname=find(~ismember(hmmpriorlist,fldname));  for i=1:length(misfldname),    priorval=getfield(defhmmpriors,hmmpriorlist{i});    hmm.priors=setfield(hmm.priors,hmmpriorlist{i},priorval);  end;end;% assigning default priors for observation modelsif ~isfield(hmm.state,'priors'),  for j=1:hmm.K,    hmm.state(j).priors=defstatepriors;  end;else  % priors not specified are set to default  statepriorlist=fieldnames(defstatepriors)  fldname=fieldnames(hmm.priors.state);  misfldname=find(~ismember(statepriorlist,fldname));  for j=1:hmm.K,    for i=1:length(misfldname),      priorval=getfield(defstatepriors,statepriorlist{i});      hmm.state.priors=setfield(hmm.state,j,'priors',statepriorlist{i},priorval);    end;  end;end;      

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -