【Python特征工程系列】利用SHAP进行特征重要性分析-XGB模型为例(案例+源码)

这是我的第374篇原创文章。

一、引言

SHAP有多种实现方式,每种方式都适用于特定的模型类型,可以实现更快的逼近。

  • TreeExplainer :TreeExplainer专为树集合方法开发,如XGBoost,LightGBM或CatBoost。

  • DeepExplainer :DeepExplainer是为深度学习模型开发的,支持TensorFlow / Keras。

  • GradientExplainer :GradientExplainer也是为深度学习模型中的SHAP值而开发的,但速度比DeepExplainer慢,并且做出了不同的假设。此方法基于Integrated Gradient归因方法,并支持TensorFlow / Keras / PyTorch。

  • KernelExplainer :KernelExplainer使用加权线性回归近似任何类型模型的SHAP值。

使用特定于模型类型的算法(TreeExplainer,DeepExplainer)而不是通用KernelExplainer更快更有效。

本文以XGB分类器为例,展示了如何使用条形图和蜂群图来可视化全局特征重要性。

二、实现过程

2.1 准备数据

# 准备数据
data = pd.read_csv(r'dataset.csv')
df = pd.DataFrame(data)
# 提取目标变量和特征变量
target = 'target'
features = df.columns.drop(target)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(df[features], df[target], test_size=0.2, random_state=0)

df:

图片

2.2 模型训练

# 模型的构建与训练
model = XGBClassifier()
model.fit(X_train, y_train)

2.3 创建SHAP解释器

# 创建Explainer
explainer = shap.TreeExplainer(model, X_test)
# 以numpy数组的形式输出SHAP值
shap_values = explainer.shap_values(X_test)
print(shap_values)     # shap_values = shap_obj.values
# 以SHAP的Explanation对象形式输出SHAP值
shap_obj = explainer(X_test)
print(shap_obj.values) # shap_values = shap_obj.values

2.4 绘制全局条形图

SHAP提供了一种全局特征重要性图的方法,这种方法考虑了所有样本,并计算每个特征的平均绝对SHAP值:

shap.plots.bar(shap_obj)

图片

2.5 绘制全局蜂群图

蜂群图(Beeswarm Plot)是另一种可视化特征重要性和影响的方法。蜂群图旨在显示数据集中的TOP特征如何影响模型输出的信息密集摘要。

shap.plots.beeswarm(shap_obj, show=True)   # 全局蜂群图

图片

给定解释的每个实例由每个特征流上的一个点表示;点的 x 位置由该特征的 SHAP 值 ( shap_values.value[instance,feature]) 确定,并且点沿每个特征行“堆积”以显示密度;

条形图与蜂群图的对比,条形图就只是展示了蜂群图的平均值。

作者简介:

读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

数据杂坛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值