6

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

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

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

4

4 回答 4

5

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

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

标准初始化是简单的

  • 选择 k 个随机实例。

还有更多方法(例如 k-means++),但它们通常不会始终如一地产生比此基线更好的结果。诸如 k-means++ 之类的方法有时效果很好,但也常常没有任何改进;但是需要花费大量额外的时间来计算。

于 2016-03-13T23:24:48.330 回答
1

如果数据集像您的情况一样小,则 K-means 本身会选择随机的不同簇,然后重复计算质心以优化质心和点之间的距离。

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

您可以应用分片,因为这里有详细说明

k中的分片意味着

于 2018-02-28T14:09:24.950 回答
0

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

另一种方法是只选择k随机数据点,k集群的数量在哪里,这些是你的手段。这有时被称为Forgy方法。

于 2016-03-12T00:31:32.383 回答