手动指定初始质心的K-means算法实现是否正确?
K-means指定初始质心10次迭代结果校验
你写的核心代码逻辑是对的,跑出来的结果在默认配置下符合预期,有两个关键细节需要明确:
- scikit-learn的
KMeans类默认开启早停机制,当相邻两次迭代的质心位置变化小于tol参数(默认值1e-4)时,会直接终止迭代,不会跑满max_iter设定的10次。如果你需要严格执行满10次迭代,需要在初始化模型时补充传入tol=0参数。 - 你显式传入了题目指定的初始质心数组,没有使用默认的
k-means++随机初始化逻辑,这一步完全符合题目要求,不会出现初始点不匹配导致的结果偏差。
题目要求
- 聚类簇数:3
- 指定初始质心:
[1,1,1,1]、[-1,-1,-1,-1]、[1,-1,1,-1] - 迭代规则:执行10次K-means迭代
- 输出目标:迭代完成后的各簇质心位置
核心实现代码
kmeans = KMeans( n_clusters=3, max_iter=10, init=np.array([[1, 1, 1, 1],[-1, -1, -1, -1],[1, -1, 1, -1]], np.float64), random_state=42 ) ... kmeans.cluster_centers_
运行输出结果
array([[ 1.02575735, -0.00207592, -0.02395886, 0.63623732], [ 0.10361404, 0.00370027, 0.00669603, -0.03432606], [ 0.99690983, 0.48052607, 0.94034839, -0.00726928]])
如果题目没有强制要求必须跑满10次迭代(允许算法收敛后提前停止),上面的结果就是正确的。如果要求严格执行满10次迭代,补充tol=0参数后重新运行即可得到对应结果。
内容的提问来源于stack exchange,提问作者caiosa
相关产品推荐
相关产品推荐

