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 oil
data dalam caret
paket 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 gbm
paket diperbarui untuk mengizinkan grid.points
argumen 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!