我正在使用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
答案 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, :])