文档

k聚类则

介绍k聚类则

k-means聚类是一种分区方法。这个函数kmeans将数据划分为k互斥的群集,并返回它已将每个观测值分配给的群集的索引。与层次聚类不同,k-means聚类是根据实际观测结果(而不是更大的不相似度量集)进行的,并创建单个级别的聚类。这些区别意味着k-means聚类通常比层次聚类更适合于大量数据。

kmeans将数据中的每个观察结果视为在空间中具有位置的对象。它会找到一个分区,在这个分区中,每个集群中的对象彼此尽可能地接近,并且与其他集群中的对象尽可能地远离。您可以从五种不同的距离指标中进行选择,这取决于您要聚类的数据类型。

分区中的每个集群由其成员对象和它的质心(center)定义。每个聚类的质心是该聚类中所有物体距离之和最小的点。kmeans为每个距离度量计算不同的聚类质心,以最小化与您指定的度量的和。

您可以使用几个可选的输入参数来控制最小化的细节kmeans,包括聚类质心的初始值和最大迭代次数。默认情况下,kmeans使用k- mean++算法用于聚类中心初始化和平方欧几里得度量来确定距离。

创建集群并确定分离

下面的示例通过分析将点划分为3个、4个和5个簇的结果,探索了四维数据中可能的聚类。

请注意

因为这个示例的每个部分都是按顺序生成随机数的,也就是说,在没有设置新状态的情况下,您必须按顺序执行所有步骤以复制显示的结果。如果您不按顺序执行这些步骤,那么答案本质上是相同的,但是中间结果、迭代次数或轮廓图的顺序可能不同。

首先,加载一些数据。

rng默认的%用于再现性负载kmeansdata大小(X)
ans =1×2560年4

尽管这些数据是四维的,不容易可视化,kmeans使您能够调查其中是否存在组结构。调用kmeansk,所需要的簇数,等于3..对于本例,指定城市街区距离度量,并使用默认值k-means++集群中心初始化算法。

idx3 = kmeans(X,3,“距离”“cityblock”);

为了了解结果集群的分离程度,可以使用输出的集群索引绘制轮廓图kmeans.轮廓图显示了一个聚类中的每个点与相邻聚类中的点的接近程度。该度量值的范围从+1(表示与相邻聚类非常遥远的点)到0(表示在一个或另一个聚类中不明显的点)到-1(表示可能分配到错误的聚类的点)。轮廓在第一个输出中返回这些值。

figure [silh3,h] =廓形(X,idx3,“cityblock”);H = gca;h.Children.EdgeColor = [.]8 .8 1];包含“轮廓值”ylabel“集群”

从剪影图中,您可以看到第二个聚类中的大多数点都有较大的剪影值,大于0.6,这表明该聚类与邻近的聚类有些分离。但是,第三个聚类中包含许多轮廓值较低的点,而第一个和第三个聚类中包含一些轮廓值为负值的点,说明这两个聚类没有很好地分离。

确定正确的集群数量

增加集群的数量,看看是否kmeans可以找到更好的数据分组。这一次,使用“显示”参数来打印关于每次迭代的信息。

idx4 = kmeans(X,4,“距离”“cityblock”“显示”“通路”);
iter phase num sum 1 1 560 1792.72 2 1 6 1771.1最佳总距离之和= 1771.1

该解决方案的轮廓图表明,这四个集群比前一个解决方案中的三个集群分隔得更好。

figure [silh4,h] =廓形(X,idx4,“cityblock”);H = gca;h.Children.EdgeColor = [.]8 .8 1];包含“轮廓值”ylabel“集群”

比较两种解决方案的更定量的方法是查看两种情况下的平均轮廓值。万博 尤文图斯

Cluster3 = mean(silh3)
Cluster3 = 0.5352
Cluster4 = mean(silh4)
Cluster4 = 0.6400

最后,尝试使用五个集群对数据进行集群化。

idx5 = kmeans(X,5,“距离”“cityblock”“复制”5);figure [silh5,h] =廓形(X,idx5,“城市”);H = gca;h.Children.EdgeColor = [.]8 .8 1];包含“轮廓值”ylabel“集群”

意思是(silh5)
Ans = 0.5266

这个剪影图表明这可能不是正确的簇数,因为其中两个簇包含的点剪影值大多较低。如果不知道数据中究竟有多少个集群,最好是试验一个值范围k

避免局部极小值

像许多其他类型的数值最小化,解决方案kmeans终点往往取决于起点。这是可能的kmeans为了达到局部最小值,将任何一个点重新分配到一个新的聚类将增加点到质心距离的总和,但确实存在更好的解决方案。但是,您可以使用“复制”参数来克服这个问题。

对于四个集群,指定五个复制,并使用“显示”参数的名称-值对输出每个解的最终距离和。万博 尤文图斯

[idx4,cent4,sumdist] = kmeans(X,4,“距离”“cityblock”...“显示”“最后一次”“复制”5);
重复1,4次迭代,总距离和= 1771.1。复制2,2次迭代,总距离和= 1771.1。重复3,5次迭代,总距离之和= 2303.45。重复4次,4次迭代,总距离之和= 2303.45。重复5,6次迭代,总距离之和= 1771.1。最佳总距离之和= 1771.1

在五次重复中有两次,kmeans找到一个局部(非全局)最小值。由于这五个重复中的每一个都是从不同的随机选择的初始质心集开始的,因此有时kmeans找到一个以上的局部最小值。然而,最终的解决方案是kmeansReturns是在所有复制中具有最低总距离和的一个。

总和(sumdist)
Ans = 1.7711e+03

相关的话题

这个话题有用吗?