20240302|SHAP学习

第一次做学习笔记,也是方便归纳材料方法

1.什么是shap

SHAP,即 Shapley Additive exPlanations,是一个用于解释机器学习模型输出的 Python 库。基于博弈论中的 Shapley 值理论,模型解析得到的shap value需要满足可加性(additivity)性质,将模型的预测值解释为二元变量的线性函数,来理解每个特征对模型预测的贡献度。首先选择一种explainer解释器,基于原模型的样本进行训练。解决了多重共线性问题- 不仅考虑单个变量的影响,而且考虑变量之间的协同效应,可以体现出不同参数组合对模型的贡献度。也就是说,可以给出模型优化方案

2.基本原理公式:

手把手教你使用SHAP(机器学习模型解释工具)-腾讯云开发者社区-腾讯云 (tencent.com)

cloud.tencent.com/developer/article/2075753

3.重要功能

SHAP value最大的优势是SHAP能对于反映出每一个样本中的特征的影响力,而且还表现出影响的正负性。

SHAP:Python的可解释机器学习库 - 知乎 (zhihu.com)

 均值柱状图shap.plots.bar(shap_values)

shap.plots.beeswarm(shap_values)蜂群图 一种散点图,点的分布更加规律

shap.decision_plot(expected_value, shap_values, features_displaydecision plot

决策图显示的信息与力图基本相同。灰色垂直线是基础值 ,红线表示每个特征是否将输出值移动到高于或低于平均预测的值。

这张图比前一张图更清晰和直观,尤其是要分析的特征比较多的时候。在力图中,当预测变量的数量较多时,信息可能看起来非常紧凑

再见"黑匣子模型"!SHAP 可解释 AI (XAI)实用指南来了! - 知乎 (zhihu.com)

 

 

4.图片大小调整

python shap如何调整图片大小 - CSDN文库

用matplotlib shap.initjs()  shap.set_matplotlin_formats(dpi=100)

 

5.实际代码

[xgboost+shap]解决二分类问题笔记梳理_shap 分类问题shap_interaction_values-CSDN博客

 图片优化与介绍让 SHAP 输出比优雅更优雅的图表 - 墨天轮 (modb.pro)

6.将SHAP用于特征选择和超参数调优

7.和lime的关系

模型无关可解释方法LIME 和SHAP概述 - 知乎 (zhihu.com)

 

8.不同的解释器代码PyTorch中的SHAP值:KernelExplainer与DeepExplainer|极客教程 (geek-docs.com)

DeepExplainer是SHAP库中的一种基于深度学习的解释器。它通过使用深度学习模型的梯度信息来计算每个特征对预测结果的SHAP值。DeepExplainer适用于基于神经网络的模型,并且在训练数据集较大的情况下可以获得更准确的结果。【深度模型可解释性】SHAP算法之实操 - 知乎 (zhihu.com)

KernelExplainer是SHAP库中的一种基于核函数的解释器。它通过对模型进行近似拟合,从而计算每个特征对预测结果的SHAP值。KernelExplainer适用于任何类型的模型,包括黑盒模型,在训练数据集较小的情况下也可以获得较好的近似效果。这是一个通用工具,适用于各种机器学习模型。其采用基于权重的线性回归方法来估计 SHAP 值,为模型提供全面而可靠的解释。归因分析笔记6:SHAP包使用及源码阅读_python shap包-CSDN博客

  1. deep:用于深度学习模型的解释器。
  2. gradient:基于梯度的解释器,适用于多种类型的模型。
  3. kernel:基于核方法的解释器,适用于各种模型,但计算成本可能较高。
  4. tree:专门用于树模型的解释器,支持如XGBoost、LightGBM、CatBoost等常用的树集成算法。
  5. sampling:基于采样的解释器,适用于大规模数据集
  6. import xgboost
    import shap
    
    # 训练一个 XGBoost 模型
    X, y = shap.datasets.california()
    model = xgboost.XGBRegressor().fit(X, y)
    
    # 使用 SHAP 解释模型的预测
    # (相同的语法适用于 LightGBM、CatBoost、scikit-learn、transformers、Spark 等)
    explainer = shap.Explainer(model)
    shap_values = explainer(X)
    
    # 可视化第一个预测的解释
    shap.plots.waterfall(shap_values[0])
posted @   普通人电次  阅读(756)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示