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

使用SHAP从加载的XGBoost模型绘制瀑布图报错求助

问题原因与解决方法

错误原因

shap.waterfall_plot在新版SHAP中要求传入Explanation对象,你直接传入了原始SHAP值数组,不符合当前API的参数要求。Explanation对象会封装SHAP值、模型预期输出(基础值)、特征数据等必要信息,是瀑布图绘制的必备参数。

解决步骤

  1. 获取模型基础值:通过explainer.expected_value获取XGBoost模型的基准预测值(分类模型对应log odds)。
  2. 封装Explanation对象:用shap.Explanation整合SHAP值、基础值、输入数据,还可自定义特征名称提升图表可读性。
  3. 传入Explanation对象调用瀑布图函数。

修改后的完整代码

import xgboost
import numpy as np
import shap

# 加载模型
bst = xgboost.Booster()
bst.load_model('./model/xgboost_classifier_model.json')

# 准备输入数据,转float32避免精度问题
input_data = np.array([1,1,1,1], dtype=np.float32).reshape(1,-1)

# 创建解释器,直接调用返回Explanation对象(新版SHAP推荐写法)
explainer = shap.Explainer(bst)
shap_expl = explainer(input_data)

# 若用旧版代码生成的shap_values数组,手动封装Explanation对象的写法:
# shap_values = explainer.shap_values(input_data)
# shap_expl = shap.Explanation(
#     values=shap_values,
#     base_values=explainer.expected_value,
#     data=input_data,
#     feature_names=[f"feature_{i}" for i in range(input_data.shape[1])]
# )

# 绘制单样本瀑布图
shap.waterfall_plot(shap_expl[0])

补充说明

  • 新版SHAP中直接调用explainer(input_data)即可返回Explanation对象,无需再调用shap_values()方法,写法更简洁。
  • 若特征有具体业务名称,替换feature_names列表内容即可让瀑布图更易理解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 20:12:58