我正在努力在 Python 中实现 k-means 聚类。为数据集选择初始质心的好方法是什么?例如:我有以下数据集:
A,1,1
B,2,1
C,4,4
D,4,5
我需要创建两个不同的集群。我如何从质心开始?
我正在努力在 Python 中实现 k-means 聚类。为数据集选择初始质心的好方法是什么?例如:我有以下数据集:
A,1,1
B,2,1
C,4,4
D,4,5
我需要创建两个不同的集群。我如何从质心开始?
您可能想了解K-means++方法,因为它是选择初始质心的最流行、最简单且结果一致的方法之一。这里有纸。它的工作原理如下:
x
,计算与已经选择的最近中心D(x)
之间的距离。x
x
选择一个点的概率与D(x)^2
(您可以使用scipy.stats.rv_discrete)成正比。k
选择了中心。标准初始化是简单的
还有更多方法(例如 k-means++),但它们通常不会始终如一地产生比此基线更好的结果。诸如 k-means++ 之类的方法有时效果很好,但也常常没有任何改进;但是需要花费大量额外的时间来计算。
如果数据集像您的情况一样小,则 K-means 本身会选择随机的不同簇,然后重复计算质心以优化质心和点之间的距离。
但是,如果数据集很大,那么可以使用一种称为分片的简单方法代替集群的初始随机化,因为它减少了优化集群所需的迭代次数,从而节省了时间。
您可以应用分片,因为这里有详细说明
一种标准的初始化是将每个数据点随机分配给集群,然后只计算这些随机集群的均值。
另一种方法是只选择k
随机数据点,k
集群的数量在哪里,这些是你的手段。这有时被称为Forgy方法。