kmeans聚类算法matlab实现

运行界面(可以支持任意维数据)

kmeans聚类算法matlab实现_第1张图片

单介绍下kmeans算法流程:

假设要把样本集分为c个类别,算法描述如下:
(1)适当选择c个类的初始中心;
(2)在第k次迭代中,对任意一个样本,求其到c各中心的距离,将该样本归到距离最短的中心所在的类;
(3)利用均值等方法更新该类的中心值;
(4)对于所有的c个 聚类中心,如果利用(2)(3)的 迭代法更新后,值保持不变,则迭代结束,否则继续迭代。
该 算法的最大优势在于简洁和快速。算法的关键在于初始中心的选择和距离公式。
matlab实现:
function [ class count]=k_means(data,k);

%clear
%load testdata.mat
%k=2;
sum=size(data,1);
for i=1:k
  centroid(i,:)=data(floor(sum/k)*(i-1)+1,:);
end
tic
ck=0;
while 1
    temp=zeros(1,2);;
    count=zeros(1,k);
    ck=ck+1
    for i=1:sum
        for j=1:k
            dist(j)=norm(data(i,:)-centroid(j,:));
        end
            [a min_dist]=min(dist);
            count(min_dist)=count(min_dist)+1;
            class(min_dist,count(min_dist))=i;
    end
    
  %重新计算类中心    
    for i=1:k   
        for j=1:count(i)
            temp=temp+data(class(i,j),:);
        end
        temp_centroid(i,:)=temp/(count(i));
        temp(1,:)=0;
      % temp_centroid(i,:)=re_calculate(class(i,:),count(i),tdata);
    end  
    %计算新的类中心和原类中心距离centr_dist;
    for i=1:k
        centr_dist(i)=norm(temp_centroid(i,:)-centroid(i,:));
    end
    if max(centr_dist)<=0
        break;
    else
        for i=1:k
            centroid(i,:)=temp_centroid(i,:);
            %重新进行前俩不
        end
    end 
end
toc
    

数据点是鼠标插进去的,通过界面可以很清晰的看到分类过程,功能截图如下:
kmeans聚类算法matlab实现_第2张图片 kmeans聚类算法matlab实现_第3张图片 kmeans聚类算法matlab实现_第4张图片 kmeans聚类算法matlab实现_第5张图片
源码连接: kmeans聚类算法源码

你可能感兴趣的:(kmeans聚类算法,matlab,界面,数据)