【问题标题】:Limit axis range on pdp plot from gbm package at R在 R 的 gbm 包中限制 pdp 图上的轴范围
【发布时间】:2017-04-19 19:10:08
【问题描述】:

我试图限制部分依赖图的 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))

正如你可以看到下面的图片 x - 轴范围从 1 到 7 涵盖了数据集的所有值,尽管我设置了 xlim。

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

【问题讨论】:

    标签: r gbm


    【解决方案1】:

    我不确定为什么这里会忽略 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))
    

    【讨论】:

    • 酷,谢谢。也许 xlim 不工作是一个错误?不知道如何检查和/或去哪里提交。
    • 您可以转到gbm package development page on Github 并在issues 选项卡中将此作为潜在错误提交。
    • 我查看了 gbm 存储库,他们有一个 pull request 可以解决此问题,但尚未发布。
    【解决方案2】:

    你也可以试试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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-06
      • 1970-01-01
      相关资源
      最近更新 更多