第一次做学习笔记,也是方便归纳材料方法
1.什么是shap
SHAP,即 Shapley Additive exPlanations,是一个用于解释机器学习模型输出的 Python 库。基于博弈论中的 Shapley 值理论,模型解析得到的shap value需要满足可加性(additivity)性质,将模型的预测值解释为二元变量的线性函数,来理解每个特征对模型预测的贡献度。首先选择一种explainer解释器,基于原模型的样本进行训练。解决了多重共线性问题- 不仅考虑单个变量的影响,而且考虑变量之间的协同效应,可以体现出不同参数组合对模型的贡献度。也就是说,可以给出模型优化方案
2.基本原理公式:
手把手教你使用SHAP(机器学习模型解释工具)-腾讯云开发者社区-腾讯云 (tencent.com)
cloud.tencent.com/developer/article/2075753
3.重要功能
SHAP value最大的优势是SHAP能对于反映出每一个样本中的特征的影响力,而且还表现出影响的正负性。
SHAP:Python的可解释机器学习库 - 知乎 (zhihu.com)
均值柱状图shap.plots.bar(shap_values)
shap.plots.beeswarm(shap_values)蜂群图 一种散点图,点的分布更加规律
shap.decision_plot(expected_value, shap_values, features_display) decision plot
决策图显示的信息与力图基本相同。灰色垂直线是基础值 ,红线表示每个特征是否将输出值移动到高于或低于平均预测的值。
这张图比前一张图更清晰和直观,尤其是要分析的特征比较多的时候。在力图中,当预测变量的数量较多时,信息可能看起来非常紧凑
再见"黑匣子模型"!SHAP 可解释 AI (XAI)实用指南来了! - 知乎 (zhihu.com)
4.图片大小调整
用matplotlib shap.initjs() shap.set_matplotlin_formats(dpi=100)
5.实际代码
[xgboost+shap]解决二分类问题笔记梳理_shap 分类问题shap_interaction_values-CSDN博客
图片优化与介绍让 SHAP 输出比优雅更优雅的图表 - 墨天轮 (modb.pro)
6.将SHAP用于特征选择和超参数调优
7.和lime的关系
模型无关可解释方法LIME 和SHAP概述 - 知乎 (zhihu.com)
8.不同的解释器代码PyTorch中的SHAP值:KernelExplainer与DeepExplainer|极客教程 (geek-docs.com)
DeepExplainer是SHAP库中的一种基于深度学习的解释器。它通过使用深度学习模型的梯度信息来计算每个特征对预测结果的SHAP值。DeepExplainer适用于基于神经网络的模型,并且在训练数据集较大的情况下可以获得更准确的结果。【深度模型可解释性】SHAP算法之实操 - 知乎 (zhihu.com)
KernelExplainer是SHAP库中的一种基于核函数的解释器。它通过对模型进行近似拟合,从而计算每个特征对预测结果的SHAP值。KernelExplainer适用于任何类型的模型,包括黑盒模型,在训练数据集较小的情况下也可以获得较好的近似效果。这是一个通用工具,适用于各种机器学习模型。其采用基于权重的线性回归方法来估计 SHAP 值,为模型提供全面而可靠的解释。归因分析笔记6:SHAP包使用及源码阅读_python shap包-CSDN博客
- deep:用于深度学习模型的解释器。
- gradient:基于梯度的解释器,适用于多种类型的模型。
- kernel:基于核方法的解释器,适用于各种模型,但计算成本可能较高。
- tree:专门用于树模型的解释器,支持如XGBoost、LightGBM、CatBoost等常用的树集成算法。
- sampling:基于采样的解释器,适用于大规模数据集
-
import xgboost import shap # 训练一个 XGBoost 模型 X, y = shap.datasets.california() model = xgboost.XGBRegressor().fit(X, y) # 使用 SHAP 解释模型的预测 # (相同的语法适用于 LightGBM、CatBoost、scikit-learn、transformers、Spark 等) explainer = shap.Explainer(model) shap_values = explainer(X) # 可视化第一个预测的解释 shap.plots.waterfall(shap_values[0])