scipy的kmeans2算法在使用minit='matrix'时是否也对初始质心集进行加权?

2024-09-26 18:17:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在玩scipy的kmeans2算法,直到我发现一个问题。考虑以下代码:

x = np.array([[0.1, 0.0], [0.0, 0.1], [1.1, 1.0], [1.0, 1.1]])
c = np.array([[3,3], [4, 4]])

kmeans2(x, c, minit = 'matrix', iter=100)

您可能希望这段代码(相当诡异地)收敛到具有以下质心的解决方案:[0.05, 0.05][1.05, 1.05]。 但是,代码返回:

 (array([[ 0.55,  0.55],
   [ 4.  ,  4.  ]]), array([0, 0, 0, 0], dtype=int32))

在寻找新的质心时,k-means算法似乎考虑了它的初始质心。为什么会这样?我怎样才能防止这种情况发生?你知道吗


Tags: 代码算法np情况scipy解决方案arraymatrix
1条回答
网友
1楼 · 发布于 2024-09-26 18:17:22

我已经有一段时间没有真正研究过这个问题了,但我随机得到了一个尤里卡时刻,在这个时刻我发现了问题产生的原因:
尽管结果看起来有点奇怪,但如果你看看k-means是如何工作的,这些结果实际上很容易解释:在k-means的第一个纪元中,四个数据点都被分配到[3, 3]质心,因为质心最接近所有数据点。数据点的平均值为[ 0.55, 0.55]。不管你在之后做了多少个历元,初始化为[3, 3]的质心将保持不变(因为它不会被任何其他数据点“吸引”,没有任何数据点),而另一个质心(初始化为[4, 4])将保持不变,因为没有一个数据点比另一个更接近这个质心。就这样。你知道吗

相关问题 更多 >

    热门问题