Cara menemukan Interval Prediksi GBM

12

Saya bekerja dengan model GBM menggunakan paket caret dan mencari untuk menemukan metode untuk menyelesaikan interval prediksi untuk data prediksi saya. Saya telah mencari secara luas tetapi hanya menghasilkan beberapa ide untuk menemukan interval prediksi untuk Random Forest. Bantuan / kode R akan sangat dihargai!

CooperBuckeye05
sumber

Jawaban:

4

EDIT: Seperti yang ditunjukkan dalam komentar di bawah ini memberikan interval kepercayaan untuk prediksi dan tidak sepenuhnya interval prediksi . Apakah sedikit pemicu senang dengan balasan saya dan seharusnya memberikan pemikiran ekstra ini.

Silakan mengabaikan jawaban ini atau mencoba membangun kode untuk mendapatkan interval prediksi.


Saya telah menggunakan bootstrap sederhana untuk membuat interval prediksi beberapa kali tetapi mungkin ada cara lain (lebih baik).

Pertimbangkan oildata dalam caretpaket dan anggaplah kita ingin menghasilkan dependensi parsial dan interval 95% untuk efek Stearic pada Palmitic. Di bawah ini hanyalah contoh sederhana tetapi Anda dapat bermain-main dengan itu sesuai dengan kebutuhan Anda. Pastikan gbmpaket diperbarui untuk mengizinkan grid.pointsargumen masukplot.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))))

Ini adalah salah satu cara untuk melakukannya yang setidaknya mencoba menjelaskan ketidakpastian yang timbul dari penyetelan gbm. Pendekatan serupa telah digunakan di http://onlinelibrary.wiley.com/doi/10.2193/2006-503/abstract

Terkadang estimasi titik berada di luar interval, tetapi memodifikasi grid tuning (yaitu, meningkatkan jumlah pohon dan / atau kedalaman) biasanya memecahkan itu.

Semoga ini membantu!

ErikL
sumber
1
Jika saya memahami kode Anda dengan benar, apa yang Anda miliki ada interval kepercayaan 95% untuk prediksi. Itu tidak sama dengan interval prediksi 95% , yang menambahkan kesalahan residual (acak).
Hong Ooi
Doh! Anda benar. Agak terlalu cepat dalam menjawab. Terima kasih, saya akan mengedit jawaban saya.
ErikL
terimakasih atas bantuannya! Saya mengalami masalah dengan fungsi bootstrap. Saya memposting masalah itu di stats.stackexchange.com/questions/117329/… . Saya tidak yakin bagaimana mengatur fungsi bootstrap dengan benar dengan dataset saya.
CooperBuckeye05
1
Saya kira pada titik ini ini bukan yang saya cari, jadi saya masih mencari jawaban!
CooperBuckeye05