• 大小: 1KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-09
  • 语言: Matlab
  • 标签:

资源简介

将模糊集理论和k-means聚类联系起来,设计了模糊k-means聚类算法,其聚类效果比单纯的k-means要好。

资源截图

代码片段和文件信息

clear all;
n=100;
k=5;
q=3;

x=[0 1000; 0 1000];
cs=5;
ps=20;
sd=60;
X=nngenc(xcspssd);
%X=fix(1000*rand(2n));%随机产生n个数作为对象,(X(1,j),X(2,j))为一个对象。
%load X.mat;
X1=[1:n];
X=X/1000;

meandistance=getmeandistance(X);
while(1)
    Y=randsample(X1k);   %随机产生k个簇中心
    int h; h=3;E(1)=-1;E(2)=-2;E(3)=-3;
    for p=1:k             %把初始值放入均值数组Z中
        Z(1p)=X(1Y(p));
        Z(2p)=X(2Y(p));
    end
    r=1;
    for j=1:k
        for(w=(j+1):k)
           if(distance(Z(1j)Z(2j)Z(1w)Z(2w))<(meandistance/2));
               r=0;
           end
        end
    end
    if(r==1)
        break;
    end
end


% Z(11)=0.100;Z(12)=0.640;Z(13)=0.400;Z(14)=0.800;Z(15)=0.900;
% Z(21)=0.200;Z(22)=0.300;Z(23)=0.190;Z(24)=0.700;Z(25)=1.000;
while(1)
    
    for j=1:k
        plot(Z(1j)Z(2j)‘Marker‘‘o‘ ‘MarkerEdgeColor‘‘k‘ ‘MarkerFaceColor‘[1/j01/j]‘markersize‘10);
        hold on;
        axis([-0.1 1.1 -0.1 1.1]);grid on
        %pause(0.00001);
    end
    %plot(X(1:)X(2:)‘.‘);
    
   for j=1:n             %计算X(i)属于第j簇的隶属度Wij。
       for p=1:k
           D(p)=distance(X(1j)X(2j)Z(1p)Z(2p));
           if(D(p)==0)
                A(pj)=1;
           else A(pj)=(1/(D(p)^2))^(1/(q-1));
           end
       end
       s=sum(A(:j));
       for p=1:k
           A(pj)=A(pj)/s;
       end         
   end
   
   double e; e=0;       
   for j=1:n           %计算目标函数
       for p=1:k
           d=distance(X(1j)X(2j)Z(1p)Z(2p));
           e=e+(A(pj)^q)*(d^2);
       end
   end
  
   
   double s1;double s2;double s3;
   for p=1:k            %重新计算簇均值Cj
       s1=0;s2=0;s3=0;
       for j=1:n
           s1=s1+(A(pj)^q)*(X(1j));
           s2=s2+(A(pj)^q)*(X(2j));
           s3=s3+(A(pj)^q);
       end
       Z(1p)=s1/s3;
       Z(2p)=s2/s3;   
   end
   
   E(h)=e;
   if((E(h)==E(h-1))&(E(h)==E(h-2)))
       break;
   end
   h=h+1;
end

for j=1:n
    %for p=1:k
        [av]=max(A(:j));
        plot(X(1j)X(2j)‘Marker‘‘o‘ ‘MarkerEdgeColor‘‘k‘ ‘MarkerFaceColor‘[(100-20*v)/1000(20*v)/100]);
        hold on;
       % pause(0.0001);
end
axis([-0.1 1.1 -0.1 1.1]);grid on


        
   
   
   

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

     文件       2343  2011-04-22 15:25  fuzzykmeans.m

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

                 2343                    1


评论

共有 条评论

相关资源