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

📄 julei.m

📁 这个程序说明了数据挖掘中聚类算法的简单应用
💻 M
字号:
function julei();
 
load N11;
N=length(n);   % n为输入数据 
load k11;
k=k1;          %分类数

Flag=1;  %迭代标志,若为false,则迭代结束
i=0;
j=0;
min=0;
index=1;
%if k>N   最后要加个判断
    
    center(k)=0;
    centerIndex(k)=0;
    centercopy(k)=0;
    Top(k)=0;
    %AllData
    cluster(k,N)=0;
    p(k)=0;     %用于判断质心是否有变化
   %初始化K个簇集合
    %InitCenter();//初始化质心集合  
    
   % CreateRandomArray(N,K,CenterIndex);//产生随机的K个<N的不同的序列
    
  
        for j=1:k     %先设定k个质心        
            center(j)=n(j);
        end 
              
        for i=1:k       
          centercopy(i)=center(i);
        end
  % UpdateCluster();//初始化K个簇集合
  
    
    for i=1:N
          %tindex=GetIndex(AllData(i),Center);//得到与当前数据最小的质心索引
        min=abs(n(i)-center(1));  %//距质心最小距离
        for j=1;k
              if abs(n(i)-center(j))<min   %//如果比当前距离还小,更新最小的质心序号和距离值
                    index=j;
                    min=abs(n(i)-center(j));
              end
        end 
        Top(index)=Top(index)+1;
        cluster(index,Top(index))=n(i);  %把这个值给这个簇
    end 
       
    
    while Flag==1  %//开始迭代
         %UpdateCluster();//更新各个聚类
         for i=1:N    %得到与当前数据最小的质心索引                
             min=abs(n(i)-center(1));  %//距质心最小距离
             for j=1:k
                   if abs(n(i)-center(j))<min   %//如果比当前距离还小,更新最小的质心序号和距离值
                        index=j;
                        min=abs(n(i)-center(j));
                   end
             end      
             Top(index)=Top(index)+1;
             cluster(index,Top(index))=n(i);  %把这个值给这个簇
         end   
       
         
        % UpdateCenter();//更新质心数组
        
             
               sum=0;
               for i=1:k
                      sum=0;    
                       %//计算簇i的元素和
                      for j=1:Top(i)
                         sum=sum+cluster(i,j);
                      end
                      
                      if Top(i)>0    %//如果该簇元素不为空
                          center(i)=sum/Top(i);     %//求其平均值
                      end    
               end
        
        
        %if(IsEqual(Center,CenterCopy))//如果本次迭代与前次的质心聚合相等,即已收敛,结束退出
     
    for i=1:k
         p(i)=center(i)-centercopy(i);     
    end   
    
    x=0;
    
    for i=1:k
         x=x+p(i);     
    end  
    
    if x==0
         Flag=0;
    else 
         for i=1:k
              centercopy(i)=center(i);
         end
    end
        
    % 将聚类的结果打印出来
    t=1:n;
    for i=1:k
        subplot(k,1,i);%作图
        plot(t,cluster(i,1:n),'o');  %因为长度要一样。
        grid;
    end

end    
    
   
  
        
         
         

        
       

⌨️ 快捷键说明

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