EDYCJA: Jak wskazano w komentarzach poniżej, daje to przedziały ufności dla prognoz, a nie ściśle przedziały prognozowania . Byłem trochę zadowolony z mojej odpowiedzi i powinienem to przemyśleć.
Zignoruj tę odpowiedź lub spróbuj zbudować kod, aby uzyskać przedziały prognozowania.
Użyłem prostego bootstrapu do tworzenia interwałów przewidywania kilka razy, ale mogą istnieć inne (lepsze) sposoby.
Rozważ oil
dane w caret
pakiecie i załóżmy, że chcemy wygenerować częściowe zależności i przedziały 95% dla efektu Stearic na Palmitic. Poniżej znajduje się tylko prosty przykład, ale możesz bawić się nim w zależności od potrzeb. Upewnij się, że gbm
pakiet jest zaktualizowany, aby umożliwić grid.points
argument wplot.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))))
Jest to jeden ze sposobów, aby to zrobić, które przynajmniej starają się wyjaśnić niepewności wynikające z dostrajania GBM. Podobne podejście zastosowano w http://onlinelibrary.wiley.com/doi/10.2193/2006-503/abstract
Czasami oszacowanie punktowe jest poza przedziałem, ale modyfikacja siatki strojenia (tj. Zwiększenie liczby drzew i / lub głębokości) zwykle rozwiązuje ten problem.
Mam nadzieję że to pomoże!