首页 > 其他分享 >20240302|SHAP学习

20240302|SHAP学习

时间:2024-03-04 17:11:06浏览次数:19  
标签:SHAP 20240302 模型 解释器 shap 学习 values com

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

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_display) decision 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])

标签:SHAP,20240302,模型,解释器,shap,学习,values,com
From: https://www.cnblogs.com/denjimomotaro/p/18049344

相关文章

  • 强化学习学习路线
    1、强化学习介绍强化学习是指智能体通过与环境进行交互,不断的通过试错,以获得更大的累计奖励为目的,得到更好的策略。强化学习的学习路线比较陡峭,因为涉及到的数学知识更多一些,需要概率论、随机过程的知识。这里通过我自己的一些学习经验以及看过的一些资料,整理了一条逐渐深入的学......
  • 深度学习之模型压缩(剪枝、量化)
    随着深度学习的发展,模型变得越来越复杂,随之而来的模型参数也越来越多,对于需要训练的模型硬件要求也越来越高。模型压缩技术就是为了解决模型使用成本的问题。通过提高推理速度,降低模型参数量和运算量。现在主流的模型压缩方法包含两大类:剪枝和量化。模型的剪枝是为了减少参数量和......
  • st 算法学习笔记
    前言在看这篇文章之前,请先自行了解以下几项东西:1.倍增思想。2.动态规划思想。3.乘方位运算实现如有错误,欢迎各位dalao批评指出。什么是\(st\)算法?st算法是一种解决RMQ问题的算法。RMQ及RangeMinimum/MaximumQuery,即区间最大最小值查询。该算法采用了......
  • 黑马程序员JavaWeb学习笔记-过滤器
    过滤器--Filter过滤器Filter快速入门Filter拦截路径过滤器链Filter——流程importcom.alibaba.fastjson.JSONObject;importcom.itheima.pojo.Result;importlombok.extern.slf4j.Slf4j;importorg.springframework.util.StringUtils;importjavax.servlet.*;im......
  • 黑马程序员JavaWeb学习笔记-拦截器
    拦截器--Interceptor--快速入门@Component注解交给ioc容器管理--注册配置拦截器@Configuration注解用来标识当前是Spring当中的一个配置类//Interceptor拦截所有("/**")//Filter拦截所有("/*")//WebConfig需要在包下新建一个config包与controller同级//.excl......
  • 黑马程序员JavaWeb学习笔记-文件上传
    文件上传https://www.bilibili.com/video/BV1m84y1w7Tb/?p=150&spm_id_from=pageDriver&vd_source=62f4901d4d947272c439194b87ec6698当报错500时,服务端出现错误,因为默认最大为1M在application.properties里面修改文件上传的几个函数本地存储Controller层的代码import......
  • 黑马程序员JavaWeb学习笔记-登陆login
    登陆loginlogin是登陆业务方法,mapper接口是持久层,用来操作数据库的,用业务方法名不合适三层架构PostMan测试登陆校验http协议是无状态的,下次请求不会携带上次请求的数据,两次请求是独立的Cookie前后端分离项目中前端页面和后段接口部署在不同的服务器上,所以他们的协议......
  • 黑马程序员JavaWeb学习笔记-JavaScript
    JavaScript--JavaScript引入方式--书写语法--输出语句window可以省略--变量var特点1:作用域比较大,全局变量特点2:可以重复定义--数据类型原始数据类型相当于java中基础数据类型alert(parseInt("12"));//12alert(parseInt("12A45"));//12alert(parseInt("A4......
  • 黑马程序员JavaWeb学习笔记-HTML
    HTML-新浪新闻HTML格式化代码mac:sheft+option+Fwin:ctrl+alt+L--标题排版<!--文档类型为HTML--><!DOCTYPEhtml><htmllang="en"><head><!--字符集为UTF-8--><metacharset="UTF-8"><!--设置浏览器兼容性-->......
  • Java学习笔记——第五天
    方法什么是方法方法是一种语法结构,它可以把一段代码封装成一个功能,以便重复调用。定义方法时可以指定形参,形参没有实际意义,仅仅起到占位和提示实参种类的作用,名字要有意义。调用方法时可以指定实参,实参由实际意义,是方法运行时事实上使用的数值。return关键字可以用来......