Shapley 可加解释#
API 参考链接: ShapKernel
查看 SHAP 的支持仓库请点击 此处。
摘要
SHAP 是一个框架,它使用 Shapley 值(一种常用于最佳贡献分配的博弈论方法)来解释任何模型的输出。虽然这可以用于任何黑盒模型,但在特定模型类别(如树集成模型)上,SHAP 可以更高效地计算。这些优化在大规模应用中非常重要——在优化过的模型类别上计算许多 SHAP 值是可行的,但在模型无关的设置中可能相对较慢。由于 SHAP 值的可加性,单个(局部)SHAP 值可以聚合起来用于全局解释。SHAP 可以作为更深入的机器学习分析的基础,例如模型监控、公平性和群组分析。
工作原理
Christoph Molnar 的《可解释机器学习》电子书 [1] 对 SHAP 有非常好的概述,可以在 此处 查看。
概念论文《解释模型预测的统一方法》 [2] 可以在 arXiv 此处 查看。
如果您觉得视频是学习该算法更好的媒介,可以在下方找到作者 Scott Lundberg 对该算法的概念性概述:
代码示例
以下代码将针对乳腺癌数据集训练一个黑盒流程。之后,它将使用 SHAP 解释该流程及其决策。提供的可视化将用于局部解释。
from interpret import set_visualize_provider
from interpret.provider import InlineProvider
set_visualize_provider(InlineProvider())
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.decomposition import PCA
from sklearn.pipeline import Pipeline
from interpret import show
from interpret.blackbox import ShapKernel
seed = 42
np.random.seed(seed)
X, y = load_breast_cancer(return_X_y=True, as_frame=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=seed)
pca = PCA()
rf = RandomForestClassifier(random_state=seed)
blackbox_model = Pipeline([('pca', pca), ('rf', rf)])
blackbox_model.fit(X_train, y_train)
shap = ShapKernel(blackbox_model, X_train)
shap_local = shap.explain_local(X_test[:5], y_test[:5])
show(shap_local, 0)
Using 455 background data samples could cause slower run times. Consider using shap.sample(data, K) or shap.kmeans(data, K) to summarize the background as K samples.
更多资源
参考书目
[1] Christoph Molnar. 可解释机器学习. Lulu. com, 2020.
[2] Scott Lundberg 和 Su-In Lee. 解释模型预测的统一方法. arXiv 预印本 arXiv:1705.07874, 2017.