数学建模暑期集训19:k-means聚类算法

2022-06-14 11:48:22 浏览数 (1)

k-means聚类算法描述

1、假定我们要对N个样本观测做聚类,要求聚为K类,首先选择K个点作为初始中心点; 2、接下来,按照距离初始中心点最小的原则,把所有观测分到各中心点所在的类中; 3、每类中有若干个观测,计算K个类中所有样本点的均值,作为第二次迭代的K个中心点; 4、然后根据这个中心重复第2、3步,直到收敛(中心点不再改变或达到指定的迭代次数),聚类过程结束。

算法评价:

k-means 算法

spss软件中,默认的聚类算法是K-means 。

k-means算法matlab

spss可以比较方便的求出聚类中心,但无法画出图像,这里是matlab实现k-means算法的代码。

代码语言:javascript复制
opts = statset('Display','final');
%调用 Kmeans 函数
%X N*P 的数据矩阵
%Idx N*1 的向量,存储的是每个点的聚类标号
%Ctrs K*P 的矩阵,存储的是 K 个聚类质心位置
%SumD 1*K 的和向量,存储的是类间所有点与该类质心点距离之和
%D N*K 的矩阵,存储的是每个点与所有质心的距离;
[Idx,Ctrs,SumD,D] = kmeans(X,4,'Replicates',2,'Options',opts);
%画出聚类为 1 的点。X(Idx==1,1),为第一类的样本的第一个坐标;X(Idx==1,2为第二类的样本的第二个坐标
plot(X(Idx==1,1),X(Idx==1,2),'r.','MarkerSize',14)
hold on
plot(X(Idx==2,1),X(Idx==2,2),'b.','MarkerSize',14)
hold on
plot(X(Idx==3,1),X(Idx==3,2),'g.','MarkerSize',14)
hold on 
plot(X(Idx==4,1),X(Idx==4,2),'y.','MarkerSize',14)
%绘出聚类中心点,kx 表示是圆形
plot(Ctrs(:,1),Ctrs(:,2),'kx','MarkerSize',14,'LineWidth',4)
%legend('Cluster 1','Cluster 2','Cluster3','Centroids','Location','NW')
Ctrs
SumD

注:kmeans函数第二个值代表聚类数量 比如,代码中为4,代表分4类。

0 人点赞