使用 SHAP 使机器学习模型变的可解释!!

人工智能 机器学习
SHAP 是一种解释机器学习模型预测结果的方法,它基于博弈论中的 Shapley 值理论。它通过计算每个特征对模型输出的贡献度,帮助我们理解模型的决策过程。

SHAP 是一种解释机器学习模型预测结果的方法,它基于博弈论中的 Shapley 值理论。

它通过计算每个特征对模型输出的贡献度,帮助我们理解模型的决策过程。

SHAP 适用于各种类型的机器学习模型,使得黑盒模型(如深度神经网络、随机森林等)的预测更加透明、可解释。

核心概念

  • Shapley 值
    源自博弈论的 Shapley 值,用于公平地分配合作博弈中各参与者的收益。
    在机器学习中,SHAP 通过计算每个特征在不同组合中的边际贡献,求取其平均值,从而得到该特征的 Shapley 值。这种方法确保了模型解释的公平性和一致性。
  • 可加性解释模型
    SHAP 构建了一个可加性的解释模型,将模型的预测结果表示为各特征贡献的线性组合。
    这种方法确保了特征贡献的总和等于模型的预测值,从而提供了一种一致且直观的解释方式。

SHAP的主要特点

1.一致性

如果模型的特征贡献增加,那么相应的SHAP值也会增加,确保解释的合理性。

2.局部解释

SHAP值可以解释单个样本的预测结果,帮助理解特定数据点的模型决策。

3.全局解释

通过对多个数据点的SHAP值进行汇总,提供模型整体行为的洞察。

SHAP的优势

  • 模型无关性
    SHAP 适用于多种机器学习模型,包括线性模型、树模型和深度学习模型等。
  • 理论基础
    SHAP基于Shapley值,具有坚实的理论支持,确保解释的公平性和一致性。
  • 可视化能力
    SHAP提供多种可视化工具,帮助直观地理解特征对模型预测的影响。

案例分享

下面,我们来训练一个 XGBoost 模型并计算 SHAP 值来解释每个特征如何影响预测。

首先,我们加载数据集(加利福尼亚住房数据集)并训练一个 XGBoost 模型

import shap
import xgboost as xgb
import pandas as pd
import numpy as np
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# 加载加利福尼亚住房数据集
california_housing = fetch_california_housing()
X, y = california_housing.data, california_housing.target
feature_names = california_housing.feature_names
X = pd.DataFrame(X, columns=feature_names)

# 拆分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = xgb.XGBRegressor(random_state=42)
model.fit(X_train, y_train)

接下来,计算训练集上的 SHAP值,并使用 shap.summary_plot 展示了各特征对模型预测的总体影响。

explainer = shap.Explainer(model,X_train)
shap_values = explainer(X_train)
shap.summary_plot(shap_values, X_train, feature_names=feature_names)

下图按所有样本的 SHAP 值大小总和对特征进行排序,并使用 SHAP 值显示每个特征对模型输出的影响的分布。

我们还可以只取每个特征的 SHAP 值的平均绝对值来获得标准条形图。

shap.plots.bar(shap_values,show=False)

最后,我们使用 shap.force_plot 展示了单个样本的特征贡献,帮助我们理解模型对该样本的具体预测。

shap.initjs()  # 初始化JS以便显示交互图
shap.force_plot(explainer.expected_value, shap_values.values[0, :], X_train.iloc[0])


责任编辑:华轩 来源: 程序员学长
相关推荐

2019-08-29 18:07:51

机器学习人工智能

2024-05-21 09:45:40

机器学习人工智能XAI

2020-08-19 09:20:00

机器学习人工智能Python

2021-01-08 10:47:07

机器学习模型算法

2020-08-25 10:30:59

TensorFlow数据机器学习

2023-09-20 11:42:44

人工智能AI

2021-06-05 08:04:26

机器学习CARTOptimal

2019-05-13 09:22:21

微软开源机器学习

2021-12-30 20:20:46

机器学习销售语言

2023-11-06 10:50:35

机器学习LIME

2023-08-11 13:54:31

AI因果

2019-11-15 13:52:06

机器学习Shapley计算

2024-05-28 08:00:00

人工智能机器学习

2022-06-07 10:25:45

机器学习Shapash

2018-05-23 09:20:12

人工智能机器学习技术

2024-09-09 11:45:15

ONNX部署模型

2019-10-22 10:12:45

机器学习模型人工智能

2021-11-02 09:40:50

TensorFlow机器学习人工智能

2017-07-07 14:41:13

机器学习神经网络JavaScript

2019-10-23 08:00:00

Flask机器学习人工智能
点赞
收藏

51CTO技术栈公众号