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);