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

📄 emgmm.html

📁 用matlab实现的统计模式识别工具箱
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<span class=keyword>if</span>&nbsp;~isfield(&nbsp;options,&nbsp;<span class=quotes>'init'</span>),&nbsp;options.init&nbsp;=&nbsp;<span class=quotes>'random'</span>;&nbsp;<span class=keyword>end</span><br><span class=keyword>if</span>&nbsp;~isfield(&nbsp;options,&nbsp;<span class=quotes>'verb'</span>),&nbsp;options.verb&nbsp;=&nbsp;0;&nbsp;<span class=keyword>end</span><br><br>[dim,num_data]&nbsp;=&nbsp;size(X);<br><br><span class=comment>%&nbsp;setup&nbsp;initial&nbsp;model&nbsp;</span><br><span class=comment>%&nbsp;---------------------------------</span><br><br><span class=keyword>if</span>&nbsp;<span class=stack>nargin</span>&nbsp;==&nbsp;3,<br><br>&nbsp;&nbsp;<span class=comment>%&nbsp;take&nbsp;model&nbsp;from&nbsp;input</span><br>&nbsp;&nbsp;<span class=comment>%-----------------------------</span><br><br>&nbsp;&nbsp;model&nbsp;=&nbsp;init_model;&nbsp;<br>&nbsp;&nbsp;<span class=keyword>if</span>&nbsp;~isfield(model,<span class=quotes>'t'</span>),&nbsp;model.t&nbsp;=&nbsp;0;&nbsp;<span class=keyword>end</span><br>&nbsp;&nbsp;<span class=keyword>if</span>&nbsp;~isfield(model,<span class=quotes>'Alpha'</span>),&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;model.Alpha=-inf*ones(options.num_gauss,num_data);<br>&nbsp;&nbsp;<span class=keyword>end</span><br>&nbsp;&nbsp;<span class=keyword>if</span>&nbsp;~isfield(model,<span class=quotes>'logL'</span>),&nbsp;model.logL=-inf;&nbsp;<span class=keyword>end</span><br><span class=keyword>else</span><br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<span class=comment>%&nbsp;compute&nbsp;initial&nbsp;model</span><br>&nbsp;&nbsp;<span class=comment>%------------------------------------</span><br>&nbsp;&nbsp;<span class=keyword>switch</span>&nbsp;options.init,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class=comment>%&nbsp;random&nbsp;model</span><br>&nbsp;&nbsp;&nbsp;&nbsp;<span class=label>case</span>&nbsp;<span class=quotes>'random'</span>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=comment>%&nbsp;takes&nbsp;randomly&nbsp;first&nbsp;num_gauss&nbsp;trn.&nbsp;vectors&nbsp;as&nbsp;mean&nbsp;vectors</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inx&nbsp;=&nbsp;randperm(num_data);&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inx=inx(1:options.ncomp);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centers_X&nbsp;=&nbsp;X(:,inx);<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class=comment>%&nbsp;K-means&nbsp;clustering</span><br>&nbsp;&nbsp;&nbsp;&nbsp;<span class=label>case</span>&nbsp;<span class=quotes>'kmeans'</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;=&nbsp;kmeans(&nbsp;X,&nbsp;options.ncomp&nbsp;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;centers_X&nbsp;=&nbsp;tmp.X;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;<span class=label>otherwise</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=error>error</span>(<span class=quotes>'Unknown&nbsp;initialization&nbsp;method.'</span>);<br>&nbsp;&nbsp;<span class=keyword>end</span><br><br>&nbsp;&nbsp;knn&nbsp;=&nbsp;knnrule({<span class=quotes>'X'</span>,centers_X,<span class=quotes>'y'</span>,[1:options.ncomp]},1);<br>&nbsp;&nbsp;y&nbsp;=&nbsp;knnclass(X,knn);<br><br>&nbsp;&nbsp;<span class=comment>%&nbsp;uses&nbsp;ML&nbsp;estimation&nbsp;of&nbsp;complete&nbsp;data</span><br>&nbsp;&nbsp;model&nbsp;=&nbsp;mlcgmm(&nbsp;{<span class=quotes>'X'</span>,X,<span class=quotes>'y'</span>,y},&nbsp;options.cov_type&nbsp;);<br><br>&nbsp;&nbsp;model.Alpha&nbsp;=&nbsp;zeros(options.ncomp,num_data);<br>&nbsp;&nbsp;<span class=keyword>for</span>&nbsp;i&nbsp;=&nbsp;1:options.ncomp,<br>&nbsp;&nbsp;&nbsp;&nbsp;model.Alpha(i,find(y==i))&nbsp;=&nbsp;1;<br>&nbsp;&nbsp;<span class=keyword>end</span><br>&nbsp;&nbsp;model.logL=&nbsp;-inf;<br>&nbsp;&nbsp;model.t&nbsp;=&nbsp;1;<br>&nbsp;&nbsp;model.options&nbsp;=&nbsp;options;<br>&nbsp;&nbsp;model.fun&nbsp;=&nbsp;<span class=quotes>'pdfgmm'</span>;<br>&nbsp;&nbsp;<br><span class=keyword>end</span><br><br><br><span class=comment>%&nbsp;Main&nbsp;loop&nbsp;of&nbsp;EM&nbsp;algorithm&nbsp;</span><br><span class=comment>%&nbsp;-------------------------------------</span><br>model.exitflag&nbsp;=&nbsp;0;<br><span class=keyword>while</span>&nbsp;model.exitflag&nbsp;==&nbsp;0&nbsp;&&nbsp;model.t&nbsp;&lt;&nbsp;options.tmax,<br><br>&nbsp;&nbsp;<span class=comment>%&nbsp;counter&nbsp;of&nbsp;iterations</span><br>&nbsp;&nbsp;model.t&nbsp;=&nbsp;model.t&nbsp;+&nbsp;1;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<span class=comment>%----------------------------------------------------</span><br>&nbsp;&nbsp;<span class=comment>%&nbsp;E-Step</span><br>&nbsp;&nbsp;<span class=comment>%&nbsp;The&nbsp;distribution&nbsp;of&nbsp;hidden&nbsp;states&nbsp;is&nbsp;computed&nbsp;based</span><br>&nbsp;&nbsp;<span class=comment>%&nbsp;on&nbsp;the&nbsp;current&nbsp;estimate.</span><br>&nbsp;&nbsp;<span class=comment>%----------------------------------------------------</span><br><br>&nbsp;&nbsp;newAlpha&nbsp;=&nbsp;(model.Prior(:)*ones(1,num_data)).*pdfgauss(X,&nbsp;model);<br>&nbsp;&nbsp;newLogL&nbsp;=&nbsp;sum(log(sum(newAlpha,1)));&nbsp;&nbsp;<br>&nbsp;&nbsp;newAlpha&nbsp;=&nbsp;newAlpha./(ones(options.ncomp,1)*sum(newAlpha,1));<br><br>&nbsp;&nbsp;<span class=comment>%------------------------------------------------------</span><br>&nbsp;&nbsp;<span class=comment>%&nbsp;Stopping&nbsp;conditions.</span><br>&nbsp;&nbsp;<span class=comment>%------------------------------------------------------</span><br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<span class=comment>%&nbsp;1)&nbsp;change&nbsp;in&nbsp;distribution&nbsp;of&nbsp;hidden&nbsp;state&nbsp;Alpha</span><br>&nbsp;&nbsp;model.delta_alpha&nbsp;=&nbsp;sum(sum((model.Alpha&nbsp;-&nbsp;newAlpha).^2));<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<span class=comment>%&nbsp;2)&nbsp;change&nbsp;in&nbsp;log-Likelihood</span><br>&nbsp;&nbsp;model.delta_logL&nbsp;=&nbsp;newLogL&nbsp;-&nbsp;model.logL(<span class=keyword>end</span>);<br>&nbsp;&nbsp;model.logL&nbsp;=&nbsp;[model.logL&nbsp;newLogL];<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<span class=keyword>if</span>&nbsp;options.verb,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class=io>fprintf</span>(<span class=quotes>'%d:&nbsp;logL=%f,&nbsp;delta_logL=%f,&nbsp;delta_alpha=%f\n'</span>,...<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;model.t,&nbsp;model.logL(<span class=keyword>end</span>),&nbsp;model.delta_logL,&nbsp;model.delta_alpha&nbsp;);<br>&nbsp;&nbsp;<span class=keyword>end</span><br><br>&nbsp;&nbsp;<span class=keyword>if</span>&nbsp;options.eps_logL&nbsp;&gt;=&nbsp;model.delta_logL,<br>&nbsp;&nbsp;&nbsp;&nbsp;model.exitflag&nbsp;=&nbsp;1;<br>&nbsp;&nbsp;<span class=keyword>elseif</span>&nbsp;options.eps_alpha&nbsp;&gt;=&nbsp;model.delta_alpha,<br>&nbsp;&nbsp;&nbsp;&nbsp;model.exitflag&nbsp;=&nbsp;2;<br>&nbsp;&nbsp;<span class=keyword>else</span><br><br>&nbsp;&nbsp;&nbsp;&nbsp;model.Alpha&nbsp;=&nbsp;newAlpha;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class=comment>%----------------------------------------------------</span><br>&nbsp;&nbsp;&nbsp;&nbsp;<span class=comment>%&nbsp;M-Step</span><br>&nbsp;&nbsp;&nbsp;&nbsp;<span class=comment>%&nbsp;The&nbsp;new&nbsp;parameters&nbsp;maximizing&nbsp;expectation&nbsp;of&nbsp;</span><br>&nbsp;&nbsp;&nbsp;&nbsp;<span class=comment>%&nbsp;log-likelihood&nbsp;are&nbsp;computed.</span><br>&nbsp;&nbsp;&nbsp;&nbsp;<span class=comment>%----------------------------------------------------</span><br><br>&nbsp;&nbsp;&nbsp;&nbsp;tmp_model&nbsp;=&nbsp;melgmm(X,model.Alpha,options.cov_type);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;model.Mean&nbsp;=&nbsp;tmp_model.Mean;<br>&nbsp;&nbsp;&nbsp;&nbsp;model.Cov&nbsp;=&nbsp;tmp_model.Cov;<br>&nbsp;&nbsp;&nbsp;&nbsp;model.Prior&nbsp;=&nbsp;tmp_model.Prior;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<span class=keyword>end</span><br><span class=keyword>end</span>&nbsp;<span class=comment>%&nbsp;while&nbsp;main&nbsp;loop</span><br><br><span class=jump>return</span>;<br><br><br></code>

⌨️ 快捷键说明

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