机器学习模型可解释性SHAP的计算

avatar
作者
筋斗云
阅读量:0

在计算 SHAP 值时,迭代次数 `max_evals` 应该至少为数据集特征数的两倍加一。这是因为 SHAP 值的计算过程中涉及到组合特征的情况,确保 `max_evals` 设置得足够高可以帮助确保计算的准确性和可靠性。

在你的代码中,你已经按照这个要求设置了 `max_evals`:

```python
num_features = X_train.shape[1]
max_evals = 2 * num_features + 1
explainer = shap.Explainer(loaded_model.predict, X_train, batch_size=16)
shap_values = explainer(X_test, max_evals=max_evals)
```

这里 `max_evals` 的设置是符合要求的,它确保了在计算 SHAP 值时可以处理数据集的特征组合情况。

使用 SHAP(SHapley Additive exPlanations)可以帮助我们理解机器学习模型的输出。SHAP 提供了多种图形化工具来解释模型的预测。以下是使用 SHAP 画出解释性图的步骤:

步骤1:安装 SHAP

首先,需要安装 SHAP 库。如果还没有安装,可以使用以下命令进行安装:

pip install shap

步骤2:训练机器学习模型

在使用 SHAP 之前,需要有一个已经训练好的机器学习模型。这里以一个随机森林分类器为例:

import numpy as np

import pandas as pd

from sklearn.datasets import load_iris

from sklearn.model_selection

import train_test_split

from sklearn.ensemble import RandomForestClassifier

# 加载示例数据

iris = load_iris()

X = pd.DataFrame(iris.data, columns=iris.feature_names)

y = iris.target

# 划分训练集和测试集

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练随机森林分类器

model = RandomForestClassifier() model.fit(X_train, y_train)

步骤3:计算 SHAP 值

计算 SHAP 值需要使用 SHAP 的解释器。这里以 TreeExplainer 为例(适用于树模型,如随机森林、梯度提升树等):

import shap

# 创建 TreeExplainer

explainer = shap.TreeExplainer(model)

# 计算 SHAP 值

shap_values = explainer.shap_values(X_test)

步骤4:绘制解释性图

SHAP 提供了多种图形化工具,可以帮助我们可视化 SHAP 值。以下是几种常见的解释性图的绘制方法:

4.1 Summary Plot

Summary Plot 展示了所有特征对模型输出的总体影响。

# Summary Plot

shap.summary_plot(shap_values, X_test, plot_type="bar")

4.2 Dependence Plot

Dependence Plot 展示了一个特征的 SHAP 值与其取值之间的关系。

# Dependence Plot

shap.dependence_plot("petal length (cm)", shap_values, X_test)

4.3 Force Plot

Force Plot 用于展示某个样本的预测解释。

# Force Plot (单个样本)

shap.initjs()

shap.force_plot(explainer.expected_value[1], shap_values[1][0], X_test.iloc[0])

4.4 Decision Plot

Decision Plot 展示了模型如何做出某个样本的预测。

# Decision Plot (单个样本)

shap.decision_plot(explainer.expected_value[1], shap_values[1][0], X_test.iloc[0])

步骤5:解释和分析

通过以上步骤绘制的图形,可以帮助我们理解模型的预测是如何受不同特征影响的。不同的图形提供了不同的视角,可以从全局(Summary Plot)、特征间关系(Dependence Plot)、单个样本解释(Force Plot)等方面进行分析。

总结

使用 SHAP 可以直观地展示模型的解释性,从而帮助我们理解和信任机器学习模型的输出。通过上述步骤,我们可以方便地计算 SHAP 值并绘制各种解释性图形。

核解释器(Kernel Explainer)和树解释器(Tree Explainer)在 SHAP 中传入的参数是不同的。它们适用于不同类型的模型,并有各自的使用场景。

核解释器(Kernel Explainer)

核解释器是一种通用的解释器,可以用于任何机器学习模型,包括树模型、线性模型、深度学习模型等。由于它的通用性,计算 SHAP 值时会比较耗时。

传入参数:

  • model: 可调用的模型对象(比如一个函数),它接受输入数据并返回模型的预测值。
  • data: 用于计算 SHAP 值的背景数据,通常是训练数据的一部分。

示例:

import shap import xgboost as xgb

# 训练一个XGBoost模型

X_train, y_train = ...

model = xgb.train(...)

# 创建 Kernel Explainer

explainer = shap.KernelExplainer(model.predict, X_train)

# 计算 SHAP 值

shap_values = explainer.shap_values(X_test)

树解释器(Tree Explainer)

树解释器专门为树模型设计,适用于随机森林、梯度提升树等。由于它针对树模型进行了优化,所以计算 SHAP 值的速度比核解释器快得多。

传入参数:

  • model: 树模型对象,例如 RandomForestClassifierGradientBoostingRegressor 的实例。

示例:

import shap

from sklearn.ensemble import RandomForestClassifier

# 训练一个随机森林模型

X_train, y_train = ...

model = RandomForestClassifier().fit(X_train, y_train)

# 创建 Tree Explainer

explainer = shap.TreeExplainer(model)

# 计算 SHAP 值

shap_values = explainer.shap_values(X_test)

总结

  • Kernel Explainer: 适用于任何类型的模型,传入一个可调用的模型对象和背景数据。
  • Tree Explainer: 专门为树模型设计,传入一个树模型对象。

选择合适的解释器可以帮助更有效地计算 SHAP 值,从而更好地解释模型的预测。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!