我试图限制部分依赖图的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之间)?或者,有没有其他方法来实现这一目标?
答案 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)