1、3.3 M-step计算重新估计参数,包括均值、方差、混合系数并且估计此参数下的期望值。3.4 收敛性判断将新的与旧的值进行比较,并与设置的阈值进行对比,判断迭代是否结束,若不符合条件,则返回到3.2,重新进行下面步骤,直到最后收敛才结束。四、 算法的流程图五、 实验结果a_best= 0.8022 0.1978mu_best= 2.7148 3.9307 4.9882 3.0102cov_best= (:,:,1) = 5.4082 -0.0693 -0.0693 0.2184(:,2) = 0.0858 -0.0177 -0.0177 0.0769f= -1.6323数据X的分布每次迭代期
2、望值利用EM估计的参量值与真实值比较(红色:真实值 青绿色:估计值)六、 参考文献1. M. Jordan. Pattern Recognition And Machine Learning2. Xiao Han. EM Algorithm七、 附录close all;clear;clc;% 参考书籍Pattern.Recognition.and.Machine.Learning.pdf% http:/www.pr-% lwmpr-% 2009/10/15% M=2; % number of GaussianN=200; % total number of data samplesth=0.0
3、00001; % convergent thresholdK=2; % demention of output signal% 待生成数据的参数a_real =4/5;1/5;mu_real=3 4; 5 3;cov_real(:,1)=5 0; 0 0.2;,2)=0.1 0; 0 0.1;% generate the datax= mvnrnd( mu_real(:,1) , cov_real(:,1) , round(N*a_real(1) ) , mvnrnd(mu_real(:,2),cov_real(:,2),N-round(N*a_real(1);% for i=1:round(
4、N*a_real(1)% while (x(1,i)0)&(x(2,i)(x(1,i)10)&(x(2,i)10)% x(:,i)=mvnrnd(mu_real(:,1),cov_real(:,1),1);% end% % for i=round(N*a_real(1)+1:Nfigure(1),plot(x(1,:),x(2,:),.)%这里生成的数据全部符合标准% % 参数初始化a=1/3,2/3;mu=1 2;2 1;%均值初始化完毕cov(:,1)=1 0; 0 1;,2)=1 0;%协方差初始化% EM Algorothm% loopcount=0;figure(2),hold on
5、while 1 a_old = a; mu_old = mu; cov_old= cov; rznk_p=zeros(M,N); for cm=1:M mu_cm=mu(:,cm); cov_cm=cov(: for cn=1: p_cm=exp(-0.5*(x(:,cn)-mu_cm)/cov_cm*(x(:,cn)-mu_cm); rznk_p(cm,cn)=p_cm; end rznk_p(cm,:)=rznk_p(cm,:)/sqrt(det(cov_cm); rznk_p=rznk_p*(2*pi)(-K/2);%E step %开始求rznk rznk=zeros(M,N);%r(
6、Z pikn=zeros(1,M); pikn_sum=0; pikn(1,cm)=a(cm)*rznk_p(cm,cn);% pikn_sum=pikn_sum+pikn(1,cm); rznk(cm,cn)=pikn(1,cm)/sum(pikn); %求rank结束% M step nk=zeros(1,M); nk(1,cm)=nk(1,cm)+rznk(cm,cn); a=nk/N; rznk_sum_mu=zeros(M,1); % 求均值MU rznk_sum_mu=0;%开始的时候就是错在这里,这里要置零。 rznk_sum_mu=rznk_sum_mu+rznk(cm,cn)
7、*x(:,cn); mu(:,cm)=rznk_sum_mu/nk(cm); % 求协方差COV rznk_sum_cov=zeros(K,M); rznk_sum_cov=rznk_sum_cov+rznk(cm,cn)*(x(:,cn)-mu(:,cm)*(x(:,cm) cov(:,cm)=rznk_sum_cov/nk(cm); t=max(norm(a_old(:)-a(:)/norm(a_old(:);norm(mu_old(:)-mu(:)/norm(mu_old(:norm(cov_old(:)-cov(:)/norm(cov_old(:); temp_f=sum(log(su
8、m(pikn); plot(count,temp_f,r+ count=count+1; if tth break;end %while 1hold offf=sum(log(sum(pikn);a_best=a;mu_best=mu;cov_best=cov;f_best=f;% 输出结果disp(a_best=);disp(a_best);mu_best=disp(mu_best);cov_best=disp(cov_best);f=disp(f);figure(3),hold onplot(x(1,:plot(mu_real(1,:),mu_real(2,:*rplot(mu_best(1,:),mu_best(2,:+c
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2