我想生成一个由shap值分析所确定的目标的前15个预测因子的均温图,为此我使用了R shapviz命令:plot=sv_importance(shp, kind="beeswarm", alpha=0.5, show_numbers=T, max_display=15)然而,这个命令也在图形中绘制了Sum of x other的形状值。你有什么建议吗?
shapviz
plot=sv_importance(shp, kind="beeswarm", alpha=0.5, show_numbers=T, max_display=15)
Sum of x other
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”的不需要的行
shp
sv_importance
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
zqry0prt2#
由于这个问题,“shapviz”0.4.1现在接收了一个新的选项sv_importance(, show_other = FALSE)来控制它:
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 )
2条答案
按热度按时间qybjjes11#
如果我们有一个可重复的示例,回答起来总是比较容易,但我将创建一个示例来回答这个问题:
现在我们有了一个名为
shp
的shapviz对象,它有26个特性,所以这应该与您的情况相当。如果使用
sv_importance
绘图,则会得到一个ggplot对象,从中可以看到第二个值是名为“Sum of 12 other”的不需要的行为了消除这种情况,我们只需从绘图对象的数据中删除引用该数据点的行(它出现在绘图对象的两个不同数据框中,因此我们必须从2个数据框中删除行)
现在,当我们再次绘制
p
时,有问题的行将被删除:创建于2022年10月30日,使用reprex v2.0.2
zqry0prt2#
由于这个问题,“shapviz”0.4.1现在接收了一个新的选项
sv_importance(, show_other = FALSE)
来控制它: