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

SHAP 是一种解释机器学习模型预测结果的方法,它基于博弈论中的 Shapley 值理论。 它通过计算每个特征对模型输出的贡献度,帮助我们理解模型的决策过程。 SHAP 适用于各种类型的机器学习模型,使得黑盒模型(如深度神经网络、随机森林等)的预测更加透明、可解释。

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

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

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

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

使用 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 值的平均绝对值来获得标准条形图。

复制

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

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

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

复制

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

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

给TA打赏
共{{data.count}}人
人已打赏
理论

慢思考准确率反降30%!普林斯顿揭示思维链某些任务上失效的秘密

2024-11-4 14:26:14

理论

Jim Fan全华人团队HOVER问世,1.5M小模型让机器人获「潜意识」!

2024-11-4 14:35:00

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
搜索