Shapley 加性解释#

链接到API参考:ShapKernel

查看SHAP的支持库这里

摘要

SHAP 是一个使用 Shapley 值解释任何模型输出的框架,Shapley 值是一种常用于最优信用分配的博弈论方法。虽然这可以用于任何黑箱模型,但 SHAP 可以在特定模型类(如树集成)上更高效地计算。这些优化在大规模计算时变得尤为重要——在优化的模型类上计算许多 SHAP 值是可行的,但在模型无关的设置中可能会相对较慢。由于其可加性,单个(局部)SHAP 值可以聚合并用于全局解释。SHAP 可以作为更深入的机器学习分析的基础,如模型监控、公平性和群体分析。

工作原理

Christoph Molnar 的《可解释机器学习》电子书 [1] 提供了关于 SHAP 的精彩概述,可以在此处找到 here

构思论文“解释模型预测的统一方法” [2] 可以在arXiv上找到 这里

如果您发现视频是学习算法的更好媒介,您可以在下面找到作者Scott Lundberg对算法的概念概述: The Science Behind InterpretML: SHAP

代码示例

以下代码将为乳腺癌数据集训练一个黑箱管道。之后,它将使用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.