如何为k-means聚类选择初始质心

时间:2016-03-12 00:15:14

标签: python cluster-analysis data-mining k-means centroid

我正在努力在Python中实现k-means聚类。为数据集选择初始质心的好方法是什么?例如:我有以下数据集:

A,1,1
B,2,1
C,4,4
D,4,5

我需要创建两个不同的集群。我如何从质心开始?

4 个答案:

答案 0 :(得分:3)

您可能想要了解K-means++方法,因为它是选择初始质心的最流行,最简单且最一致的结果方式之一。在这里你有paper。它的工作原理如下:

  • 从数据点中随机选择一个中心。
  • 对于每个数据点x,计算D(x)x与已选择的最近中心之间的距离。
  • 使用加权概率分布随机选择一个新数据点作为新中心,其中选择点x的概率与D(x)^2成比例(您可以使用scipy.stats.rv_discrete )。
  • 重复步骤2和3,直到选择了k个中心。
  • 现在已经选择了初始中心,继续使用标准的k-means聚类。

答案 1 :(得分:2)

标准初始化只是

  • 选择k个随机实例。

还有更多方法(例如k-means ++),但它们通常不会产生比此基线更好的结果。像k-means ++ 有时这样的方法运作良好,但也经常不会产生任何改进;但需要花费很多额外的时间来计算。

答案 2 :(得分:0)

一个标准的初始化是随机地将每个数据点分配给集群,然后只计算那些随机集群的均值。

另一个是选择k随机数据点,其中k是群集的数量,这些都是您的手段。这有时被称为 Forgy 方法。

答案 3 :(得分:0)

如果数据集很小,就像你的情况一样K-表示自己选择随机不同的聚类,然后重复计算质心以优化质心和点之间的距离。

但是,如果数据集较大,则代替群集的初始随机化,有一种称为分片的简单方法可以完成,因为它减少了优化群集所需的迭代次数,从而节省了时间

你可以应用分片,因为这里有详细解释

Sharding in k means

相关问题