www.gusucode.com > EM算法源程序的代码,运行的结果和实验报告 > code10/源程序代码/main.m
function main() format long panduan = 1;%判断条件 % n = 150;%数据个数 k = 3;%分类个数 e = 0.0001;%误差精度 tt=0;%计算迭代的次数 choice = input('请选择要分类的数据包:(1或者2)') if(choice==1) m=4; X = load('data1.m'); elseif(choice==2) m=2; X = load('data2.m'); end [n1,n2]= size(X);%数据个数 n=n1*n1; choice = input('请选择初始化的Z:(1:理想化的Z;2:随机化的Z)') if(choice==1) %任意初始化矩阵 Z = zeros(n,k);%第三类数据错5个数据 for i =1:n if(i>100) Z(i,3) = 1; elseif(i>50) Z(i,2) = 1; else Z(i,1) = 1; end end elseif(choice==2) Z = load('Z.m'); end % Z = Z_matrix(n,k);%随机化的Z % disp((Z)) %初始化E1 U = junzhi(Z,X,m,n,k); xie = xie_matrix(Z,X,U,m,n,k); G = Gao(X,U,xie,m,n,k); for j=1:k midu(j) = 1/k; end temp1 = 0; for i=1:n for j=1:k temp1 = temp1 + midu(j)*G(i,j); end p(i) = temp1; temp1 = 0; end for i=1:n for j=1:k E1(i,j) = (midu(j)*G(i,j))/p(i); end end % while(panduan) temp2 = 0; for j=1:k for i=1:n temp2 = temp2 + E1(i,j); end midu(j) = temp2*(1/n); temp2 = 0; end %计算E2 U = junzhi(E1,X,m,n,k); xie = xie_matrix(E1,X,U,m,n,k); G = Gao(X,U,xie,m,n,k); temp1 = 0; for i=1:n for j=1:k temp1 = temp1 + midu(j)*G(i,j); end p(i) = temp1; temp1 = 0; end for i=1:n for j=1:k E2(i,j) = (midu(j)*G(i,j))/(p(i)); end end panduan = (cha(E2,E1,n,k)>e); E1 = E2; tt = tt+1; end disp(tt) Z = zeros(n,k); for i=1:n xia = 0; [zhi,xia] = max(E1(i,:)); Z(i,xia) = 1; for j = 1:k if(j~=xia) Z(i,j) = 0; end end end Out(Z,n,k);