限制 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.gbm
的 return.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)
我正在尝试限制部分依赖图的 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 正常工作(并将图形限制在 2 到 3 之间的范围内)?或者还有其他方法可以实现吗?
我不确定为什么 xlim
参数在这里被忽略,因为它在 gbm
帮助中的示例中按预期工作。在任何情况下,您都可以使用 plot.gbm
的 return.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)