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