【发布时间】:2022-01-11 02:30:30
【问题描述】:
根据我对K-means聚类的理解,选择k,选择质心位置,分配样本,然后质心移动到样本的均值,直到不再移动。
所以在这个例子中,如果选择 3 个质心,位置分别为 (5,1)、(5,10) 和 (5,20),会发生什么?我希望所有样本都分配给(5,1)质心,然后将移动到数据的平均值(5,0),并且算法将以属于1个簇(其他质心)的所有样本终止不动,并且有 1 次迭代)。
但是,当我在 Python 中使用 KMeans 实现它时,它的行为不是这样的:
In [3]: xa = [1,2,3,4,5,6,7,8,9,10]
...: xb = [0,0,0,0,0,0,0,0,0,0]
...:
...: data = pd.DataFrame({"Xa": xa, "Xb":xb}, columns=["Xa", "Xb"])
...:
...: initial = np.array([[5,1], [5,10], [5,20]])
...:
...: km = KMeans(n_clusters=3,init=initial, n_init=1, max_iter=1).fit(data)
...: print(km.cluster_centers_)
[[ 4.5 0. ]
[10. 0. ]
[ 9. 0. ]]
让算法在不限制迭代次数的情况下运行会导致以下结果,这对我来说也没有意义:
In [4]: km = KMeans(n_clusters=3,init=initial, n_init=1).fit(data)
...: print(km.cluster_centers_)
[[3. 0. ]
[9.5 0. ]
[7. 0. ]]
谁能在这里解释我的误解?
【问题讨论】:
-
我投票结束这个问题,因为它与 help center 中定义的编程无关,而是关于 ML 理论和/或方法 - 请参阅 stackoverflow.com/tags/machine-learning/info 中的介绍和注意事项跨度>
标签: python machine-learning scikit-learn cluster-analysis k-means