Как найти интервал прогнозирования GBM

12

Я работаю с моделями GBM, используя пакет caret, и ищу способ решить интервалы прогнозирования для моих прогнозируемых данных. Я много искал, но выдвинул лишь несколько идей, чтобы найти интервалы прогнозирования для Случайного леса. Любая помощь / R код будет принята с благодарностью!

CooperBuckeye05
источник

Ответы:

4

РЕДАКТИРОВАТЬ: Как указано в комментариях ниже, это дает доверительные интервалы для прогнозов, а не строго интервалы прогнозирования . Был немного смущен моим ответом и должен был подумать об этом.

Не стесняйтесь игнорировать этот ответ или попытаться использовать код, чтобы получить интервалы прогнозирования.


Я использовал простой загрузчик для создания интервалов прогнозирования несколько раз, но могут быть и другие (лучшие) способы.

Рассмотрим oilданные в caretпакете и предположим, что мы хотим сгенерировать частичные зависимости и 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

Иногда оценка точки находится за пределами интервала, но изменение решающей сетки (т.е. увеличение количества деревьев и / или глубины) обычно решает это.

Надеюсь это поможет!

ErikL
источник
1
Если я правильно понимаю ваш код, то у вас есть 95% доверительный интервал для прогнозов. Это не то же самое, что интервал прогнозирования 95% , который добавляет остаточную (случайную) ошибку.
Hong Ooi
D'о! Ты прав. Был слишком быстр в ответе. Спасибо, я отредактирую свой ответ.
ErikL
Спасибо за помощь! У меня проблема, хотя с функцией начальной загрузки. Я разместил эту проблему на stats.stackexchange.com/questions/117329/… . Я не совсем уверен, как правильно настроить функцию начальной загрузки с моим набором данных.
CooperBuckeye05
1
Я думаю, на данный момент это не то, что я ищу, поэтому я все еще ищу ответ!
CooperBuckeye05