本文在SHAP解析模型之后,又尝试了一些SHAP新版本的进阶用法,整理并与大家分享.

1 环境配置

以下实验使用当前最新版本shap:0.41.0,同时安装xgboost作为预测模型,并使用较高版本的matplotlib(低版本有时画图报错).

$ pip install shap==0.41.0
$ pip install xgboost==0.82
$ pip install matplotlib==3.5.2

2 实验数据

仍延用波士顿房价数据集,由于有些方法需要explainer对象,因此构造了shap_value_obj

import shap
import xgboost
X,y = shap.datasets.boston()model = xgboost.train({"learning_rate": 0.01}, xgboost.DMatrix(X, label=y), 100)
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X)
shap_values_obj = explainer(X)

3 单特征实验

首先,尝试一些单特征分析方法.

3.1 分析单个实例

在图中主要关注base_value,它是预测的均值,而f(x)展示了该实例的具体预测值,红色和蓝色区域的颜色和宽度展示了主要特征的影响和方向.

shap.force_plot(explainer.expected_value, shap_values[0,:], X.iloc[0,:])

3.2 决策图

决策图可在一张图上展示多个实例的特征对结果的影响,一般情况下,位置越靠上的特征影响越大.本例中设定feature_order=‘hclust’,则是按shap value进行聚类,再按特征的相关度排序,因此线条看起来比较直;其x轴描述的是各个特征对最终预测值拉扯的方向和力度.
使用该方法也可以用于异常值检测,如果有一条线明显与其它线的方向不同,则可能是异常值.

features = X[:20] # 只分析前20个样本
shap_values = explainer.shap_values(features)
shap.decision_plot(explainer.expected_value, shap_values, features, feature_order='hclust')

3.3 热力图

热力图的横轴是每个实例,纵轴是每个特征对该实例的影响,用颜色描述该特征对该实例的影响方向和力度,比如x轴在300附近的实例,其预测值f(x)在0.5附近,原因是LSTAT对它起到正向作用,而RM对它起负向作用,其它特征影响比较小(浅色).

shap.plots.heatmap(shap_values_obj)

4 特征组合实验

特征组合是数据分析的重要因素,下面实验对特征组合的挖掘方法.

4.1 带聚类的特征图

先对shap value做聚类,此时shap_value值类似的实例被分成一组,相关性强的特征就能显现出来,再画条形图时,展示了特征的相关性.

clustering = shap.utils.hclust(X, y)
shap.plots.bar(shap_values_obj, clustering=clustering,clustering_cutoff=0.5)

4.2 依赖图

依赖图分析一个特征对另一个特征的影响,示图类似shap散点图,横坐标为特征"RM"的取值范围,纵坐标为其取值对应的shap value,颜色分析的是另一特征"RAD"在"RM"变化过程中的分布.

shap.dependence_plot("RM", shap_values_obj.values, X, interaction_index='RAD')

4.3 交互图

交互图对角线上展示的是该特征与预测值的关系,它与最普通的shap plot相一致,对角线以外其它位置是特征两两组合对预测的影响.每个子图的横坐标为shap value,也就是说,子图越宽,该特征组合对结果影响越大.

shap_interaction_values = explainer.shap_interaction_values(X)
shap.summary_plot(shap_interaction_values, X)

4.4 特征组合的影响

将交互图按特征重要性排序后绘图.个人认为下图非常有用,它将单特征与特征组合画在一张图中,可以从中分析出哪些特征组合更为重要.

shap_interaction_values = explainer.shap_interaction_values(X)
shap.summary_plot(shap_interaction_values, X, max_display=10, plot_type="compact_dot")

5 参考

用 SHAP 可视化解释机器学习模型实用指南(下)
数据科学家必备|可解释模型SHAP可视化全解析

