2016-12-05 61 views
0

我试图限制部分依赖关系图的x轴(以便有效区域得到放大)。我尝试过使用xlim选项,但没有奏效。限制gdm图上pdp图的轴范围R

我创建了一个简单的例子来重现问题:

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

我不知道为什么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)) 
+0

酷,谢谢。也许xlim不工作是一个错误?不知道如何检查和/或去哪里提交。 – Karsus

+0

你可以到[Github上的'gbm'包开发页面](https://github.com/harrysouthworth/gbm/issues)并将其作为'issues'选项卡中的潜在错误提交。 – eipi10

+0

我看了一下gbm仓库,他们有一个[pull request](https://github.com/gbm-developers/gbm/pull/119)修复了这个问题,但它还没有成为一个发布版本。 – Karsus

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)