shap/shap
A game theoretic approach to explain the output of any machine learning model.
什么是 SHAP?
SHAP (SHapley Additive exPlanations) 是一个 Python 库,它利用博弈论的概念来解释机器学习模型的预测结果。它计算 Shapley 值(一种公平地将模型输出归因于每个输入特征的方法),并将其呈现为加性贡献,这些贡献的总和等于模型预测值与基准值(参考数据集上的平均预测值)之间的差值。
为什么它很重要
- 模型无关 – 适用于任何预测器(树模型、线性模型、深度神经网络、NLP 流水线等)。
- 一致且局部准确 – 唯一满足多种理想理论属性的加性特征归因方法。
- 丰富的可视化 – 瀑布图、力导向图、蜂群图、条形图、散点图、决策图和文本解释,帮助用户直观地看到特征如何推动预测结果的上升或下降。
如何获取
pip install shap # from PyPI
# or
conda install -c conda-forge shap
通过可选的 cuda 扩展可实现 GPU 加速的树模型解释:
pip install "shap[cuda]"
(需要在主机上安装 CUDA 工具包。)
核心功能(快速导览)
1. 树模型 (XGBoost, LightGBM, CatBoost, scikit‑learn, Spark)
import shap, xgboost
X, y = shap.datasets.california()
model = xgboost.XGBRegressor().fit(X, y)
explainer = shap.Explainer(model) # auto‑detects TreeExplainer
shap_vals = explainer(X)
shap.plots.waterfall(shap_vals[0]) # single‑instance explanation
可视化: 瀑布图、力导向图、蜂群图、条形图。
2. 自然语言模型 (Hugging Face transformers)
import shap, transformers
model = transformers.pipeline('sentiment-analysis')
explainer = shap.Explainer(model)
shap_vals = explainer(["What a great movie!", "...if you have no taste."])
shap.plots.text(shap_vals[0, :, "POSITIVE"])
展示哪些词对正面或负面情感做出了贡献。
3. 深度学习 (TensorFlow/Keras, PyTorch) – DeepExplainer
import shap, numpy as np
background = x_train[np.random.choice(len(x_train), 100, replace=False)]
explainer = shap.DeepExplainer(model, background)
shap_vals = explainer.shap_values(x_test[:5])
shap.image_plot(shap_vals, -x_test[:5])
为图像模型生成像素级的归因。
4. 期望梯度 – GradientExplainer
结合了集成梯度和 SHAP 的思想;适用于任何 TF/Keras 或 PyTorch 模型,并能解释中间层。
5. 模型无关 – KernelExplainer
import shap, sklearn
svm = sklearn.svm.SVC(kernel='rbf', probability=True).fit(X_train, y_train)
explainer = shap.KernelExplainer(svm.predict_proba, X_train, link='logit')
shap_vals = explainer.shap_values(X_test, nsamples=100)
shap.force_plot(explainer.expected_value[0], shap_vals[0][0], X_test.iloc[0])
适用于任何黑盒函数,但速度较慢。
6. 交互值
对于树模型,您还可以获取成对的特征交互:
shap_inter = shap.TreeExplainer(model).shap_interaction_values(X)
对角线包含主效应;非对角线显示两个特征如何共同影响预测。
文档与学习资源
- 官方文档: https://shap.readthedocs.io
- 示例 Notebooks 涵盖树模型、深度学习、梯度、线性模型和核解释器(例如:NHANES 生存模型、MNIST 数字分类、VGG16 中间层分析)。
- 引用: README 中链接了介绍 Tree SHAP 和更广泛的 SHAP 框架的原始 Nature Machine Intelligence 和 Nature Biomedical Engineering 论文。
谁应该使用 SHAP?
- 需要为利益相关者或合规性要求解释模型预测的数据科学家。
- 为表格、文本或图像数据构建可解释 AI 流水线的科研人员。
- 任何希望在全局指标之外获得特征重要性可视化、定量洞察的人。
TL;DR: SHAP 是一个成熟且广泛使用的 Python 库,它将任何机器学习模型的预测转化为清晰、具有数学基础的特征归因,并提供了一套针对树模型、深度神经网络和通用模型的快速算法,以及许多开箱即用的可视化工具。
相关
- 项目
- 项目
- 项目
- 项目
- Dispatch