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

📄 gaosi.m

📁 这里包含了聚类的工具箱还有很详细的文档说明
💻 M
字号:
*************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
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);
***************junzhi.m**********
function U = junzhi(Z,X,m,n,k)
temp1 = 0;
temp2 = 0;
for j=1:k
  for l=1:m
        for i=1:n
            temp1 = temp1 + Z(i,j)*X(i,l);
            temp2 = temp2 + Z(i,j);   
        end
        U(j,l) = temp1/temp2;
        temp1 = 0;
        temp2 = 0;
    end
end
***********Gao.m***********
function G = Gao(X,U,xie,m,n,k)
for i = 1:n
    forj=1:k   G(i,j)=exp((-1/2).*(X(i,:)-U(j,:))*pinv(xie(:,:,j))*(X(i,:)-U(j,:)).')*1/((2*pi).^(m/2)*sqrt(det(xie(:,:,j))));
    end 
end
*********xie_matrix********
function xie = xie_matrix(Z,X,U,m,n,k)
temp1 = zeros(m,m);
temp2 = 0;
for j=1:k
    for i=1:n
        temp1 = temp1 + Z(i,j).*(X(i,:)-U(j,:))'*(X(i,:)-U(j,:));
        temp2 = temp2 + Z(i,j);
    end
    xie(:,:,j) = temp1/temp2;
    temp1 = zeros(m,m);
    temp2 = 0;
end
*********cha.m*******
function temp = cha(E2,E1,n,k)
temp = 0;
for i=1:n
    for j=1:k
        temp = temp + abs(E2(i,j) - E1(i,j));
    end
end
*********Out.m********
function Out(Z,n,k)
index = 0;
disp('数据的分类如下所示:')
for j = 1:k
    for i =1:n
        if(Z(i,j)==1) 
            index = index +1;
            shuju(1,index,j) = i; 
        end   
    end
    disp(j)
    disp(shuju(1,:,j))
    index = 0;
end 

⌨️ 快捷键说明

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