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

时间:2016-12-05 11:40:18

标签: r gbm

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

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

如何让xlim正常工作(并将图形限制在2到3之间)?或者,有没有其他方法来实现这一目标?

2 个答案:

答案 0 :(得分:2)

我不确定为什么xlim参数在这里被忽略,因为它与gbm帮助中的示例一样正常工作。在任何情况下,您都可以使用return.grid参数plot.gbm来获取用于绘图的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))

答案 1 :(得分:0)

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