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

使用KElbowVisualizer时遇AttributeError: 'KMeans'无'k'属性问题求助

问题:使用KElbowVisualizer结合轮廓系数优化KMeans聚类数遇错

问题背景

我找到过完全相似的问题,但给出的解决方案无效,且有其他用户指出原答案存在错误,原提问者未回应疑问,因此再次求助。需求是用yellowbrick的KElbowVisualizer结合轮廓系数(silhouette),为scikit-learn的KMeans算法寻找最优聚类数。

已尝试方案

  • 将参数k改为n_cluster或n_clusters,错误信息无变化,问题未解决;
  • 将elbow_method函数结果存入变量(参考相似问题答案),无效。

测试数据

import numpy as np
data = np.array([[146162.56679954],
       [137227.54181954],
       [126450.29169228],
       [119435.56512675],
       [114988.18682806],
       [111546.74599395],
       [111521.9739634 ],
       [110335.78734103],
       [105098.20650161],
       [ 99178.48409528],
       [ 93982.20860075],
       [ 91453.21097512],
       [ 94160.32926255],
       [102299.29173218],
       [114540.38664748],
       [122133.18759654],
       [121756.94400854],
       [118709.47518003],
       [119216.20443483],
       [122172.5736574 ],
       [122433.8120907 ],
       [120599.22092939],
       [118789.73304299],
       [119107.28063106],
       [123920.58809778],
       [128772.96569855],
       [131502.10371984],
       [129525.67885428],
       [123411.68604418],
       [120263.05106831],
       [114844.47942828],
       [108214.07115472],
       [101822.69619871],
       [ 94871.33385049],
       [ 91251.9375137 ],
       [ 90058.80745747],
       [ 93606.20700239],
       [101044.76675943],
       [109125.2713446 ],
       [112272.386321  ],
       [104429.87179175],
       [ 90827.50408907],
       [ 80805.43033707],
       [ 76165.48417937],
       [ 75002.04576279],
       [ 75428.52404817],
       [ 77444.72355588],
       [ 80389.43621805],
       [ 83401.15424418],
       [ 87638.20462011]])

聚类数寻找代码

from sklearn.cluster import KMeans
from yellowbrick.cluster import KElbowVisualizer

# 将结果存入变量visualizer(参考相似问题答案)
visualizer = KElbowVisualizer(KMeans(), k=11, metric='silhouette', timings= True)
visualizer.fit(data)

报错信息与异常现象

运行后抛出错误:

AttributeError: 'KMeans' object has no attribute 'k'

同时出现两个异常现象:

  • 意外生成未请求的图表;
  • 设置timings=True后无计时信息显示。

环境信息

  • yellowbrick版本:1.4
  • scikit-learn版本:1.1.1
  • 运行环境:VSCode、Jupyter Notebook(Anaconda),两处结果一致。

解决方案

问题根源在于yellowbrick 1.4与scikit-learn 1.1.1的兼容性,以及参数传递格式错误。修改后的代码如下:

from sklearn.cluster import KMeans
from yellowbrick.cluster import KElbowVisualizer

# 指定聚类数范围为2到10(左闭右开,k=(2,11)表示测试2-10)
visualizer = KElbowVisualizer(
    KMeans(random_state=42),  # 添加随机种子保证结果可复现
    k=(2, 11),  # 必须传递范围而非单个数值
    metric='silhouette',
    timings=True
)
visualizer.fit(data)
visualizer.show()  # 显式调用控制图表显示

关键修改说明

  1. k=(2,11):KElbowVisualizer要求k参数为范围(元组),单个数值会触发内部逻辑错误,尝试访问KMeans不存在的k属性。此处表示测试聚类数从2到10。
  2. random_state=42:给KMeans添加随机种子,确保每次运行结果一致,便于调试。
  3. visualizer.show():显式调用显示图表,避免自动生成未预期的图表,同时timings=True的计时信息会在图表下方正常显示。

如果计时信息仍不显示,建议升级yellowbrick到最新版本(如1.5+),新版本修复了旧版本的兼容性bug,对scikit-learn的支持更完善。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:39:26