使用Yellowbrick的SilhouetteVisualizer可视化AffinityPropagation模型轮廓系数报错求助
问题原因
报错AttributeError: 'AffinityPropagation' object has no attribute 'shape'是因为你调用visualizer.fit(segmentacao)时,传入的是训练好的AffinityPropagation模型对象,但SilhouetteVisualizer的fit方法需要接收特征数据集(而非模型),它内部会尝试访问输入数据的shape属性,模型对象没有这个属性,因此触发错误。
修复方案
将visualizer.fit()的参数替换为你的特征数据集compact即可——可视化工具需要基于原始数据计算轮廓系数,同时使用已训练好的模型生成的聚类标签。
修正后的完整代码
from sklearn.cluster import AffinityPropagation from yellowbrick.cluster import SilhouetteVisualizer # 训练AffinityPropagation模型 segmentacao = AffinityPropagation(preference=-1000, max_iter=250) segmentacao.fit(compact) labels = segmentacao.predict(compact) # 初始化可视化工具并传入训练好的模型 visualizer = SilhouetteVisualizer(segmentacao, colors='yellowbrick') # 传入特征数据集进行可视化计算 visualizer.fit(compact) visualizer.show()
简化写法(可选)
如果不需要单独保存模型的预测标签,也可以让可视化工具直接完成模型训练和可视化,代码更简洁:
from sklearn.cluster import AffinityPropagation from yellowbrick.cluster import SilhouetteVisualizer visualizer = SilhouetteVisualizer( AffinityPropagation(preference=-1000, max_iter=250), colors='yellowbrick' ) visualizer.fit(compact) visualizer.show()
内容的提问来源于stack exchange,提问作者André Luís Lopes da Silva
相关产品推荐
相关产品推荐

