首页 > 解决方案 > slundberg / shap中GPUTree和TreeExplainer之间的差异

问题描述

我正在使用 GPUTree,发现 GPUTree 和 TreeExplainer 之间不匹配:

树解释器代码:

explainer = shap.TreeExplainer(model) 
shap_values_per_entity = explainer.shap_values(x_predict)

GPUTree 解释器代码:

explainer = shap.explainers.GPUTree(model) 
shap_values_per_entity = explainer.shap_values(x_predict)

型号 = lgbm

  1. 当我使用 GPUTree 解释器代码时,我得到以下异常(在对相同模型和预测使用树解释器时,我得到了形状值,没有任何异常): TreeExplainer 中的可加性检查失败!请确保您传递给解释器的数据矩阵与训练模型的形状相同。如果您的数据形状正确,请在 GitHub 上报告。考虑使用 feature_perturbation='interventional' 选项重试。此检查失败,因为其中一个样本的 SHAP 值之和为 -0.036761,而模型输出为 -1.979285。如果这个差异是可以接受的,你可以设置 check_additivity=False 来禁用这个检查。此外,此异常尚不清楚,因为预测与我用于训练模型的预测不同。

  2. 在上一个错误之后,我使用标志 check_additivity=False 运行了 shap_values 函数:

    shap_values_per_entity = explainer.shap_values(x_predict,check_additivity=False) 我得到的结果与我为 TreeExplainer 得到的结果不同,例如:

树形结果:

0.000679,-0.000121,0.000143,0.000715,0.0

Gpu树形状结果:

0.00478, -0.000650, 0.000106, 0.000587, 0.0

标签: pythongpushap

解决方案


推荐阅读