Come trovare un intervallo di previsione GBM


12

Sto lavorando con i modelli GBM usando il pacchetto caret e sto cercando un metodo per risolvere gli intervalli di previsione per i miei dati previsti. Ho cercato a fondo ma ho solo alcune idee per trovare gli intervalli di previsione per Random Forest. Qualsiasi aiuto / codice R sarebbe molto apprezzato!

Risposte:


4

EDIT: come sottolineato nei commenti qui sotto questo fornisce gli intervalli di confidenza per le previsioni e non strettamente gli intervalli di previsione . Sono stato un po 'contento della mia risposta e avrei dovuto pensarci un po' di più.

Sentiti libero di ignorare questa risposta o prova a basarti sul codice per ottenere gli intervalli di previsione.


Ho usato il semplice bootstrap per creare intervalli di previsione un paio di volte, ma potrebbero esserci altri (migliori) modi.

Considera i oildati nel caretpacchetto e supponiamo di voler generare dipendenze parziali e intervalli del 95% per l'effetto di Stearic su Palmitic. Di seguito è riportato solo un semplice esempio, ma puoi giocarci per soddisfare le tue esigenze. Assicurarsi che il gbmpacchetto sia aggiornato per consentire l' grid.pointsargomento inplot.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))))

Questo è un modo per farlo che almeno cerca di spiegare le incertezze derivanti dalla messa a punto di gbm. Un approccio simile è stato utilizzato in http://onlinelibrary.wiley.com/doi/10.2193/2006-503/abstract

A volte la stima del punto è al di fuori dell'intervallo, ma modificando la griglia di ottimizzazione (cioè aumentando il numero di alberi e / o la profondità) di solito si risolve.

Spero che sia di aiuto!


1
Se capisco correttamente il tuo codice, quello che hai è un intervallo di confidenza del 95% per le previsioni. Non è lo stesso di un intervallo di previsione del 95% , che aggiunge l'errore residuo (casuale).
Hong Ooi,

D'oh! Hai ragione. È stato un po 'troppo veloce nel rispondere. Grazie, modificherò la mia risposta.
ErikL,

grazie per l'aiuto! Sto riscontrando un problema con la funzione bootstrap. Ho pubblicato il problema su stats.stackexchange.com/questions/117329/… . Non sono esattamente sicuro di come impostare correttamente la funzione bootstrap con il mio set di dati.
CooperBuckeye05,

1
Immagino che a questo punto non sia quello che sto cercando, quindi sto ancora cercando una risposta!
CooperBuckeye05,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.