EDIT: Wie in den Kommentaren unten ausgeführt, gibt dies die Konfidenzintervalle für Vorhersagen und nicht ausschließlich die Vorhersageintervalle an . War etwas auslöserisch mit meiner Antwort zufrieden und hätte diesbezüglich etwas extra überlegen sollen.
Sie können diese Antwort ignorieren oder versuchen, auf dem Code aufzubauen, um die Vorhersageintervalle zu erhalten.
Ich habe den einfachen Bootstrap ein paar Mal zum Erstellen von Vorhersageintervallen verwendet, aber es gibt möglicherweise andere (bessere) Möglichkeiten.
Betrachten Sie die oil
Daten im caret
Paket und nehmen Sie an, dass wir partielle Abhängigkeiten und 95% -Intervalle für die Wirkung von Stearic auf Palmitic erzeugen möchten. Im Folgenden finden Sie nur ein einfaches Beispiel, aber Sie können damit herumspielen, um es Ihren Bedürfnissen anzupassen. Stellen Sie sicher, dass das gbm
Paket aktualisiert wurde, um das grid.points
Argument zuzulassenplot.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))))
Dies ist eine Möglichkeit, die zumindest versucht, die Unsicherheiten zu berücksichtigen, die sich aus der Abstimmung des GbM ergeben. Ein ähnlicher Ansatz wurde in http://onlinelibrary.wiley.com/doi/10.2193/2006-503/abstract verwendet
Manchmal liegt die Punktschätzung außerhalb des Intervalls, aber das Ändern des Abstimmungsrasters (dh das Erhöhen der Anzahl der Bäume und / oder der Tiefe) löst dies normalerweise.
Hoffe das hilft!