聚类可以定义为基于点之间的一些共性或相似性对数据点进行分组。

        最简单的方法之一是 K-means 聚类。在这种方法中,簇的数量是初始化的,每个簇的中心是随机选择的。计算每个数据点与所有聚类中心之间的欧几里得距离,并基于每个数据点分配给某个聚类的最小距离。定义集群的新中心并计算欧几里得距离。该过程迭代直到达到收敛。

1、生成随机数据

 首先让我们生成一些随机数据点和一些随机聚类点。

        matlab参考代码

%Generate sample data points and assign random centre for each cluster
%Number of data points
sz=100;
sz1=250;
 
X = random('unid',sz1,[sz 1]); %Value
Xp = random('unid',sz1,[sz 1]); %Position
 
%Number of clusters
c=6;
V=random('unid',sz1,[c 1]); %Value
Vp=random('unid',sz1,[c 1]); %Position
 
 
figure,plot(Xp,X,'*',Vp,V,'r+');title('Data points and the initial Cluster centers');

 生成100个数据点,假设聚类数为6,随机生成6个聚类点。

        可视化效果如下

标题

2、对数据点进行分组

        matlab参考代码

%找到数据点和集群之间的最小距离
[mv,Gpos]=min(J,[],2);
CGroup=zeros([sz c]);
colr=colormap(jet(c));
figure(3),
for i = 1:c
    Temp = find(Gpos==i);
    CGroup(1:numel(Temp),i)=Temp;
   
    V1(i,:)=mean(X(Temp));
    Vp1(i,:)=mean(Xp(Temp));
    Pos=ones(numel(Temp)*2,1)*Vp1(i);
    Pos(2:2:end)=Xp(Temp);
    Value=ones(numel(Temp)*2,1)*V1(i);
    Value(2:2:end)=X(Temp);
    %为每个集群定义新中心
    plot(Pos,Value,'Color',colr(i,:),'LineStyle','-','Marker','o');hold on;
    plot(Vp1(i),V1(i),'k+');
end
hold off;
Diffv=abs(V-V1);
DiffVp=abs(Vp-Vp1);
 
%迭代该过程直到集群位置没有变化
if(Diffv < 1)
    flag=0;
else
    V=V1;
    Vp=Vp1;
end
end
 
figure,plot(Xp,X,'*',Vp,V,'g+');title('Data points and the Final Cluster centers');

最终迭代后簇的新位置(绿色十字)

         在上图中,数据点以蓝色星形表示,聚类中心以绿色十字形表示。

3、计算过程描述

        让我们考虑一个特定的数据点和所有的集群中心。

        数据点位置 X = 13, Y = 20

        簇1 位置 X = 8,Y = 19

        簇 2 位置 X = 13,Y = 15

         第 1 步:求欧几里得距离:

        求数据点与簇1之间的欧几里德距离(D1),求数据点与簇 2 之间的欧几里德距离(D2

        Distance D1 = sqrt((13-8).^2+(20-19).^2)) = 5.0990

        Distance D2 = sqrt((13-13).^2+(20-15).^2))= 5.0000

        第 2 步:找到最小值并将数据点分配给集群

        现在两个结果之间的最小距离是集群 2。

        因此 (X,Y)=(13,20) 的数据点被分配给集群/组 2。

        第 3 步:对所有数据点执行第 1 步和第 2 步,并相应地分配组。

        第 4 步:根据已完成的聚类为聚类分配新位置。
       
         找到新分配的数据点到特定集群的平均位置,并将该平均值用作集群的新位置。

        步骤 5:重复此过程,直到簇的位置不变。

4、结果可视化

        聚类数为6的聚类结果,可以自行修改聚类数,以达到最适合的结果。