python - 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
当我使用 GPUTree 解释器代码时,我得到以下异常(在对相同模型和预测使用树解释器时,我得到了形状值,没有任何异常): TreeExplainer 中的可加性检查失败!请确保您传递给解释器的数据矩阵与训练模型的形状相同。如果您的数据形状正确,请在 GitHub 上报告。考虑使用 feature_perturbation='interventional' 选项重试。此检查失败,因为其中一个样本的 SHAP 值之和为 -0.036761,而模型输出为 -1.979285。如果这个差异是可以接受的,你可以设置 check_additivity=False 来禁用这个检查。此外,此异常尚不清楚,因为预测与我用于训练模型的预测不同。
在上一个错误之后,我使用标志 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
解决方案
推荐阅读
- php - 如何使用来自不同集合的数据显示在刀片文件中不同集合中的产品和产品选项的单个表行中
- scala - 为什么安装 Scala 需要额外安装 JDK?
- python - Rolling.sum() 与所有以前的事件?
- python - Tox丢弃pythonpath,明确重置它的好主意吗?
- apache-spark - 测试火花增量表的创建非常慢
- bash - 当我从 bash 脚本的循环中运行 ffmpeg 时,为什么会得到调试日志?
- javascript - 如何修复 RichEmbed?
- javascript - coffeescript - 为什么这总是输出为“1”?
- laravel - 存储图像未在 laravel 中显示
- python - 无法通过 Python Macbook air 中的 Crontab 运行计划作业