Cách tìm khoảng dự đoán GBM


12

Tôi đang làm việc với các mô hình GBM bằng gói caret và đang tìm kiếm một phương pháp để giải quyết các khoảng dự đoán cho dữ liệu dự đoán của tôi. Tôi đã tìm kiếm rộng rãi nhưng chỉ đưa ra một vài ý tưởng để tìm các khoảng dự đoán cho Khu rừng ngẫu nhiên. Bất kỳ trợ giúp / mã R sẽ được đánh giá rất cao!

Câu trả lời:


4

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 oildữ liệu trong caretgó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 gbmgó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!


1
Nếu tôi hiểu mã của bạn một cách chính xác, những gì bạn có có khoảng tin cậy 95% cho các dự đoán. Điều đó không giống với khoảng dự đoán 95% , thêm lỗi dư (ngẫu nhiên).
Hồng Ooi

Ôi! Bạn nói đúng. Là một chút quá nhanh chóng trong việc trả lời. Cảm ơn, tôi sẽ chỉnh sửa câu trả lời của tôi.
ErikL

cảm ơn vì sự giúp đỡ! Tôi đang gặp vấn đề với chức năng bootstrap. Tôi đã đăng vấn đề đó tại stats.stackexchange.com/questions/117329/ . Tôi không chắc chắn chính xác làm thế nào để thiết lập chức năng bootstrap đúng với tập dữ liệu của tôi.
CooperBuckeye05

1
Tôi đoán tại thời điểm này đây không phải là điều tôi đang tìm kiếm, vì vậy tôi vẫn đang tìm kiếm một câu trả lời!
CooperBuckeye05
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.