如何在R中使用kernelshap与shapviz计算并绘制SHAP交互值?
在R中使用kernelshap和shapviz计算并可视化SHAP交互值
1. 安装并加载依赖包
首先安装所需R包:
install.packages(c("kernelshap", "shapviz", "xgboost", "dplyr"))
加载包:
library(kernelshap) library(shapviz) library(xgboost) library(dplyr)
2. 准备数据并训练模型
以mtcars数据集为例,训练回归模型作为演示:
# 拆分特征与目标变量 data(mtcars) X <- mtcars %>% select(-mpg) # 特征矩阵 y <- mtcars$mpg # 目标变量 # 训练XGBoost模型 dtrain <- xgb.DMatrix(data = as.matrix(X), label = y) model <- xgb.train( data = dtrain, nrounds = 50, objective = "reg:squarederror", verbose = 0 )
3. 计算SHAP交互值
使用kernelshap函数,通过interactions = TRUE参数触发交互值计算:
# 计算SHAP交互值 shap_results <- kernelshap( model = model, X = X, interactions = TRUE, verbose = 0 )
返回的shap_results对象包含常规SHAP值,以及存储交互SHAP值的矩阵S_inter。
4. 可视化SHAP交互值
利用shapviz的内置函数完成两类可视化:
单个特征对的交互效果
指定两个特征,展示它们的交互对预测值的影响:
sv <- shapviz(shap_results) sv_interaction(sv, feature1 = "wt", feature2 = "hp")
所有特征对的交互强度热图
直观展示所有特征间的交互强度:
sv_interaction_heatmap(sv)
补充说明
kernelshap兼容所有带有predict方法的模型(如随机森林、线性模型等),只需替换训练模型的代码即可。sv_interaction图中,颜色代表其中一个特征的取值,点的位置与颜色共同呈现两个特征交互对SHAP值的影响逻辑。
内容的提问来源于stack exchange,提问作者diggi2395
相关产品推荐
相关产品推荐

