机器学习模型SHAP解释——R语言
创作时间:
作者:
@小白创作中心
机器学习模型SHAP解释——R语言
引用
CSDN
1.
https://blog.csdn.net/weixin_52486108/article/details/137360918
SHAP(SHapley Additive exPlanations)是一种基于Shapley值理论的机器学习模型解释方法,能够将模型预测结果分解为每个特征的贡献,提供全局和局部的可解释性。本文将通过一个结直肠癌肝转移预测的案例,详细介绍如何使用R语言中的shapviz包对Xgboost模型进行SHAP值解释。
SHAP值简介
SHAP作为一种解释机器学习模型输出的方法,基于Shapley值理论,通过将模型预测结果分解为每个特征的贡献,为模型提供全局和局部的可解释性。在处理医学问题时,我们往往通过构建模型来寻找病因。需要注意的是,这种解释并非因果关系,与Logistic回归的OR值有区别,这种解释不是因果解释,我们不能因为预测变量shap值贡献大,而认为这个变量是结局变量的危险因素。这种关系,只能说明由于变量的贡献,能在多大程度上增加预测模型的准确率。
R语言实现SHAP解释
当前阶段,SHAP实现方法,大多数是基于Python,随着算法的流行,R语言也有了相关的SHAP解释。但是R的SHAP解释,目前应用的包是shapviz,这个包仅能对Xgboost、LightGBM以及H2O模型进行解释,其余的机器学习模型并不适用。
1. 加载相关包和数据
#install.packages("shapviz")
library(shapviz)
#install.packages("xgboost")
library(xgboost)
library(caret)
library(pROC)
library(tibble)
library(ROCit)
data =read.csv("data.csv",header = T,check.names = F)
2. 划分训练集和测试集
# 划分训练集和测试集
set.seed(123)#设置随机数
inTrain<-createDataPartition(y=data[,"Liver"], p=0.7, list=F)#划分训练集,设置训练集的比例为0.7
traindata<-data[inTrain,]#提取训练集数据
testdata<-data[-inTrain,]#提取验证集数据
3. 构建Xgboost模型
model_xgboost = xgboost(
data = as.matrix(traindata[,c(1:(ncol(traindata)-1))]),#训练集的自变量矩阵
label = traindata$Liver,
max_depth = 3,
eta = 1,
nthread = 2,
nrounds = 10,
objective = "binary:logistic")
4. 模型预测及AUC计算
#生成预测值
traindata$pred <- predict(model_xgboost, as.matrix(traindata[,c(1:(ncol(traindata)-1))]))
#计算AUC
ROC_train <- round(auc(response=traindata$Liver,predictor=traindata$pred),4)
ROC_train
#计算置信区间
CI_train=ci(response=traindata$Liver,predictor=traindata$pred)
CI_train
#通过那个paste0连接
AUC_CI_train=paste0("AUC=",round(CI_train[2],3),",95%CI (",round(CI_train[1],3)," - ",round(CI_train[3],3),")")
AUC_CI_train
5. 绘制ROC曲线
这里美化图片的原因是,中华系列杂志需要这样去绘图。
#整理数据,美化图片
ROC_data <- rocit(score=traindata$pred,class=traindata$Liver)
m1=tibble(
name="Model",
TPR=ROC_data$TPR,
FPR=ROC_data$FPR,
AUC=AUC_CI_test
)
pdf("ROC_train.pdf",5,5,family = "serif")
ggplot(m1,aes(x = FPR, y = TPR)) +
geom_path() +
labs(title= " ",
x = "False Positive Rate (1-Specificity)",
y = "True Positive Rate (Sensitivity)")+
geom_abline(lty = 3) +
theme_classic()+
annotate("text", x = 0.6 , y = 0.2,label = AUC_CI_test,colour="black")+
scale_y_continuous(expand=c(0,0))+
scale_x_continuous(expand=c(0,0))+
theme(
axis.ticks.length=unit(-0.1, "cm"),
legend.position = c(0.7, 0.2),
legend.title = element_blank(),
strip.background = element_blank(),
text = element_text(size = 15,color="black")#face="bold"
)
6. 计算SHAP值并绘图
#单个样本力图
sv_force(shap_xgboost,row_id = 2)
#去掉图片灰色背景
sv_importance(shap_xgboost,kind = "beeswarm")+theme_bw()
变量重要性柱状图:
sv_importance(shap_xgboost)+theme_bw()
sv_dependence(shap_xgboost, "T",
alpha = 0.5,
size = 1.5,
color_var = NULL)+theme_bw()
多个变量偏相关依赖图:
sv_dependence(shap_xgboost,
v = c("Sex",
"Grade",
"Histologic",
"Surg"))+theme_bw()
以上就是R的Xgboost模型的SHAP解释。
热门推荐
DHCP原理最全详解
梦见打自己的小孩:解析与心理解读
掌握这5个烹饪技巧,让你厨艺大增,下厨做菜不用求人,太实用了
三大人民币汇率指数均下跌,CFETS指数按周跌0.24
碘伏可以治脚气吗?正确治疗和预防脚气的方法
碘伏消毒液介绍
如何在电脑上隐藏任务栏以获得更大屏幕空间
水墨屏的护眼效果是否显著(探索水墨屏在保护眼睛方面的意义和局限性)
顺宝安教育优质均衡之势 创湾区一流公办教育集团
人格分裂的意思是什么
眩晕症的表现症状及治疗方法
源氏与平氏:日本历史中的交织命运
源平合战:日本历史上的重大转折
房屋出租给个人:税率、所需材料及电器损坏赔偿指南
电机防水等级怎么区分,了解电机防水等级的划分方法
游戏主播培训指南:从入门到职业发展
多所高校降低转专业门槛,如何实施?有何影响?
小儿双黄连口服液的作用与使用注意事项
灿烂的广府
集中供热系统与分户供热分析
中央空调分户计费系统:公平分摊能耗费用的解决方案
心梗发作时最佳的急救方法是什么
如何正确安装排气风扇?排气风扇安装有哪些注意事项?
劳务合同工资标准及相关法律问题详解
被乱投喂的网红动物们现状:可可西里肥狼多了还挑食,趵突泉鲤鱼已禁喂
《少年游》柳永晚年所作,堪称其备库一生的高度概括
如何分析和优化户型图设计?这些设计如何影响居住体验?
吃了甜食心慌气短是什么原因
自驾游好还是坐飞机好一点?细致分析两者的优缺点
广州番禺区:捧银过大年 传统民俗玩出新花样