Python 中的 SHAP 简介

本文中有多篇计划文章,后期会补充相关链接。鉴于公众号内无法后期修改文章,请关注原文链接。

如何创建和解释 SHAP 图:瀑布图、力图、平均 SHAP 图、蜂群图和依赖图

可直接在橱窗里购买,或者到文末领取优惠后购买:

在这里插入图片描述

SHAP 是用于理解和调试模型的最强大的 Python 包。它可以告诉我们每个模型特征对单个预测的贡献。通过汇总 SHAP 值,我们还可以了解多个预测的趋势。只需几行代码,我们就能识别和可视化模型中的重要关系。

我们将介绍用于计算和显示 SHAP 值的代码。其中包括对以下 SHAP 图的解释:

  • Waterfall Plot
  • Force Plot
  • Mean SHAP Plot
  • Beeswarm Plot
  • Dependence Plot

我们针对预测连续目标变量的模型执行此操作。如果你需要分类的解释,日后会专门写相关文章,届时可以参阅 [[二元和多类目标变量的 SHAP]],你可以在 GitHub1 上找到完整的项目。

数据集

为了演示 SHAP 包,我们将使用包含 4,177 个观测值的「鲍鱼数据集」2。下面,你可以看到我们的数据集的快照。鲍鱼是一种贝类美食。我们想使用数据集来预测它们的年龄。更具体地说,我们的目标变量是鲍鱼壳中的环数。我们将使用shell lengthshell diameter 和鲍鱼的 whole weight 等特征。

在这里插入图片描述

在下图中,我们直观地展示了一些特征与目标变量之间的关系。 Shucked weight 是鲍鱼肉的重量(即从壳中取出后的重量)。我们可以看到,去壳重量增加时,环的数量往往会增加。这是有道理的,因为我们认为年龄较大的鲍鱼会更大,肉也更多。

在这里插入图片描述

我们还可视化了鲍鱼的性别,这是一个分类特征。在模型中使用此功能之前,我们需要使用 One-Hot 编码对其进行转换。正如你所看到的,这会导致每个生成的二进制特征都有一个单独的 SHAP 值。这使得很难理解原始分类特征的整体贡献。我们将在后面专门写一篇文章「[[分类特征的 SHAP]]」探讨一种解决方案。

对于最后一点数据探索,我们为连续特征创建一个相关矩阵。 可以看到,我们正在处理高度相关的特征。 长度和直径完全相关。 同样,全重与其他重量测量值也高度相关。 例如肉的重量(去壳重量)和除去肉的外壳重量(外壳重量)。

image-20240727212937534

我们在下面导入必要的 Python 包。我们有一些用于管理和可视化数据的标准库(第 4-9 行)。XGBoost 用于对目标变量进行建模(第 13 行),我们导入一些包来评估我们的模型(第 14 行)。最后,我们导入 SHAP 包(第 16 行)。我们初始化包(第 17 行)。这样我们就可以在笔记本中显示一些 SHAP 图。

import warnings
warnings.filterwarnings("ignore")

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use('default')

import seaborn as sns

import xgboost as xgb
from sklearn.metrics import accuracy_score,confusion_matrix

import shap
shap.initjs()

import os
dp = os.environ.get('pub_data')

建模

我们使用数据探索来指导特征工程。首先,我们从 X 特征矩阵中删除长度和整体重量(第 10-11 行)。我们发现这些与其他特征完美相关。

# import dataset
df = pd.read_csv(dp + 
'Abalone dataset/abalone.data',
names=[
"sex",
Python可以使用SHAP(SHapley Additive exPlanations)库来实现SHAP值的计算和解释。SHAP是一种用于解释机器学习模型预测输出的方法,它基于Shapley值的概念,可以帮助我们了解每个特征对于模型预测结果的贡献程度。 要使用SHAP库,首先需要安装它。可以使用以下命令使用pip进行安装: ``` pip install shap ``` 安装完成后,就可以开始使用SHAP了。下面是一个简单的示例,展示如何计算和解释SHAP值: ```python import shap import numpy as np import pandas as pd from sklearn.ensemble import RandomForestClassifier # 加载数据 data = pd.read_csv('data.csv') X = data.drop('target', axis=1) y = data['target'] # 训练模型 model = RandomForestClassifier() model.fit(X, y) # 初始化SHAP解释器 explainer = shap.TreeExplainer(model) # 计算SHAP值 shap_values = explainer.shap_values(X) # 解释结果 shap.summary_plot(shap_values, X) ``` 在上面的示例,首先加载了一个数据集,并将其划分为特征矩阵X和目标变量y。然后使用随机森林分类器训练了一个模型。接下来,通过初始化`TreeExplainer`对象来创建一个SHAP解释器。然后,使用`shap_values`方法计算SHAP值。最后,使用`summary_plot`函数绘制了SHAP值的汇总图。 这只是SHAP库的一个简单示例,你可以根据自己的需求使用SHAP库进行更复杂的解释和可视化。希望对你有所帮助!如果你还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

茶桁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值