R语言机器学习与临床预测模型69--机器学习模型解释利器:SHAP

R小盐准备介绍R语言机器学习与预测模型的学习笔记, 快来收藏关注【科研私家菜】


01 机器学习的可解释性

对于集成学习方法,效果虽好,但一直无法解决可解释性的问题。我们知道一个xgboost或lightgbm模型,是由N棵树组成,所以对于特定的一个样本,我们无法知道这个样本的特征值是如何影响最终结果。虽说“不管白猫黑猫,抓住耗子的就是好猫”,但在具体任务中,我们还是希望能够获得样本每个特征与其结果之间的关系,特别是针对模型误分的那些样本,如果能够从特征和结果的角度进行分析,对于提高模型效果或是分析异常样本,是非常有帮助的。但是,其可解释性相对困难。
对于集成树模型来说,当做分类任务时,模型输出的是一个概率值。前文提到,SHAP是SHapley Additive exPlanations的缩写,即沙普利加和解释,因此SHAP实际是将输出值归因到每一个特征的shapely值上,换句话说,就是计算每一个特征的shapley值,依此来衡量特征对最终输出值的影响。

其原理及推到公式不再赘述。。。

02 SHAP的R语言实现

SHAP(SHapley Additive exPlanations)

library(tidyverse)
library(xgboost)
library(caret)
library(dplyr)
source("shap.R")bike <- read.csv("../shap-values-master/bike.csv",header = T)bike_2=select(bike, -days_since_2011, -cnt, -yr)bike_dmy = dummyVars(" ~ .", data = bike_2, fullRank=T)
bike_x = predict(bike_dmy, newdata = bike_2)## Create the xgboost model
model_bike = xgboost(data = bike_x, nround = 10, objective="reg:linear",label= bike$cnt)  ## Calculate shap values
shap_result_bike = shap.score.rank(xgb_model = model_bike, X_train =bike_x,shap_approx = F)# `shap_approx` comes from `approxcontrib` from xgboost documentation. 
# Faster but less accurate if true. Read more: help(xgboost)## Plot var importance based on SHAP
var_importance(shap_result_bike, top_n=15)## Prepare data for top N variables
shap_long_bike = shap.prep(shap = shap_result_bike,X_train = bike_x , top_n = 10)## Plot shap overall metrics
plot.shap.summary(data_long = shap_long_bike)## 
xgb.plot.shap(data = bike_x, # input datamodel = model_bike, # xgboost modelfeatures = names(shap_result_bike$mean_shap_score[1:10]), # only top 10 varn_col = 3, # layout optionplot_loess = T # add red line to plot)

效果如下:



03 SHAP R语言示例

data("iris")
X1 = as.matrix(iris[,-5])
mod1 = xgboost::xgboost(data = X1, label = iris$Species, gamma = 0, eta = 1,lambda = 0, nrounds = 1, verbose = FALSE)# shap.values(model, X_dataset) returns the SHAP
# data matrix and ranked features by mean|SHAP|
shap_values <- shap.values(xgb_model = mod1, X_train = X1)
shap_values$mean_shap_score
shap_values_iris <- shap_values$shap_score# shap.prep() returns the long-format SHAP data from either model or
shap_long_iris <- shap.prep(xgb_model = mod1, X_train = X1)
# is the same as: using given shap_contrib
shap_long_iris <- shap.prep(shap_contrib = shap_values_iris, X_train = X1)# **SHAP summary plot**
shap.plot.summary(shap_long_iris, scientific = TRUE)
shap.plot.summary(shap_long_iris, x_bound  = 1.5, dilute = 10)# Alternatives options to make the same plot:
# option 1: from the xgboost model
shap.plot.summary.wrap1(mod1, X = as.matrix(iris[,-5]), top_n = 3)# option 2: supply a self-made SHAP values dataset
# (e.g. sometimes as output from cross-validation)
shap.plot.summary.wrap2(shap_score = shap_values_iris, X = X1, top_n = 3)

效果如下:




关注R小盐,关注科研私家菜(VX_GZH: SciPrivate),有问题请联系R小盐。让我们一起来学习 R语言机器学习与临床预测模型



喜欢的朋友记得点赞、收藏、关注哦!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/13483.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Docker部署青龙面板,实现京东自动签到刷京东,提供脚本

项目简介 青龙面板是一个基于Docker的可视化任务管理系统&#xff0c;用于执行定时任务&#xff0c;如自动签到。 部署安装 安装Docker curl -sSL https://get.docker.com/ | sh 安装Docker-compose 下载 Docker-Compose 二进制包 curl -L https://github.com/docker/compo…

路径穿越浅析

当使用 RouterFunctions 来处理静态资源且资源处理通过 FileSystemResource 进行配置时&#xff0c;攻击者可以通过构造恶意 HTTP 请求&#xff0c;利用路径遍历漏洞获取相关受影响版本文件系统中的任意文件。 主要影响范围&#xff1a; Spring Framework 5.3.0 - 5.3.39 6.…

【网络安全渗透测试零基础入门】之Vulnhub靶场PWNOS: 2.0 多种渗透方法,收藏这一篇就够了!

前言 这是小强给粉丝盆友们整理的网络安全渗透测试入门阶段Vulnhub靶场实战教程 喜欢的朋友们&#xff0c;记得给我点赞支持和收藏一下&#xff0c;关注我&#xff0c;学习黑客技术。 本文介绍靶机PWNOS: 2.0 的渗透方法&#xff0c;由于靶机系统比较老&#xff0c;尝试了几种…

【缓存策略】你知道 Write Around(缓存绕过写)这个缓存策略吗?

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…

JavaScript入门笔记

目录 JavaScript 介绍 1.JavaScript书写位置 1.1内部 js 1.2外部 js 2.输入和输出语法 变量 1.变量是什么 2.变量基本使用 2.1变量的声明 2.2变量的赋值 3.数组 常量 数据类型 1.数据类型 1.1基本数据类型 1.1.1.number: 数字型 1.1.2.string: 字符串型 1.1.…

游戏引擎学习第七天

视频参考:https://www.bilibili.com/video/BV1QFmhYcE69 ERROR_DEVICE_NOT_CONNECTED 是一个错误代码&#xff0c;通常在调用 XInputGetState 或 XInputSetState 函数时返回&#xff0c;表示指定的设备未连接。通常会出现以下几种情况&#xff1a; 未连接控制器&#xff1a;如…

IDE内存不足,这可能会影响性能。请考虑增加堆大小。

警告信息&#xff1a;Low Memory The IDE is running low on memory and this might affect performance. Please consider increasing available heap. 解决方案&#xff1a; 重启即可。

Element plus使用menu时候如何在折叠时候隐藏掉组件自带的小箭头

记录一下工作中使用element plus时候遇到的一个小bug 就是这个小箭头太折磨人了&#xff0c;因为我需要根据路由动态加载menu&#xff0c;所以对这个menu组件进行了一些处理&#xff0c;然后可能是因为破坏了它原来的层级关系吧导致折叠菜单的时候这个小箭头还在&#xff08;官…

语义通信论文略读(七)Contrastive Learning-Based Semantic Communications

Contrastive Learning-Based Semantic Communications 基于对比学习的语义通信 作者: Shunpu Tang, Qianqian Yang, Lisheng Fan, Xianfu Lei, Arumugam Nallanathan, George K. Karagiannidis 所属机构: 广州大学计算机科学与网络安全学院&#xff0c;浙江大学信息科学与电…

windows下QT5.12.11使用MSVC编译器编译mysql驱动并使用详解

1、下载mysql开发库,后面驱动编译的时候需要引用到,下载地址:mysql开发库下载 2、使用everything搜索:msvc-version.conf,用记事本打开,添加:QMAKE_MSC_VER=1909。不然msvc下的mysql源码加载不上。

技术栈2:Git分布式版本控制工具

目录 1.版本控制器 2.Git概述 3.Git常用命令 4.获取本地仓库 5.基础操作指令 6.gitignore文件 7.分支与合并 8.远程仓库 1.版本控制器 1.1集中式版本控制器 集中式版本控制工具&#xff0c;版本库是集中存放在中央服务器的&#xff0c;team里每个人work时…

【ARM Coresight OpenOCD 系列 5 -- arp_examine 使用介绍】

文章目录 OpenOCD arp_examine 使用 OpenOCD arp_examine 使用 因为我们很多时候运行 Openocd 的时候有些 core 还没有启动, 所以最好在配置脚本中添加 -defer-examine这个参数, 如下&#xff1a; #cortex-m33 target create ${_CHIPNAME}.m33 cortex_m -dap ${_CHIPNAME}.da…

计算机毕业设计Python+大模型斗鱼直播可视化 直播预测 直播爬虫 直播数据分析 直播大数据 大数据毕业设计 机器学习 深度学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

CAN总线位同步的使用以及总线仲裁规则详解

目录 1. 位同步 1.1 位时序 1.2 硬同步 1.3 再同步 1.4 波特率计算 2. 仲裁 2.1 先占先得 2.2 非破坏性仲裁 1. 位同步 CAN总线没有时钟线&#xff0c;总线上的所有设备通过约定波特率的方式确定每一个数据位的时长&#xff0c;发送方以约定的位时长每隔固定时…

Python爬虫开发中的分析与方案制定

网站分析作为获取数据的重要手段&#xff0c;其重要性不言而喻。Python作为一种强大的编程语言&#xff0c;因其简洁的语法和强大的库支持&#xff0c;成为开发爬虫的首选工具。本文将深入探讨Python爬虫开发中的分析与方案制定&#xff0c;并在代码中加入代理信息&#xff0c;…

深入理解接口测试:实用指南与最佳实践5.0(一)

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…

基于Matlab 火焰识别技术

课题介绍 森林承担着为人类提供氧气以及回收二氧化碳等废弃气体的作用&#xff0c;森林保护显得尤其重要。但是每年由于火灾引起的事故不计其数&#xff0c;造成重大的损失。如果有一款监测软件&#xff0c;从硬件处获得的图像中监测是否有火焰&#xff0c;从而报警&#xff0…

Python酷库之旅-第三方库Pandas(209)

目录 一、用法精讲 976、pandas.MultiIndex.set_codes方法 976-1、语法 976-2、参数 976-3、功能 976-4、返回值 976-5、说明 976-6、用法 976-6-1、数据准备 976-6-2、代码示例 976-6-3、结果输出 977、pandas.MultiIndex.to_frame方法 977-1、语法 977-2、参数…

SQL 窗口函数

窗口函数用于在不改变查询结果集行数的情况下&#xff0c;对每一行执行聚合计算或其他复杂的计算&#xff0c;可以跨行计算。 随着窗口函数的出现&#xff0c;无须再使用关联子查询。窗口函数的可读性很好&#xff0c;代码也很简洁。 1 实践 1.1 营业额年度变化 需求&#…

36.Redis核心设计原理

本文针对前面的讲解做一次总结 1.Redis基本特性 1.非关系型的键值对数据库&#xff0c;可以根据键以O(1)的时间复杂度取出或插入关联值 2.Redis的数据是存在内存中的 3.键值对中键的类型可以是字符串&#xff0c;整型&#xff0c;浮点型等&#xff0c;且键是唯一的 4.键值对中…