EDIT: Như đã chỉ ra trong các ý kiến dưới đây, điều này mang lại khoảng tin cậy cho các dự đoán và không hoàn toàn là các khoảng dự đoán . Là một chút kích hoạt hài lòng với câu trả lời của tôi và nên đã suy nghĩ thêm.
Hãy bỏ qua câu trả lời này hoặc cố gắng xây dựng mã để có được các khoảng dự đoán.
Tôi đã sử dụng bootstrap đơn giản để tạo các khoảng dự đoán một vài lần nhưng có thể có những cách khác (tốt hơn).
Xem xét oil
dữ liệu trong caret
gói và giả sử chúng tôi muốn tạo ra các phụ thuộc một phần và khoảng 95% cho tác động của Stearic trên Palmitic. Dưới đây chỉ là một ví dụ đơn giản nhưng bạn có thể chơi xung quanh nó để phù hợp với nhu cầu của bạn. Đảm bảo gbm
gói được cập nhật để cho phép grid.points
đối số trongplot.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))))
Đây là một cách để làm điều đó mà ít nhất là cố gắng tính đến sự không chắc chắn phát sinh từ việc điều chỉnh gbm. Một cách tiếp cận tương tự đã được sử dụng trong http: // onlinel Library.wiley.com/doi/10.2193/2006-503/abab
Đôi khi ước tính điểm nằm ngoài khoảng, nhưng sửa đổi lưới điều chỉnh (nghĩa là tăng số lượng cây và / hoặc độ sâu) thường giải quyết điều đó.
Hi vọng điêu nay co ich!