限制 R 处 gbm 包的 pdp 图上的轴范围

Limit axis range on pdp plot from gbm package at R

我正在尝试限制部分依赖图的 x 轴(以便有效地扩大感兴趣的区域)。我试过使用 xlim 选项,但没有用。

我创建了一个快速示例来重现该问题:

library(gbm)

xdata <- iris

# reformulate problem as binary classification
xdata$Species <- as.character(xdata$Species)
change.classes <- function(prev) {
  if (prev == 'setosa') {
    return(1)
  }
  else return(0)
}
ydata <- as.integer(sapply(xdata$Species, change.classes))
xdata$Species <- NULL

# train gbm model
set.seed(250)
fit <- gbm(ydata ~ ., data = xdata,
           distribution = 'bernoulli',
           n.trees = 100,
           interaction.depth = 3,
           n.minobsinnode = 10,
           shrinkage = 0.03,
           bag.fraction = 0.5,
           train.fraction = 1.0)

# plot partial dependency plot
plot.gbm(fit, i.var = "Petal.Length", n.trees = 95, xlim = c(2,3))

如下图所示 尽管我设置了 xlim,但 x 轴的范围从 1 到 7 涵盖了数据集的所有值。

如何使 xlim 正常工作(并将图形限制在 2 到 3 之间的范围内)?或者还有其他方法可以实现吗?

我不确定为什么 xlim 参数在这里被忽略,因为它在 gbm 帮助中的示例中按预期工作。在任何情况下,您都可以使用 plot.gbmreturn.grid 参数来获取用于绘图的 x 和 y 值,然后创建您自己的绘图。例如:

fit.dat = plot(fit, i.var="Petal.Length", n.trees=95, return.grid=TRUE)

plot(fit.dat$Petal.Length, fit.dat$y, type="l", xlim=c(2,3))

你也可以试试pdp包;这个包旨在为 R 中的各种类型的拟合模型构建 PDP。但是请注意,这个包更通用,并且没有利用与 GBM 相同的计算快捷方式。

# Development version works with gbm models
devtools::install_github("bgreenwell/pdp")

# Load the pdp package
library(pdp)

# Use plotPartial to change x-axis limits
fit %>%
  partial(pred.var = "Petal.Length", grid.resolution = 100, n.trees = 95) %>% 
  plotPartial(xlim = c(2, 3))

更好的是,创建您自己的预测值网格:

xgrid <- data.frame(Petal.Length = seq(from = 2, to = 3, length = 100))

partial(fit, pred.var = "Petal.Length", pred.grid = xgrid, 
        plot = TRUE, n.trees = 95)