EDIT: Comme indiqué dans les commentaires ci-dessous, cela donne les intervalles de confiance pour les prédictions et non strictement les intervalles de prédiction . Était un peu déclencheur satisfait de ma réponse et aurait dû y réfléchir un peu plus.
N'hésitez pas à ignorer cette réponse ou essayez de vous baser sur le code pour obtenir les intervalles de prédiction.
J'ai utilisé le bootstrap simple pour créer des intervalles de prédiction à quelques reprises mais il peut y avoir d'autres (meilleures) façons.
Considérez les oil
données du caret
package et supposons que nous voulons générer des dépendances partielles et des intervalles de 95% pour l'effet de Stearic sur Palmitic. Ci-dessous est juste un exemple simple, mais vous pouvez jouer avec pour répondre à vos besoins. Assurez-vous que le gbm
package est mis à jour pour autoriser l' grid.points
argument dansplot.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))))
C'est une façon de le faire qui essaie au moins de tenir compte des incertitudes résultant du réglage du gbm. Une approche similaire a été utilisée dans http://onlinelibrary.wiley.com/doi/10.2193/2006-503/abstract
Parfois, l'estimation ponctuelle est en dehors de l'intervalle, mais la modification de la grille de réglage (c'est-à-dire l'augmentation du nombre d'arbres et / ou de la profondeur) résout généralement cela.
J'espère que cela t'aides!