如何找到GBM预测间隔


12

我正在使用插入符号包处理GBM模型,并希望找到一种方法来解决我的预测数据的预测间隔。我进行了广泛的搜索,但只提出了一些想法来找到随机森林的预测间隔。任何帮助/ R代码将不胜感激!

Answers:


4

编辑:正如下面的评论所指出的,这给出了预测的置信区间,而不是严格的预测区间。让我对我的答复感到满意,应该多加思考。

随意忽略此答案或尝试在代码上构建以获取预测间隔。


我已经使用简单的引导程序几次创建了预测间隔,但是可能还有其他(更好的)方法。

考虑包装中的oil数据,caret并假设我们要生成硬脂酸对Palmitic的影响的部分依赖性和95%的间隔。下面只是一个简单的示例,但是您可以根据需要进行操作。确保gbm包更新,以使grid.points论点plot.gbm

library(caret)
data(oil)
#train the gbm using just the defaults.
tr <- train(Palmitic ~ ., method = "gbm" ,data = fattyAcids, verbose = FALSE)

#Points to be used for prediction. Use the quartiles here just for illustration
x.pt <- quantile(fattyAcids$Stearic, c(0.25, 0.5, 0.75))

#Generate the predictions, or in this case, the partial dependencies at the selected points. Substitute plot() for predict() to get predictions
p <- plot(tr$finalModel, "Stearic", grid.levels = x.pt, return.grid = TRUE)

#Bootstrap the process to get prediction intervals
library(boot)

bootfun <- function(data, indices) {
  data <- data[indices,]

  #As before, just the defaults in this example. Palmitic is the first variable, hence data[,1]
  tr <- train(data[,-1], data[,1], method = "gbm", verbose=FALSE)

  # ... other steps, e.g. using the oneSE rule etc ...
  #Return partial dependencies (or predictions)

  plot(tr$finalModel, "Stearic", grid.levels = x.pt, return.grid = TRUE)$y
  #or predict(tr$finalModel, data = ...)
}

#Perform the bootstrap, this can be very time consuming. Just 99 replicates here but we usually want to do more, e.g. 500. Consider using the parallel option
b <- boot(data = fattyAcids, statistic = bootfun, R = 99)

#Get the 95% intervals from the boot object as the 2.5th and 97.5th percentiles
lims <- t(apply(b$t, 2, FUN = function(x) quantile(x, c(0.025, 0.975))))

这是这样做的一种方法,该方法至少尝试考虑调整gbm所引起的不确定性。http://onlinelibrary.wiley.com/doi/10.2193/2006-503/abstract中使用了类似的方法

有时,点估计在间隔之外,但是修改调整网格(即,增加树的数量和/或深度)通常可以解决该问题。

希望这可以帮助!


1
如果我正确理解您的代码,则预测的置信区间为95%。这与95%的预测间隔不同,后者增加了残差(随机)误差。
Hong Ooi 2014年

天哪!你是对的。回复太快了。谢谢,我将编辑我的答案。
ErikL 2014年

感谢帮助!我在使用引导程序功能时遇到问题。我在stats.stackexchange.com/questions/117329/…上发布了该问题。我不确定如何使用数据集正确设置引导功能。
CooperBuckeye14年

1
我想这不是我想要的,所以我还在寻找答案!
CooperBuckeye14年5
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.