对决策树 分类模型做shap的瀑布图和bees warm图的时候总是报错


TypeError Traceback (most recent call last)
/var/folders/j3/7grf1qbs0wl8h5wf3d1scv200000gn/T/ipykernel_3215/817190724.py in
22 # 为特定实例绘制瀑布图
23 instance_index = 0
---> 24 shap.plots.waterfall(explainer.expected_value[class_index], shap_values[class_index][instance_index], max_display=19)

TypeError: waterfall() got multiple values for argument 'max_display'

img

参数个数不对应问题,检查一下参数

这个错误提示是因为 shap.plots.waterfall 这个函数的参数 max_display 多次赋值了。可能是在函数调用时多输入了一个同名的参数所导致的。你可以检查一下你的调用语句,看看是不是在其中重复定义了 max_display 参数。或者,如果你想用默认值,则可以不传这个参数就行了。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
这个错误提示是因为你在调用 shap.plots.waterfall() 函数时重复传递了 max_display 参数。这个函数的参数只能传递一次。

下面是关于 shap.plots.waterfall()shap.plots.beeswarm() 函数的使用示例:

import shap
from sklearn.datasets import load_breast_cancer
from sklearn.tree import DecisionTreeClassifier

# 加载数据集
data = load_breast_cancer()
X, y = data.data, data.target

# 训练决策树分类器
clf = DecisionTreeClassifier()
clf.fit(X, y)

# 创建 SHAP 解释器
explainer = shap.TreeExplainer(clf)
shap_values = explainer.shap_values(X)

# 绘制 beeswarm 图
shap.summary_plot(shap_values, X, plot_type="violin")

# 绘制瀑布图
class_index = 0
instance_index = 0
shap.plots.waterfall(
    explainer.expected_value[class_index],
    shap_values[class_index][instance_index],
    max_display=19
)

# 绘制 beeswarm 图
class_index = 0
shap.plots.beeswarm(shap_values[class_index])

注意到 shap.plots.waterfall()shap.plots.beeswarm() 函数在使用时需要传递不同的参数。 shap.plots.waterfall() 接受 3 个参数,分别是全局的期望值、单个实例的 SHAP 值,以及最多展示的特征数量。而 shap.plots.beeswarm() 函数只需要传递单个实例的 SHAP 值即可。
如果我的回答解决了您的问题,请采纳!