顶刊复现:机器学习解释利器—SHAP实战【免费获取】

声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类算法的家人,可关注我的VX公众号:python算法小当家,不定期会有很多免费代码分享~ 

🎉今天分享一个实用的机器学习模型解释工具——SHAP(SHapley Additive exPlanations)。构建一个高性能的模型只是成功的一部分,能够解释模型的预测结果才是关键。SHAP 就是这样一个神奇的工具,它能帮我们理解每个特征对模型预测的贡献。今天的文章会手把手教你如何使用 SHAP,输入实际数据进行分析,同时可保留图片,带完整的代码示例,让你轻松上手!拿去就能用!代码获取见文末


01 SHAP缘起何处

        SHAP 主 要 思 想 来 自 于 组 合 博 弈 论 中 的 Shapley 值,Shapley 值是用来公平分配合作博弈中各参与者的贡献的一种方法。应用到机器学习中,SHAP通过计算特征在不同组合中的边际贡献,来解释每个特征对预测结果的影响。

图片

使用SHAP的原因:
  1. 模型的黑盒特性:现代机器学习模型,尤其是深度学习模型和集成方法(如随机森林和梯度提升树),通常被视为“黑盒子”。尽管它们的预测性能很高,但由于其复杂性,难以理解每个特征在预测中的具体作用。SHAP通过量化每个特征对模型预测的贡献,帮助我们打开这个“黑盒子”,使模型变得更加透明。

  2. 解释模型预测:SHAP能够量化每个特征对模型预测的贡献,帮助我们理解模型的决策过程。这样,我们可以清楚地知道模型为何会给出某个预测结果。

  3. 提升模型透明度:通过解释模型预测结果,增加模型的透明度和可信度,尤其是在医疗、金融等对模型解释性要求高的领域。这对于向非技术人员解释模型决策尤为重要。

  4. 改进模型:理解特征对预测结果的影响后,可以针对性地改进特征工程或模型结构,提高模型性能。通过了解哪些特征对预测结果最重要,可以优化特征选择和模型调参过程。

02 SHAP可视化展示

所用数据为加利福尼亚房价数据集,详细介绍如下所示:

图片


SHAP Waterfall Plot

        SHAP Waterfall Plot展示出模型预测值的构成,并显示了每个特征对预测结果的贡献。图中的每个条形代表一个特征的SHAP值,正值和负值分别表示该特征对预测结果的正向和负向贡献。图中的数值则表示具体的SHAP值大小,颜色用于区分正负贡献。

import xgboostimport shap# train an XGBoost modelX, y = shap.datasets.california()model = xgboost.XGBRegressor().fit(X, y)# explain the model's predictions using SHAP# (same syntax works for LightGBM, CatBoost, scikit-learn, transformers, Spark, etc.)explainer = shap.Explainer(model)shap_values = explainer(X)# visualize the first prediction's explanationshap.plots.waterfall(shap_values[0])shap.plots.waterfall(shap_values[0], show=False)# 保存图像

图片

SHAP Force Plot

        SHAP Force Plot用于解释单个预测结果。红色条表示正向贡献,蓝色条表示负向贡献。特征值越高,红色条越长,对预测结果的提升越大;蓝色条越长,对预测结果的降低越大。图中的基准值是模型的平均输出值,中间的预测结果展示了各特征综合作用后的最终结果。这种图表直观地显示了各特征在预测过程中的重要性和影响方向。

#SHAP force plot 提供了单一模型预测的可解释性,可用于误差分析,找到对特定实例预测的解释。shap.initjs()shap.plots.force(shap_values[0],matplotlib=True,show = True

图片

SHAP Scatter Plot

        SHAP Scatter Plot展示特定特征的SHAP值与实际值之间的关系,帮助理解特征在模型中的作用。横轴表示特征的实际值(如纬度),纵轴表示该特征的SHAP值。颜色表示另一特征的值(如经度),颜色越深表示特征值越高。这个图不仅展示特征值与SHAP值的关系,还能通过颜色观察其他特征对预测结果的影响,直观揭示特征间的交互作用及其对模型预测的综合影响。

