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

📄 gd017_3.m

📁 matlab的实例
💻 M
字号:
%  模糊聚类分析
%  模糊ISODATA聚类分析法
%  验证程序正确性(样本:P364例)

clc;
clear;
x=[0.80 17 0.22 0.67 0.09; 9.42 18 0.06 1.00 0.14;
   5.91 11 0.36 1.00 0.21; 1.12 17 0.52 0.67 0.12;
   2.96 17 0.57 1.00 0.02; 2.42 11 0.54 1.00 0.01;
   0.99 13 0.23 0.63 0.06; 1.00 13 0.49 0.60 0.02;
   1.26 13 0.55 0.69 0.15; 1.05 16 0.30 0.71 0.11;
   1.06 12 0.43 0.67 0.02; 1.45 15 0.25 0.92 0.08;
   1.21 12 0.24 0.97 0.04; 2.28 15 0.16 1.00 0.01;
   2.25 12 0.18 1.00 0.05; 2.58 15 0.19 1.00 0.08;
   3.02 13 0.16 1.00 0.05; 3.55 15 0.31 1.00 0.27;
   3.79 13 0.31 0.98 0.11; 1.05 13 0.29 0.80 0.02];

%  数据规格化
[n,m]=size(x);
xmax=max(x);xmin=min(x);
for i=1:n
    for j=1:m
        y(i,j)=(x(i,j)-xmin(j))/(xmax(j)-xmin(j));
    end
end

%  分类数c=3;初始模糊分类矩阵R(c,n),q=2;精确度e=0.001
c=3;q=2;e=0.000001;p=12;
R=[0.1 0.1 0.1 0.1 0.2 0.2 0.2 0.2 0.3 0.3 0.3 0.3 0.4 0.4 0.5 0.5 0.5 0.5 0.6 0.6;
   0.2 0.1 0.3 0.4 0.1 0.2 0.3 0.4 0.1 0.2 0.3 0.4 0.1 0.2 0.1 0.2 0.3 0.4 0.1 0.2;
   0.7 0.8 0.6 0.5 0.7 0.6 0.5 0.4 0.6 0.5 0.4 0.3 0.5 0.4 0.4 0.3 0.2 0.1 0.3 0.2];
V=ones(c,m);
Rl=R;b=1;run_time=0;
%while run_time<10000
while b>e
    run_time=run_time+1
    R=Rl;
    %  用R求V
    Vp=R.^q;
    for i=1:c
        vh=zeros(1,m);vl=0;
        for k=1:m
            vh=vh+Vp(i,k)*y(k,:);
            vl=vl+Vp(i,k);
        end
        V(i,:)=vh/vl;
    end
    %  用V求Rl
    %  参考过渡量:XV(k,i)=||xk-Vi||^(1/(q-2))
    for k=1:n
        for i=1:c
            xvp=0;
            for j=1:m
                xvp=xvp+(abs(y(k,j)-V(i,j)))^p;
            end
            XV(k,i)=xvp^(1/(p*(q-1)));
        end
    end
    for i=1:c
        for k=1:n
            Rlp=0;
            for j=1:c
                Rlp=Rlp+XV(k,i)/XV(k,j);
            end
            Rl(i,k)=1/Rlp;
        end
    end                
    %  门限计算
    A=Rl-R;
    B=(abs(A).^p).^(1/p);
    C=max(B);
    b=max(C);
end

%   求聚类指标Fc与Hc
Fcp=0;Hcp=0;
for i=1:c
    for j=1:n
        Fcp=Fcp+Rl(i,j)^2;
        Hcp=Hcp+Rl(i,j)*logm(Rl(i,j));
    end
end
Fc=Fcp/n;
Hc=Hcp/(-n);

%   判断聚类R(c,m)
No1=0;No2=0;No3=0;No4=0;No5=0;
for i=1:n
    num(i)=find(R(:,i)==max(R(:,i)));
    switch num(i)
        case 1
            No1=[No1,i];
        case 2
            No2=[No2,i];
        case 3
            No3=[No3,i];
        case 4
            No4=[No4,i];
        case 5
            No5=[No5,i];
        otherwise
            disp('Error!');
    end
end
No1
No2
No3
No4
No5
V
Fc
Hc

⌨️ 快捷键说明

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