You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

scikit-learn 1.2.2与1.3.1版本K-Means聚类结果差异咨询

scikit-learn K-Means 1.2.2与1.3.1版本聚类结果不一致问题

我在Python中使用scikit-learn进行K-Means聚类时遇到问题:1.2.2与1.3.1版本的聚类结果不一致,当设置聚类数k=3时差异尤为明显。

测试代码片段

from sklearn.datasets import load_digits
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import silhouette_samples, silhouette_score
from sklearn.cluster import KMeans
import numpy as np

digits = load_digits()
X = digits.data

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

kmeans = KMeans(n_clusters=3, random_state=42)
cluster_labels = kmeans.fit_predict(X_scaled)

sample_silhouette_values = silhouette_samples(X_scaled, cluster_labels)
fig, ax = plt.subplots(1, 1, figsize=(8, 6))
y_lower = 10  

sil_score = silhouette_score(X_scaled, cluster_labels)

for i in range(3): 
    ith_cluster_silhouette_values = sample_silhouette_values[cluster_labels == i]
    ith_cluster_silhouette_values.sort()
    size_cluster_i = ith_cluster_silhouette_values.shape[0]
    y_upper = y_lower + size_cluster_i
    ax.fill_betweenx(np.arange(y_lower, y_upper), 0, ith_cluster_silhouette_values, alpha=0.7)
    ax.text(-0.05, y_lower + 0.5 * size_cluster_i, str(i))
    y_lower = y_upper + 10  

ax.set_xlabel("The silhouette coefficient values")
ax.axvline(x=sil_score, color="red", linestyle="--")
ax.set_title(f"Silhouette analysis for KMeans clustering with n_clusters = {i}")
ax.set_title("Silhouette plot for the various clusters")
plt.show()

观察到的差异:
fit和fit_predict方法的结果存在差异。查阅scikit-learn更新日志后发现两个版本间有更新,但不确定是否是导致聚类结果差异的原因。

问题:

  1. scikit-learn 1.2.2与1.3.1的版本差异是否会导致K-Means聚类结果变化?原因是什么?
  2. 哪个版本的聚类结果应被视为正确?

问题解答

  1. 版本差异确实会导致K-Means结果变化
    scikit-learn 1.3.0版本对K-Means的核心逻辑做了关键调整:
  • 重构了k-means++初始化算法的实现细节,优化了初始化阶段的质心选择逻辑,提升了高维数据下的初始化稳定性
  • 修复了旧版本中存在的数值精度问题,避免了部分边缘场景下的迭代偏差
  • 即使设置了random_state=42,由于初始化算法的实现逻辑变更,相同随机种子生成的初始质心位置也会不同,最终导致后续迭代的聚类分配结果出现差异。
  1. 不存在“绝对正确”的版本,需结合评估指标判断
    K-Means是依赖初始质心的局部最优算法,不同初始状态可能收敛到不同的局部极小值,两个版本的结果都是各自实现下的合法收敛结果:
  • 若追求更优的聚类稳定性和现代算法优化,1.3.1版本的结果更可靠,其改进后的初始化逻辑能更大概率找到质量更优的聚类划分
  • 可通过轮廓系数(silhouette score)、Calinski-Harabasz指数等量化指标对比两个版本的聚类质量,选择指标表现更优的结果
  • 若需要和历史分析结果保持一致,可暂时回退到1.2.2版本;若追求长期的算法可靠性,建议升级到1.3.1及以上版本

内容的提问来源于stack exchange,提问作者Yin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:20:13