• 大小: 51KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-12
  • 语言: Matlab
  • 标签: matlab  isodata  聚类  

资源简介

自己编写了一个实现ISODATA聚类算法的程序。(目标程序是将样本分成两类,各个参数见程序注释)

资源截图

代码片段和文件信息

clc;
clear;
x=[0 0;1 1;2 2;4 3;5 3;4 4;5 4;6 5];%样本点
figure(1);
plot(x(:1)x(:2)‘.‘);
hold on;
w=zeros(1length(x));%class type
%----------------------------------初始化参数-----------------------------------
%------C为类别,Tn为每类允许最少样本数,Ts为类内各分量标准差上限,Td为两类中心间最小距离下限
%------L为每次迭代可以合并的最多的类数目,I为允许的最大迭代次数,Nc为初始中心数
%------z_center为每类中心的存放(初始为一类),Ip为当前迭代次数
C=2;Tn=2;Ts=1;Td=4;
L=1;I=4;Nc=1;
z_center=[00];Ip=1;
plot(z_center(:1)z_center(:2)‘ro‘);
while(Ip<=I)
    %-----------------------------(2)clustering-----------------------------------
    %----------------------------------------------------------------------
    Center_d=pdist2(z_centerx);
    [rc]=size(Center_d);
    for (i=1:c)
        [valuew(i)]=min(Center_d(:i));
    end
    x1=[x w‘];%data and class type 
    %-----------------------------(3)if(class member     %----------------------------------------------------------------------
    C_num=zeros(1r);%class num
    for(i=1:r)
        for(j=1:c)
            if(w(j)==i)
               C_num(i)=C_num(i)+1;
            end
        end
    end
    sign=0;
    for(i=r:1)
        if(C_num(i)            sign=1;
            Nc=Nc-1;
            z_center(i:)=[];
        end
    end
    if (sign==1)
        sign=0;
        continue;%goto (2)
    end
    %--------------------------(4)-----------------------------------------
    %----------------------------------------------------------------------
    avr_cd=zeros(1r);
    avr_d=0;
    temp=0;
    %compute the new class center 
    for i=1:r
        x2=sum(x1(x1(:3)==i:));
        x2(3)=[];
        z_center(i:)=x2/C_num(i);
    end
    %compute the average distance of each class
    for i=1:r
        for (j=1:length(x1))
            if(x1(j3)==i)
                temp=temp+pdist2(z_center(i:)x(j:));
            end
        end
        avr_cd(i)=temp/C_num(i);
        temp=0;
    end
    %compute the whole average distance
    for i=1:r
        temp=temp+avr_cd(i)*C_num(i);
    end
    avr_d=temp/length(x);
    temp=0;
    %--------------------------(5)-----------------------------------------
    %----------------------------------------------------------------------
    if(Nc<=C/2)
        for (i=1:r)
        sigma(i:)=std(x(x1(:3)==i:));
        end
        for (i=1:r)
            max_sigma(i1)=max(sigma(i:));
        end
        for (i=1:r)
            if ((max_sigma(i)>Ts)&&((avr_cd(i)>=avr_d&&(C_num(i)>2*(Tn+1)))))
                Nc=Nc+1;
                A=z_center(1:i-1:);
                B=z_center(i+1:end:);
                Z1=z_center(i:)+[0.5*max_sigma(i)0.5*max_sigma(i)];
                Z2=z_center(i:)-[0.5*max_sigma(i)0.5*max_sigma(i)];
                z_center=[A;Z1;Z2;B];
            end
        end
%------
    else
        if (Nc>=2*C||mod(Nc2)~=0)
            for(i=1:r-1)
                for(j=i+1:r)
                  

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       5222  2013-04-25 18:14  isodata.m

     文件      84480  2013-04-25 18:04  ISODATA流程图.vsd

----------- ---------  ---------- -----  ----

                89702                    2


评论

共有 条评论