我正在使用 caret 包处理 GBM 模型,并希望找到一种方法来解决我的预测数据的预测区间。我进行了广泛的搜索,但只提出了一些想法来找到随机森林的预测区间。任何帮助/R代码将不胜感激!
如何找到 GBM 预测区间
机器算法验证
插入符号
预测区间
助推
2022-03-09 10:39:11
1个回答
编辑:正如在下面的评论中指出的那样,这给出了预测的置信区间,而不是严格的预测区间。对我的回复感到有点高兴,应该对此多加考虑。
随意忽略此答案或尝试构建代码以获取预测间隔。
我已经使用简单的引导程序创建了几次预测间隔,但可能还有其他(更好的)方法。
考虑包oil
中的数据,caret
假设我们想要生成部分依赖关系和 95% 的区间,以了解硬脂酸对 Palmitic 的影响。下面只是一个简单的示例,但您可以根据自己的需要随意使用它。确保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中使用了类似的方法
有时点估计在区间之外,但修改调整网格(即增加树的数量和/或深度)通常可以解决这个问题。
希望这可以帮助!
其它你可能感兴趣的问题