SHAP解释模型(二)相关推荐

  1. SHAP | 机器学习模型解释库

    来源:大邓和他的Python SHAP机器学习模型解释库 想象一下,你正试图训练一个机器学习模型来预测广告是否被特定的人点击.在收到关于某人的一些信息后,模型预测某人会不会点击广告. 但是为什么模型会 ...

  2. 【阅读笔记】应用LRP,通过将相关性从模型的输出层反向传播到其输入层来解释基于RNN的DKT模型(二)

    提示:Interpreting Deep Learning Models for Knowledge Tracing与Towards Interpretable Deep Learning Model ...

  3. Paper:《A Unified Approach to Interpreting Model Predictions—解释模型预测的统一方法》论文解读与翻译

    Paper:<A Unified Approach to Interpreting Model  Predictions-解释模型预测的统一方法>论文解读与翻译 导读:2017年11月25 ...

  4. 李宏毅的可解释模型——三个任务

    1.问题 观看了李宏毅老师的机器学习进化课程之可解释的机器学习,课程中对主要是针对黑盒模型进行白盒模型转化的技巧和方法进行了简单介绍,详细细节可以参考<Interpretable Machine ...

  5. Python 建立流域三层蒸发和蓄满产流模型(二水源划分)

    Python 建立流域三层蒸发和蓄满产流模型 流域三层蒸发和蓄满产流简要 三层蒸发模式 蓄满产流量计算 二水源划分 编程前言 代码 含水量变化模型 三层蒸发模型 蓄满产流量模型 二水源划分 总结 流域 ...

  6. 23种设计模式C++源码与UML实现--解释模型

    解释模型 一些应用提供了内建的脚本或者宏语言来让用户可以定义它们能够在系统中进行的操作.Interpreter模式的目的就是使用一个解释器为用户提供一个一门定义语言的语法表示的解释器,然后通过这个解释 ...

  7. Django模型(二)

    Django模型(二) 文章目录 Django模型(二) 一.字段查询 1.查看mysql数据库日志 二.条件运算符 1.查询等 2.模糊查询 3.空查询 4. 范围查询 5. 比较查询 6).日期查 ...

  8. mvc 视图和模型的对应_通过在酒吧订购饮料来解释模型视图控制器(MVC)

    mvc 视图和模型的对应 by Kevin Kononenko 凯文·科诺年科(Kevin Kononenko) 通过在酒吧订购饮料来解释模型视图控制器(MVC) (Model-View-Contro ...

  9. Linux设备驱动模型二 kobject

    Linux设备驱动模型二 kobject 1 kobject 1.1 kobject数据结构 kobject是sysfs文件系统的基础数据结构,它定义在include/linux/kobjec.h中 ...

  10. 独家 | 机器学习解释模型:黑盒VS白盒(附资料链接)

    作者:Lars Hulstaert 翻译:吴金笛 校对:Nicola 本文约2000字,建议阅读9分钟. 本文将讨论一些可用于解释机器学习模型的不同技术. 大多数机器学习系统需要能够为利益相关者解释为 ...

最新文章

  1. Verilog中Dump函数及用法
  2. ASP.NET MVC扩展库
  3. styled-components解决全局样式‘injectGlobal‘ 废除的问题
  4. 【BUG】小米5中 video.js 在钉钉 webview 中全屏后 后退无法弹出虚拟键盘
  5. 计算机和公文写作买什么资料,公文写作和计算机应用笔试和复习大纲资料.doc...
  6. MATLAB画图命令zz
  7. 从串口驱动的移植看linux2.6内核中的驱动模型 platform device platform driver【转】...
  8. ansible之二:模块用法
  9. WEB消息提醒实现之一 背景
  10. X86汇编语言从实模式到保护模式09:32位x86处理器编程架构
  11. 安卓Android Support Design Library——Snackbar
  12. const应用(C、C++)
  13. mysql的执行局计划
  14. Spring Boot 核心配置文件,yml 语法规范、 多环境配置、配置文件加载顺序
  15. 国产Linux二十年揭秘
  16. 移动硬盘坏点测试软件,移动硬盘坏道检测修复
  17. Delphi外挂制作
  18. java setbounds无效_为什么即使将setLayout()设置为null后,setBounds()方法也不起作用? - java...
  19. 结合RocketMQ 源码,带你了解并发编程的三大神器
  20. python求加速度_【掌控】mpython-加速度-水平仪 - DF创客社区 - 分享创造的喜悦

热门文章

  1. Android 自定义锁屏的实现
  2. 搜狐狐友社交软件可以组合各个产品的用户量
  3. qchart 怎么点击一下 出一条线_动漫日系雨伞怎么画?教你用集中线尺画一把日本雨伞!...
  4. 江西2万余个村庄整治建设 古村落旧貌换新颜
  5. 2007世界各国GDP排名
  6. Windows下使用Grub4dos无损(无需格式化)制作Windows/Linux双引导U盘并引导ISO镜像
  7. git rebase
  8. 撤消 git rebase
  9. linux下内存测试mbw,内存测试工具mbw分析
  10. Debian10安装部署DNS服务-正向解析篇