R语言 不含“其他变量之和”的顶级预测变量的形状值蜜蜂图

disho6za  于 2022-12-20  发布在  其他
关注(0)|答案(2)|浏览(83)

我想生成一个由shap值分析所确定的目标的前15个预测因子的均温图,为此我使用了R shapviz命令:
plot=sv_importance(shp, kind="beeswarm", alpha=0.5, show_numbers=T, max_display=15)
然而,这个命令也在图形中绘制了Sum of x other的形状值。你有什么建议吗?

qybjjes1

qybjjes11#

如果我们有一个可重复的示例,回答起来总是比较容易,但我将创建一个示例来回答这个问题:

library(shapviz)

set.seed(1)

X_train <- data.matrix(`colnames<-`(replicate(26, rnorm(100)), LETTERS))
dtrain <- xgboost::xgb.DMatrix(X_train, label = rnorm(100))
fit <- xgboost::xgb.train(data = dtrain, nrounds = 50)
shp <- shapviz(fit, X_pred = X_train)

现在我们有了一个名为shp的shapviz对象,它有26个特性,所以这应该与您的情况相当。
如果使用sv_importance绘图,则会得到一个ggplot对象,从中可以看到第二个值是名为“Sum of 12 other”的不需要的行

p <- sv_importance(shp, kind = "beeswarm", show_numbers = TRUE, max_display = 15) 

p

为了消除这种情况,我们只需从绘图对象的数据中删除引用该数据点的行(它出现在绘图对象的两个不同数据框中,因此我们必须从2个数据框中删除行)

p$data <- p$data[!grepl("Sum of", p$data$feature),]
p$layers[[3]]$data <-  p$layers[[3]]$data[!grepl("Sum of", p$layers[[3]]$data$feature),]

现在,当我们再次绘制p时,有问题的行将被删除:

p

创建于2022年10月30日,使用reprex v2.0.2

zqry0prt

zqry0prt2#

由于这个问题,“shapviz”0.4.1现在接收了一个新的选项sv_importance(, show_other = FALSE)来控制它:

library(shapviz)

set.seed(1)

X_train <- data.matrix(`colnames<-`(replicate(26, rnorm(100)), LETTERS))
dtrain <- xgboost::xgb.DMatrix(X_train, label = rnorm(100))
fit <- xgboost::xgb.train(data = dtrain, nrounds = 50)
shp <- shapviz(fit, X_pred = X_train)

sv_importance(
  shp, kind = "bee", show_other = FALSE, max_display = 15, show_numbers = TRUE
)

相关问题