Đây là một phần phản hồi cho @Sashikanth Dareddy (vì nó không phù hợp với một bình luận) và một phần là phản hồi cho bài viết gốc.
Hãy nhớ một khoảng dự đoán là gì, đó là một khoảng hoặc tập hợp các giá trị mà chúng tôi dự đoán rằng các quan sát trong tương lai sẽ nằm. Nói chung, khoảng dự đoán có 2 phần chính xác định độ rộng của nó, một phần biểu thị độ không đảm bảo về giá trị trung bình dự đoán (hoặc tham số khác) đây là phần khoảng tin cậy và phần đại diện cho tính biến thiên của các quan sát riêng lẻ xung quanh giá trị trung bình đó. Khoảng tin cậy là cổ tích mạnh mẽ do Định lý giới hạn trung tâm và trong trường hợp là một khu rừng ngẫu nhiên, bootstrapping cũng giúp. Nhưng khoảng dự đoán hoàn toàn phụ thuộc vào các giả định về cách dữ liệu được phân phối cho các biến dự đoán, CLT và bootstrapping không ảnh hưởng đến phần đó.
Khoảng dự đoán phải rộng hơn trong đó khoảng tin cậy tương ứng cũng sẽ rộng hơn. Những thứ khác có thể ảnh hưởng đến độ rộng của khoảng dự đoán là các giả định về phương sai bằng nhau hay không, điều này phải xuất phát từ kiến thức của nhà nghiên cứu, chứ không phải mô hình rừng ngẫu nhiên.
Một khoảng dự đoán không có ý nghĩa đối với một kết quả phân loại (bạn có thể thực hiện một bộ dự đoán thay vì một khoảng, nhưng hầu hết thời gian có thể sẽ không có nhiều thông tin).
Chúng ta có thể thấy một số vấn đề xung quanh các khoảng dự đoán bằng cách mô phỏng dữ liệu nơi chúng ta biết sự thật chính xác. Hãy xem xét các dữ liệu sau:
set.seed(1)
x1 <- rep(0:1, each=500)
x2 <- rep(0:1, each=250, length=1000)
y <- 10 + 5*x1 + 10*x2 - 3*x1*x2 + rnorm(1000)
Dữ liệu cụ thể này tuân theo các giả định cho hồi quy tuyến tính và khá đơn giản để phù hợp với rừng ngẫu nhiên. Chúng ta biết từ mô hình "đúng" khi cả hai yếu tố dự đoán bằng 0, giá trị trung bình là 10, chúng ta cũng biết rằng các điểm riêng lẻ tuân theo phân phối chuẩn với độ lệch chuẩn là 1. Điều này có nghĩa là khoảng dự đoán 95% dựa trên kiến thức hoàn hảo cho những điểm này sẽ từ 8 đến 12 (thực tế là 8,04 đến 11,96, nhưng làm tròn giúp đơn giản hơn). Bất kỳ khoảng dự đoán ước tính nào cũng phải rộng hơn khoảng này (không có thông tin hoàn hảo sẽ thêm chiều rộng để bù) và bao gồm phạm vi này.
Hãy xem xét các khoảng thời gian từ hồi quy:
fit1 <- lm(y ~ x1 * x2)
newdat <- expand.grid(x1=0:1, x2=0:1)
(pred.lm.ci <- predict(fit1, newdat, interval='confidence'))
# fit lwr upr
# 1 10.02217 9.893664 10.15067
# 2 14.90927 14.780765 15.03778
# 3 20.02312 19.894613 20.15162
# 4 21.99885 21.870343 22.12735
(pred.lm.pi <- predict(fit1, newdat, interval='prediction'))
# fit lwr upr
# 1 10.02217 7.98626 12.05808
# 2 14.90927 12.87336 16.94518
# 3 20.02312 17.98721 22.05903
# 4 21.99885 19.96294 24.03476
Chúng ta có thể thấy có một số sự không chắc chắn trong các phương tiện ước tính (khoảng tin cậy) và điều đó mang lại cho chúng ta một khoảng dự đoán rộng hơn (nhưng bao gồm) phạm vi 8 đến 12.
Bây giờ chúng ta hãy xem xét khoảng thời gian dựa trên các dự đoán riêng lẻ của từng cây riêng lẻ (chúng ta nên kỳ vọng chúng sẽ rộng hơn vì rừng ngẫu nhiên không được hưởng lợi từ các giả định (mà chúng ta biết là đúng với dữ liệu này) mà hồi quy tuyến tính thực hiện):
library(randomForest)
fit2 <- randomForest(y ~ x1 + x2, ntree=1001)
pred.rf <- predict(fit2, newdat, predict.all=TRUE)
pred.rf.int <- apply(pred.rf$individual, 1, function(x) {
c(mean(x) + c(-1, 1) * sd(x),
quantile(x, c(0.025, 0.975)))
})
t(pred.rf.int)
# 2.5% 97.5%
# 1 9.785533 13.88629 9.920507 15.28662
# 2 13.017484 17.22297 12.330821 18.65796
# 3 16.764298 21.40525 14.749296 21.09071
# 4 19.494116 22.33632 18.245580 22.09904
Các khoảng rộng hơn các khoảng dự đoán hồi quy, nhưng chúng không bao gồm toàn bộ phạm vi. Chúng bao gồm các giá trị thực và do đó có thể là hợp pháp như các khoảng tin cậy, nhưng chúng chỉ dự đoán giá trị trung bình (giá trị dự đoán) ở đâu, không có phần bổ sung cho phân phối xung quanh giá trị trung bình đó. Đối với trường hợp đầu tiên có x1 và x2 đều bằng 0, các khoảng không đi xuống dưới 9,7, điều này rất khác với khoảng dự đoán thực sự giảm xuống 8. Nếu chúng ta tạo các điểm dữ liệu mới thì sẽ có một vài điểm (nhiều hơn nữa hơn 5%) trong các khoảng thời gian thực và hồi quy, nhưng không rơi vào các khoảng rừng ngẫu nhiên.
Để tạo khoảng dự đoán, bạn sẽ cần đưa ra một số giả định mạnh mẽ về phân bố các điểm riêng lẻ xung quanh các phương tiện dự đoán, sau đó bạn có thể lấy dự đoán từ các cây riêng lẻ (đoạn khoảng tin cậy khởi động) sau đó tạo giá trị ngẫu nhiên từ giả định phân phối với trung tâm đó. Các lượng tử cho những mảnh được tạo ra có thể tạo thành khoảng dự đoán (nhưng tôi vẫn sẽ kiểm tra nó, bạn có thể cần lặp lại quá trình nhiều lần nữa và kết hợp lại).
Dưới đây là một ví dụ về việc thực hiện điều này bằng cách thêm độ lệch bình thường (vì chúng ta biết dữ liệu gốc đã sử dụng độ lệch bình thường) cho các dự đoán với độ lệch chuẩn dựa trên MSE ước tính từ cây đó:
pred.rf.int2 <- sapply(1:4, function(i) {
tmp <- pred.rf$individual[i, ] + rnorm(1001, 0, sqrt(fit2$mse))
quantile(tmp, c(0.025, 0.975))
})
t(pred.rf.int2)
# 2.5% 97.5%
# [1,] 7.351609 17.31065
# [2,] 10.386273 20.23700
# [3,] 13.004428 23.55154
# [4,] 16.344504 24.35970
Những khoảng này chứa những cái dựa trên kiến thức hoàn hảo, vì vậy nhìn hợp lý. Nhưng, chúng sẽ phụ thuộc rất lớn vào các giả định được đưa ra (các giả định có giá trị ở đây vì chúng tôi đã sử dụng kiến thức về cách dữ liệu được mô phỏng, chúng có thể không hợp lệ trong các trường hợp dữ liệu thực). Tôi vẫn sẽ lặp lại các mô phỏng nhiều lần cho dữ liệu trông giống dữ liệu thực của bạn (nhưng được mô phỏng để bạn biết sự thật) nhiều lần trước khi hoàn toàn tin tưởng phương pháp này.
score
chức năng để đánh giá hiệu suất. Vì đầu ra dựa trên đa số phiếu của các cây trong rừng, nên trong trường hợp phân loại, nó sẽ cho bạn xác suất kết quả này là đúng, dựa trên phân phối phiếu. Tôi không chắc chắn về hồi quy mặc dù .... Bạn sử dụng thư viện nào?