shap.force_plot()引发异常:在v0.20中,force_plot现在要求将基础值作为第一个参数。

8
我正在使用Catboost,并希望可视化shap_values。
from catboost import CatBoostClassifier
model = CatBoostClassifier(iterations=300)
model.fit(X, y,cat_features=cat_features)

pool1 = Pool(data=X, label=y, cat_features=cat_features)
shap_values = model.get_feature_importance(data=pool1, fstr_type='ShapValues', verbose=10000)

shap_values.shape
Output: (32769, 10)
X.shape
Output: (32769, 9)

接着我执行下列操作,结果引发了异常:

shap.initjs()
shap.force_plot(shap_values[0,:-1], X.iloc[0,:])

异常情况:在v0.20中,force_plot现在需要将基础值作为第一个参数!请尝试使用shap.force_plot(explainer.expected_value,shap_values),或者对于多输出模型,请尝试使用shap.force_plot(explainer.expected_value [0],shap_values [0])。

下面的代码有效,但我想让force_plot()函数可以使用:

shap.initjs()
shap.summary_plot(shap_values[:,:-1], X)

我阅读了文档,但无法理解解释器。我尝试过:

explainer = shap.TreeExplainer(model,data=pool1)
#Also tried:
explainer = shap.TreeExplainer(model,data=X)

但是我遇到了问题:TypeError:ufunc 'isnan'不支持输入类型,并且根据强制转换规则“safe”,无法将输入安全地强制转换为任何支持的类型

有人能指导一下吗?谢谢。

3个回答

1

我遇到了与下面相同的错误-

异常:在v0.20中,force_plot现在需要将基本值作为第一个参数!尝试shap.force_plot(explainer.expected_value,shap_values)或对于多输出模型,请尝试shap.force_plot(explainer.expected_value [0],shap_values [0])。

这帮助我解决了问题-

import shap
explainer = shap.TreeExplainer(model,data=X)
shap.initjs()
shap.force_plot(explainer.expected_value[0],X.iloc[0,:])

还有下面的问题 -

类型错误:ufunc 'isnan'不支持输入类型,根据转换规则“安全”,无法将输入安全地强制转换为任何受支持的类型

检查您的数据是否包含任何NaN或缺失值。
希望这可以帮助你!


0

在 @Sparsha 的回答基础上,由于我仍然遇到错误,对我有用的是:

explainer = shap.TreeExplainer(model, data = X)
shap_values = explainer.shap_values(X_train)
shap.initjs()
shap.force_plot(explainer.expected_value, shap_values[0], feature_names = explainer.data_feature_names)
          

0

试试这个:

shap.force_plot(explainer.expected_value, shap_values.values[0, :], X.iloc[0, :])

无法工作,我收到了 AttributeError: 'list' object has no attribute 'values' 的错误。 - PeJota

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接