我以前try 使用随机森林来可视化Shap值的结果.

我正在使用这段代码:

# Load necessary libraries
library(randomForest)
library(DALEX)
library(beeswarm)

data <- turismo_rf

# Split the data into features and target
features <- data[, -which(names(data) %in% "Clus.1")]
target <- data$Clus.1

# Train a random forest model
rf_model <- randomForest(features, target)

# Create an explainer object
explainer <- DALEX::explain(rf_model, data = features, y = target)

# Compute SHAP values
shapley_values <- DALEX::predict_parts(explainer, new_observation = features)

# Plot bee swarm
beeswarm(shapley_values$shap_1)

问题是我试着用beeswarm package

但我总是收到这样的错误:

beeswarm(shapley_values$shap_1)
Error in rep(nms, sapply(x, length)) : invalid 'times' argument

你能告诉我蜂群出了什么问题吗?

Output I want to do

And this is the output I get,如果我只用plot(shapley_values)的话

推荐答案

{Dalex}不支持绘制/处理multiple个观测值的Shap值.使用{shapviz}可以轻松绘制Shap蜂群图.计算Shap值可以通过不同的包来完成,例如,{kernelshap}、{fast shap}或{treeshap}.

请注意,随机森林是SHAP最差的森林之一,因为树很深,预测非常慢.

核形状或排列形状

library(randomForest)
library(kernelshap)  # or library(treeshap)
library(shapviz)

fit <- randomForest(Sepal.Length ~ ., data = iris)

xvars <- setdiff(colnames(iris), "Sepal.Length")

# Or kernelshap() if length(xvars) is >10. Subsample bg_X to 100-500 rows
shap_values <- permshap(fit, X = iris, bg_X = iris, feature_names = xvars)
shap_values <- shapviz(shap_values)
sv_importance(shap_values, kind = "bee")

enter image description here

R相关问答推荐

在特定列上滞后n行,同时扩展框架的长度

更新合适的R mgcv::bam模型报告无效类型(关闭).'';错误

对lme 4对象运行summary()时出错(diag中的错误(from,names = RST):对象unpackedMatrix_diag_get找不到)

使用R的序列覆盖

如何按排序顺序打印一个框架中所有精确的唯一值?

derrr mutate case_when grepl不能在R中正确返回值

将向量组合到一个数据集中,并相应地命名行

如何自定义3D散点图的图例顺序?

如何使用ggplot对堆叠条形图进行嵌套排序?

如何使用tryCatch执行语句并忽略警告?

如何将R中数据帧中的任何Nas替换为最后4个值

如何基于两个条件从一列中提取行

Data.table';S GForce-将多个函数应用于多列(带可选参数)

为什么在BASE R中绘制线条时会看到线上的点?

正在导出默认的RStudio主题,还是设置括号 colored颜色 ?

列名具有特殊字符时的循环回归

如何计算每12行的平均数?

如果极点中存在部分匹配,则替换整个字符串

使用dqur在不同变量上创建具有多个条件的变量

如何创建直方图与对齐的每月箱?