gpt4 book ai didi

python - 使用 minit ='matrix' 时,scipy 的 kmeans2 算法是否也会权衡初始质心集?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:15:52 24 4
gpt4 key购买 nike

我一直在研究 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 算法在寻找新的质心时考虑了它的初始质心。为什么是这样?我怎样才能防止这种情况发生?

最佳答案

我已经有一段时间没有真正研究过这个了,但我随机得到了这个灵光一现的时刻,在这个时刻我弄清楚了为什么会出现我的问题:
虽然结果看起来有点奇怪,但如果你看一下 k-means 的工作原理,这些结果其实很容易解释:在 k-means 的第一个 epoch 中,四个数据点都分配给了 [3, 3 ] 质心,因为该质心最接近所有数据点。数据点的平均值为 [ 0.55, 0.55]。无论你之后做了多少个 epoch,初始化为 [3, 3] 的质心将保持不变(因为它没有被任何其他数据点“吸引”,所以没有任何数据点)并且其他质心(初始化为 [4, 4])将保持不变,因为没有数据点比另一个更靠近这个质心。就是这样。

关于python - 使用 minit ='matrix' 时,scipy 的 kmeans2 算法是否也会权衡初始质心集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41153546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com