shap.plots.scatter(shap_values[:, "Latitude"], color=shap_values)

图片

SHAP Beeswarm Plot

        SHAP Beeswarm Plot 用于展示模型解释结果。它将所有特征的 SHAP 值(即特征对模型预测结果的贡献值)绘制在一个图中,每个点代表一个样本。横轴表示 SHAP 值,显示特征对预测结果的影响大小和方向。颜色编码表示特征值的大小,从浅蓝到深粉依次表示特征值从低到高。通过观察 SHAP 蜂群图,可以直观地了解每个特征在不同样本中的贡献情况,揭示特征与预测结果之间的复杂关系。

shap.plots.beeswarm(shap_values, show=False)# 调整图形大小fig = plt.gcf()fig.set_size_inches(8, 6)  # 设置图形大小# 设置标题和字体大小plt.title("SHAP Summary Plot", fontsize=16)plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
# 蜂群图3 另一种配色shap.plots.beeswarm(shap_values,max_display=15,                    color=plt.get_cmap("cool"), show=False)# 调整图形大小fig = plt.gcf()fig.set_size_inches(8, 6)  # 设置图形大小# 设置标题和字体大小plt.title("SHAP Summary Plot", fontsize=16)plt.xticks(fontsize=12)plt.yticks(fontsize=12)

图片

SHAP Summary Plot

        SHAP Summary Plot是一种用于展示特征重要性和影响的可视化工具。横轴表示 SHAP 值,显示各特征对模型预测结果的影响大小。图中每个特征对应一个水平条形图,条形长度表示特征的重要性,即其 SHAP 值的平均绝对值。特征按重要性排序,最重要的特征在最上方。这种图表能够直观地展示哪些特征对模型的预测结果影响最大,帮助用户理解模型的行为和决策依据。

# 生成SHAP摘要图shap.plots.bar(shap_values, show=False)# 调整图形大小fig = plt.gcf()fig.set_size_inches(8, 6)  # 设置图形大小,根据需要调整# 设置标题和字体大小#plt.title("SHAP Summary Plot", fontsize=16)plt.xticks(fontsize=12)plt.yticks(fontsize=12)

图片

        以上可视化结果可通过代码定义标题、修改图像大小、保留成png等格式。因篇幅有限,小当家展示其中最具特色的几个图,完整代码获取见文末。

03 SHAP可解释性分析

1. SHAP Waterfall Plot

这个图展示了每个特征对单个预测结果的贡献。MedInc 对预测结果有最大的正向影响(+1.71),而 Latitude 和 Population 则有负向影响。Longitude 和 AveRooms 也有明显贡献。这帮助我们理解了特定预测值的构成。

2. SHAP Force Plot

SHAP Force Plot 解释了一个单独预测的组成部分。红色表示正向影响,蓝色表示负向影响。MedInc 对预测结果有很大的正向贡献,Latitude 和 Population 则有负向贡献。这个图直观展示了各特征如何共同作用形成最终预测结果。

3. SHAP Scatter Plot

SHAP Scatter Plot 展示了 Latitude 的实际值与其 SHAP 值之间的关系。Latitude 的 SHAP 值随实际值增加而减少,颜色显示 Longitude 值对结果的影响。这个图揭示了 Latitude 和 Longitude 之间的交互作用及其对模型预测的影响。

4. SHAP Beeswarm Plot

SHAP Beeswarm Plot 将所有特征的 SHAP 值绘制在一个图中,每个点代表一个样本。Latitude 和 Longitude 是影响最大的特征,颜色显示特征值变化对 SHAP 值的影响。这个图帮助我们了解不同特征在所有样本中的贡献情况和特征值分布。

5. SHAP Summary Plot

SHAP Summary Plot 展示了所有特征的重要性和影响。Latitude、Longitude 和 MedInc 是最重要的特征,对预测结果有最大的影响。通过这个图,我们可以清晰地看到哪些特征对模型的预测结果最为重要,并理解特征的重要性排序。

04 代码获取

关注VX公众号python算法小当家,后台回复关键字,即可免费获得完整代码

shap

可后台回复需求定制模型,看到秒回

  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值