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

如何在SHAP 0.46.0版本中绘制堆叠柱状图

解决SHAP 0.46.0中shap.plots.bar()的TypeError及实现堆叠柱状图

错误原因

SHAP 0.40+版本的绘图API做了重大调整,shap.plots.bar()不再接受原始的SHAP值数组,必须传入**shap.Explanation对象**、Cohorts对象或其字典,这就是触发TypeError的核心原因。旧版教程(比如DataCamp的示例)基于旧版SHAP,直接传数组即可,但新版本强制要求结构化的Explanation对象来统一数据格式。

解决步骤

1. 将原始SHAP值包装为Explanation对象

假设你已经有模型、特征数据集X(带列名)和计算好的原始shap_values数组,用shap.Explanation完成包装:

import shap

# 示例:针对树模型(也适用于其他模型的SHAP值)
# 若未计算SHAP值,先通过解释器生成(以树模型为例)
explainer = shap.TreeExplainer(your_model)
shap_values = explainer.shap_values(X)

# 包装为Explanation对象
shap_exp = shap.Explanation(
    values=shap_values,
    feature_names=X.columns,
    data=X,
    # 分类模型可添加类别标签,用于图表标注
    output_names=your_model.classes_
)

2. 绘制堆叠柱状图

如果是多分类任务,shap_values会是三维数组(样本数×特征数×类别数),此时调用shap.plots.bar()会自动生成堆叠柱状图,展示每个特征在不同类别上的总SHAP值之和:

# 多分类场景自动生成堆叠柱状图
shap.plots.bar(shap_exp)

如果是回归任务,shap.plots.bar()会生成单组柱状图;若要按自定义分组(比如训练/测试集)堆叠,可将不同组的Explanation对象放入字典后传入:

# 示例:按样本分组生成堆叠柱状图
cohort_shap = {
    "Train": shap_exp_train,
    "Test": shap_exp_test
}
shap.plots.bar(cohort_shap)

可选调整

  • 用max_display参数控制展示的特征数量,比如shap.plots.bar(shap_exp, max_display=10)
  • 确保feature_names和output_names与数据匹配,避免图表标签混乱

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 22:45:01