shap.force_plot()引发Exeption:在v0.20中,force_plot现在需要将基本值作为第一个参数

时间:2019-06-27 12:31:48

标签: decision-tree xgboost lightgbm catboost

我正在使用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”不能将输入安全地强制转换为任何受支持的类型 < / p>

有人能指出我正确的方向吗? THX

2 个答案:

答案 0 :(得分: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,:])

也针对以下问题-

TypeError:输入类型不支持ufunc'isnan',并且 根据以下说明,无法将输入安全地强制转换为任何受支持的类型 强制转换为“安全”

检查您的数据(如果包含任何NaN或缺失值)。
希望这会有所帮助!

答案 1 :(得分:0)

试试这个:

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