ฉันรู้ว่านี่เป็นโพสต์เก่า แต่ฉันใช้งานแบบจำลองบางอย่างกับเรื่องนี้และคิดว่าฉันจะแบ่งปันสิ่งที่ค้นพบของฉัน
@GregSnow สร้างโพสต์ที่มีรายละเอียดมากเกี่ยวกับเรื่องนี้ แต่ฉันเชื่อว่าเมื่อคำนวณช่วงเวลาโดยใช้การทำนายจากต้นไม้แต่ละต้นที่เขาดูซึ่งเป็นช่วงเวลาการทำนาย 70% เท่านั้น เราจำเป็นต้องดูที่เพื่อให้ได้ช่วงการทำนาย 95%[ μ + 1.96 ∗ σ , μ - 1.96 ∗ σ ][μ+σ,μ−σ][μ+1.96∗σ,μ−1.96∗σ]
การเปลี่ยนแปลงนี้เป็น @GregSnow code เราจะได้ผลลัพธ์ดังต่อไปนี้
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)
library(randomForest)
fit2 <- randomForest(y~x1+x2)
pred.rf <- predict(fit2, newdat, predict.all=TRUE)
pred.rf.int <- t(apply( pred.rf$individual, 1, function(x){
c( mean(x) + c(-1.96,1.96)*sd(x), quantile(x, c(0.025,0.975)) )}))
pred.rf.int
2.5% 97.5%
1 7.826896 16.05521 9.915482 15.31431
2 11.010662 19.35793 12.298995 18.64296
3 14.296697 23.61657 14.749248 21.11239
4 18.000229 23.73539 18.237448 22.10331
ตอนนี้การเปรียบเทียบสิ่งเหล่านี้กับช่วงเวลาที่สร้างขึ้นโดยการเพิ่มความเบี่ยงเบนปกติกับการทำนายด้วยส่วนเบี่ยงเบนมาตรฐานตามที่ MSE เช่น @GregSnow แนะนำให้เราได้รับ
pred.rf.int2 <- sapply(1:4, function(i) {
tmp <- pred.rf$individual[i,] + rnorm(1000, 0, sqrt(fit2$mse))
quantile(tmp, c(0.025, 0.975))
})
t(pred.rf.int2)
2.5% 97.5%
[1,] 7.486895 17.21144
[2,] 10.551811 20.50633
[3,] 12.959318 23.46027
[4,] 16.444967 24.57601
ช่วงเวลาโดยวิธีการทั้งสองนี้กำลังใกล้เข้ามามาก พล็อตช่วงเวลาการทำนายสำหรับทั้งสามวิธีเทียบกับการแจกแจงข้อผิดพลาดในกรณีนี้มีลักษณะดังนี้
- เส้นสีดำ = ช่วงการทำนายจากการถดถอยเชิงเส้น
- เส้นสีแดง = ช่วงเวลาฟอเรสต์แบบสุ่มที่คำนวณจากการทำนายส่วนบุคคล
- เส้นสีน้ำเงิน = ช่วงเวลาป่าสุ่มที่คำนวณโดยการเพิ่มความเบี่ยงเบนปกติให้กับการทำนาย
ตอนนี้ให้เราทำการจำลองอีกครั้ง แต่คราวนี้เป็นการเพิ่มความแปรปรวนของคำผิดพลาด หากการคำนวณช่วงเวลาการทำนายของเราดีเราควรจบลงด้วยช่วงกว้างกว่าที่เราคาดไว้ข้างต้น
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,mean=0,sd=5)
fit1 <- lm(y~x1+x2)
newdat <- expand.grid(x1=0:1,x2=0:1)
predict(fit1,newdata=newdat,interval = "prediction")
fit lwr upr
1 10.75006 0.503170 20.99695
2 13.90714 3.660248 24.15403
3 19.47638 9.229490 29.72327
4 22.63346 12.386568 32.88035
set.seed(1)
fit2 <- randomForest(y~x1+x2,localImp=T)
pred.rf.int <- t(apply( pred.rf$individual, 1, function(x){
c( mean(x) + c(-1.96,1.96)*sd(x), quantile(x, c(0.025,0.975)) )}))
pred.rf.int
2.5% 97.5%
1 7.889934 15.53642 9.564565 15.47893
2 10.616744 18.78837 11.965325 18.51922
3 15.024598 23.67563 14.724964 21.43195
4 17.967246 23.88760 17.858866 22.54337
pred.rf.int2 <- sapply(1:4, function(i) {
tmp <- pred.rf$individual[i,] + rnorm(1000, 0, sqrt(fit2$mse))
quantile(tmp, c(0.025, 0.975))
})
t(pred.rf.int2)
2.5% 97.5%
[1,] 1.291450 22.89231
[2,] 4.193414 25.93963
[3,] 7.428309 30.07291
[4,] 9.938158 31.63777
ตอนนี้สิ่งนี้ทำให้ชัดเจนว่าการคำนวณช่วงเวลาการทำนายโดยวิธีที่สองนั้นมีความแม่นยำมากกว่าและให้ผลที่ได้ใกล้เคียงกับช่วงการทำนายจากการถดถอยเชิงเส้น
จากการสันนิษฐานของ normality มีอีกวิธีที่ง่ายกว่าในการคำนวณช่วงเวลาการทำนายจากป่าสุ่ม จากต้นไม้แต่ละต้นเรามีค่าที่คาดการณ์ ( ) เช่นเดียวกับข้อผิดพลาดกำลังสองเฉลี่ย ( ) ดังนั้นการคาดคะเนจากต้นไม้แต่ละต้นแต่ละคนสามารถจะคิดว่าเป็นRMSE_i) การใช้คุณสมบัติการกระจายปกติทำนายของเราจากป่าสุ่มจะมีการกระจายn) การนำสิ่งนี้ไปใช้กับตัวอย่างที่เรากล่าวถึงข้างต้นเราจะได้ผลลัพธ์ด้านล่าง M S E ฉัน N ( μ i , R M S E ฉัน ) N ( ∑ μ i / n , ∑ R M S E ฉัน/ n )μiMSEiN(μi,RMSEi)N(∑μi/n,∑RMSEi/n)
mean.rf <- pred.rf$aggregate
sd.rf <- mean(sqrt(fit2$mse))
pred.rf.int3 <- cbind(mean.rf - 1.96*sd.rf, mean.rf + 1.96*sd.rf)
pred.rf.int3
1 1.332711 22.09364
2 4.322090 25.08302
3 8.969650 29.73058
4 10.546957 31.30789
สิ่งเหล่านี้นับได้เป็นอย่างดีกับช่วงเวลาของแบบจำลองเชิงเส้นและวิธีการที่ @GregSnow แนะนำ แต่โปรดทราบว่าข้อสมมติฐานพื้นฐานในวิธีการทั้งหมดที่เรากล่าวถึงคือข้อผิดพลาดเป็นไปตามการแจกแจงแบบปกติ
score
ฟังก์ชันบางอย่างสำหรับการประเมินประสิทธิภาพ เนื่องจากผลลัพธ์จะขึ้นอยู่กับคะแนนเสียงส่วนใหญ่ของต้นไม้ในป่าในกรณีของการจัดหมวดหมู่มันจะทำให้คุณมีความน่าจะเป็นที่ผลลัพธ์นี้จะเป็นจริงขึ้นอยู่กับการกระจายการลงคะแนน ฉันไม่แน่ใจเกี่ยวกับการถดถอย แต่ .... ห้องสมุดใดที่คุณใช้?