如何为 k 均值聚类选择初始质心
how to choose initial centroids for k-means clustering
我正致力于在 Python 中实施 k 均值聚类。为数据集选择初始质心的好方法是什么?例如:我有以下数据集:
A,1,1
B,2,1
C,4,4
D,4,5
我需要创建两个不同的集群。我如何从质心开始?
一个标准的初始化是将每个数据点随机分配给聚类,然后只计算这些随机聚类的均值。
另一种是只选择 k
个随机数据点,其中 k
是聚类的数量,这就是你的方法。这有时称为 Forgy 方法。
您可能想在上面了解 K-means++ method, because it's one of the most popular, easy and giving consistent results way of choosing initial centroids. Here you have paper。它的工作原理如下:
- 从数据点中随机均匀选择一个中心。
- 对于每个数据点
x
,计算 D(x)
,x
与已选择的最近中心之间的距离。
- 使用加权概率分布随机选择一个新数据点作为新中心,其中选择点
x
的概率与 D(x)^2
成正比(您可以使用 scipy.stats.rv_discrete为此)。
- 重复第 2 步和第 3 步,直到选择
k
个中心。
- 既然已经选择了初始中心,请继续使用标准 k 均值聚类。
标准的初始化就是
- 选择 k 个随机实例。
还有更多的方法(例如 k-means++),但它们通常不会始终如一地产生比该基线好得多的结果。 k-means++ 有时 等方法效果很好,但通常也不会产生任何改进;但是要花很多额外的时间来计算。
如果数据集像您的情况一样小,则 K- 意味着它本身会选择随机的不同聚类,然后重复计算质心以优化质心与点之间的距离。
但是,如果数据集很大,那么可以使用一种称为 sharding 的简单方法来代替集群的初始随机化,因为它可以减少优化所需的迭代次数聚类,从而节省时间。
您可以应用分片,因为它在此处有详细说明
我正致力于在 Python 中实施 k 均值聚类。为数据集选择初始质心的好方法是什么?例如:我有以下数据集:
A,1,1
B,2,1
C,4,4
D,4,5
我需要创建两个不同的集群。我如何从质心开始?
一个标准的初始化是将每个数据点随机分配给聚类,然后只计算这些随机聚类的均值。
另一种是只选择 k
个随机数据点,其中 k
是聚类的数量,这就是你的方法。这有时称为 Forgy 方法。
您可能想在上面了解 K-means++ method, because it's one of the most popular, easy and giving consistent results way of choosing initial centroids. Here you have paper。它的工作原理如下:
- 从数据点中随机均匀选择一个中心。
- 对于每个数据点
x
,计算D(x)
,x
与已选择的最近中心之间的距离。 - 使用加权概率分布随机选择一个新数据点作为新中心,其中选择点
x
的概率与D(x)^2
成正比(您可以使用 scipy.stats.rv_discrete为此)。 - 重复第 2 步和第 3 步,直到选择
k
个中心。 - 既然已经选择了初始中心,请继续使用标准 k 均值聚类。
标准的初始化就是
- 选择 k 个随机实例。
还有更多的方法(例如 k-means++),但它们通常不会始终如一地产生比该基线好得多的结果。 k-means++ 有时 等方法效果很好,但通常也不会产生任何改进;但是要花很多额外的时间来计算。
如果数据集像您的情况一样小,则 K- 意味着它本身会选择随机的不同聚类,然后重复计算质心以优化质心与点之间的距离。
但是,如果数据集很大,那么可以使用一种称为 sharding 的简单方法来代替集群的初始随机化,因为它可以减少优化所需的迭代次数聚类,从而节省时间。
您可以应用分片,因为它在此处有详细说明