การทำนายของแบบจำลองฟอเรสต์มีช่วงเวลาการทำนายหรือไม่?


52

ถ้าฉันเรียกใช้randomForestแบบจำลองฉันสามารถทำการทำนายตามแบบจำลองได้ มีวิธีใดที่จะได้ช่วงเวลาการทำนายของการทำนายแต่ละครั้งเช่นที่ฉันรู้ว่า "แน่ใจ" โมเดลนั้นเป็นคำตอบของมันหรือไม่ ถ้าเป็นไปได้มันขึ้นอยู่กับความแปรปรวนของตัวแปรตามสำหรับโมเดลทั้งหมดหรือจะมีช่วงกว้างขึ้นและแคบขึ้นอยู่กับแผนผังการตัดสินใจเฉพาะที่ตามมาสำหรับการทำนายโดยเฉพาะ


3
AFAIK ไลบรารี RF ทั้งหมดมีscoreฟังก์ชันบางอย่างสำหรับการประเมินประสิทธิภาพ เนื่องจากผลลัพธ์จะขึ้นอยู่กับคะแนนเสียงส่วนใหญ่ของต้นไม้ในป่าในกรณีของการจัดหมวดหมู่มันจะทำให้คุณมีความน่าจะเป็นที่ผลลัพธ์นี้จะเป็นจริงขึ้นอยู่กับการกระจายการลงคะแนน ฉันไม่แน่ใจเกี่ยวกับการถดถอย แต่ .... ห้องสมุดใดที่คุณใช้?
sashkello

1
คุณควรอ่านสิ่งนี้: stats.stackexchange.com/questions/12425/…
0asa

คำตอบ:


40

นี่เป็นส่วนหนึ่งที่ตอบกลับไปยัง @Sashikanth Dareddy (เนื่องจากจะไม่เหมาะกับความคิดเห็น) และเป็นการตอบกลับโพสต์ต้นฉบับบางส่วน

โปรดจำไว้ว่าช่วงเวลาการทำนายคือช่วงเวลาหรือชุดของค่าที่เราคาดการณ์ว่าการสังเกตในอนาคตจะอยู่ โดยทั่วไปช่วงเวลาการทำนายมี 2 ชิ้นหลักที่กำหนดความกว้างของมันชิ้นส่วนที่แสดงถึงความไม่แน่นอนเกี่ยวกับค่าเฉลี่ยที่คาดการณ์ (หรือพารามิเตอร์อื่น ๆ ) นี่คือส่วนช่วงความเชื่อมั่นและชิ้นส่วนที่แทนความแปรปรวนของการสังเกตแต่ละรอบ ช่วงความเชื่อมั่นนั้นแข็งแกร่งเพราะนางฟ้าซึ่งเป็นผลมาจากทฤษฎีการ จำกัด ขั้นกลางและในกรณีของป่าแบบสุ่มการบูตสแตรปจะช่วยได้เช่นกัน แต่ช่วงเวลาการทำนายนั้นขึ้นอยู่กับสมมติฐานเกี่ยวกับวิธีการกระจายข้อมูลที่ได้รับจากตัวแปรทำนาย CLT และ bootstrapping ไม่มีผลกับส่วนนั้น

ช่วงเวลาการทำนายควรกว้างขึ้นซึ่งช่วงความเชื่อมั่นที่เกี่ยวข้องจะกว้างขึ้นด้วย สิ่งอื่น ๆ ที่จะส่งผลกระทบต่อความกว้างของช่วงเวลาการทำนายนั้นเป็นข้อสันนิษฐานเกี่ยวกับความแปรปรวนที่เท่ากันหรือไม่สิ่งนี้มาจากความรู้ของนักวิจัยไม่ใช่แบบป่าสุ่ม

ช่วงเวลาการทำนายไม่สมเหตุสมผลสำหรับผลลัพธ์ที่เป็นหมวดหมู่ (คุณสามารถตั้งค่าการทำนายได้มากกว่าช่วงเวลา แต่ส่วนใหญ่แล้วมันอาจจะไม่ให้ข้อมูลมากนัก)

เราสามารถเห็นปัญหาบางอย่างเกี่ยวกับช่วงเวลาการทำนายโดยจำลองข้อมูลที่เรารู้ความจริง พิจารณาข้อมูลต่อไปนี้:

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)

ข้อมูลเฉพาะนี้ตามสมมติฐานสำหรับการถดถอยเชิงเส้นและค่อนข้างตรงไปตรงมาสำหรับการสุ่มฟอเรสต์ เรารู้จากโมเดล "ของจริง" ที่เมื่อตัวทำนายทั้งสองเป็น 0 นั่นหมายความว่า 10 เราก็รู้ว่าแต่ละจุดเป็นไปตามการแจกแจงแบบปกติโดยมีค่าเบี่ยงเบนมาตรฐานเท่ากับ 1 ซึ่งหมายความว่าช่วงการทำนาย 95% ตามความรู้ที่สมบูรณ์ คะแนนเหล่านี้จะอยู่ระหว่าง 8 ถึง 12 (จริง ๆ แล้ว 8.04 ถึง 11.96 แต่การปัดเศษทำให้ง่ายขึ้น) ช่วงเวลาการคาดคะเนใด ๆ ควรกว้างกว่านี้ (ไม่มีข้อมูลสมบูรณ์แบบเพิ่มความกว้างเพื่อชดเชย) และรวมช่วงนี้ไว้ด้วย

ลองดูช่วงเวลาจากการถดถอย:

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

เราสามารถเห็นได้ว่ามีความไม่แน่นอนบางอย่างในค่าเฉลี่ย (ช่วงความมั่นใจ) และนั่นทำให้เรามีช่วงการคาดการณ์ที่กว้างกว่า (แต่รวม) ช่วง 8 ถึง 12

ตอนนี้เรามาดูช่วงเวลาตามการคาดการณ์ของต้นไม้แต่ละต้น (เราควรคาดหวังว่าต้นไม้เหล่านี้จะกว้างกว่าเนื่องจากป่าสุ่มไม่ได้รับประโยชน์จากสมมติฐาน (ซึ่งเรารู้ว่าเป็นจริงสำหรับข้อมูลนี้) ว่าการถดถอยเชิงเส้น

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

ช่วงเวลานั้นกว้างกว่าช่วงการทำนายการถดถอย แต่ไม่ครอบคลุมช่วงทั้งหมด พวกเขารวมถึงค่าที่แท้จริงและดังนั้นจึงอาจถูกต้องตามกฎหมายเป็นช่วงความเชื่อมั่น แต่พวกเขาเป็นเพียงการคาดการณ์ที่ค่าเฉลี่ย (ค่าที่คาดการณ์) คือไม่มีชิ้นส่วนเพิ่มเติมสำหรับการกระจายรอบค่าเฉลี่ยนั้น สำหรับกรณีแรกที่ x1 และ x2 มีทั้ง 0 ช่วงเวลาไม่ต่ำกว่า 9.7 นี่คือสิ่งที่แตกต่างจากช่วงการทำนายจริงที่ลดลงเหลือ 8 ถ้าเราสร้างจุดข้อมูลใหม่จะมีหลายจุด (มากกว่านั้น) มากกว่า 5%) ที่อยู่ในช่วงเวลาที่แท้จริงและการถดถอย แต่ไม่ตกอยู่ในช่วงการสุ่มของป่า

ในการสร้างช่วงเวลาการทำนายคุณจะต้องทำการตั้งสมมติฐานที่รัดกุมเกี่ยวกับการกระจายของแต่ละจุดรอบวิธีการทำนายจากนั้นคุณสามารถทำการทำนายจากต้นไม้แต่ละต้น (ชิ้นส่วนช่วงความมั่นใจ bootstrapped) จากนั้นสร้างค่าสุ่มจากสมมติฐาน การกระจายกับศูนย์นั้น ควอนไทล์สำหรับชิ้นส่วนที่สร้างขึ้นเหล่านั้นอาจสร้างช่วงเวลาการทำนาย (แต่ฉันจะยังคงทดสอบมันคุณอาจต้องทำซ้ำหลาย ๆ ครั้งรวมกัน)

นี่คือตัวอย่างของการทำเช่นนี้โดยการเพิ่มปกติ (เนื่องจากเรารู้ว่าข้อมูลดั้งเดิมที่ใช้เป็นปกติ) ส่วนเบี่ยงเบนจากการทำนายด้วยค่าเบี่ยงเบนมาตรฐานโดยยึดตาม MSE โดยประมาณจากต้นไม้ต้นนั้น:

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

ช่วงเวลาเหล่านี้มีผู้ที่อยู่บนพื้นฐานความรู้ที่สมบูรณ์แบบดังนั้นดูสมเหตุสมผล แต่พวกเขาจะขึ้นอยู่กับสมมติฐานอย่างมาก (สมมติฐานมีผลที่นี่เพราะเราใช้ความรู้ว่าข้อมูลถูกจำลองอย่างไรพวกเขาอาจไม่ถูกต้องในกรณีข้อมูลจริง) ฉันยังคงจำลองการจำลองซ้ำหลายครั้งสำหรับข้อมูลที่ดูเหมือนข้อมูลจริงของคุณ (แต่จำลองเพื่อให้คุณรู้ความจริง) หลายครั้งก่อนที่จะเชื่อถือวิธีการนี้อย่างสมบูรณ์


11

ฉันรู้ว่านี่เป็นโพสต์เก่า แต่ฉันใช้งานแบบจำลองบางอย่างกับเรื่องนี้และคิดว่าฉันจะแบ่งปันสิ่งที่ค้นพบของฉัน

@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 แนะนำ แต่โปรดทราบว่าข้อสมมติฐานพื้นฐานในวิธีการทั้งหมดที่เรากล่าวถึงคือข้อผิดพลาดเป็นไปตามการแจกแจงแบบปกติ


10

หากคุณใช้ R คุณสามารถสร้างช่วงการทำนายอย่างง่ายดายสำหรับการทำนายการถดถอยแบบสุ่มในป่า: เพียงใช้แพ็คเกจquantregForest(ที่มีให้ที่CRAN ) และอ่านบทความโดย N. Meinshausenเกี่ยวกับวิธีการสรุปปริมาณตามเงื่อนไขกับป่าการถดถอยเชิงควอนตัมสามารถใช้ในการสร้างช่วงเวลาการทำนาย ข้อมูลมากแม้ว่าคุณจะไม่ได้ทำงานกับ R!


ดูเหมือนว่ามีการย้ายกระดาษมาที่นี่: jmlr.org/papers/volume7/meinshausen06a/meinshausen06a.pdf
Reinstate Monica

2
ดูเหมือนว่าคำตอบที่เหมาะสมและไม่จำเป็นต้องมีข้อสมมติฐานเกี่ยวกับการกระจายช่วงเวลา มีแบบฝึกหัดเกี่ยวกับวิธีการทำสิ่งนี้ในไพ ธ อนที่นี่: blog.datadive.net/prediction-intervals-for-random-forests
ลิ

6

วิธีนี้แก้ได้ง่ายด้วย randomForest

ก่อนอื่นให้ฉันจัดการกับงานการถดถอย (สมมติว่าป่าของคุณมี 1,000 ต้น) ในpredictฟังก์ชั่นคุณมีตัวเลือกในการส่งคืนผลลัพธ์จากต้นไม้แต่ละต้น ซึ่งหมายความว่าคุณจะได้รับ 1,000 คอลัมน์ผลลัพธ์ เราสามารถหาค่าเฉลี่ยของ 1,000 คอลัมน์สำหรับแต่ละแถว - นี่คือ RF เอาท์พุทปกติที่จะผลิตได้ทุกทาง ทีนี้การได้ช่วงเวลาการทำนายให้พูดว่า +/- 2 std ค่าเบี่ยงเบนที่คุณต้องทำคือในแต่ละแถวจาก 1,000 ค่าจะคำนวณ +/- 2 std เบี่ยงเบนและทำให้ขอบเขตบนและล่างเหล่านี้เป็นคำทำนายของคุณ

ประการที่สองในกรณีของการจำแนกประเภทโปรดจำไว้ว่าต้นไม้แต่ละต้นให้ผลลัพธ์เป็น 1 หรือ 0 (โดยค่าเริ่มต้น) และผลรวมของต้นไม้ทั้งหมด 1,000 ต้นที่หารด้วย 1,000 จะให้ความน่าจะเป็นของคลาส (ในกรณีของการจำแนกไบนารี) เพื่อที่จะวางช่วงการทำนายความน่าจะเป็นคุณจะต้องแก้ไขค่า min ตัวเลือก nodesize (ดู randomForest docuementation สำหรับชื่อที่แน่นอนของตัวเลือกนั้น) เมื่อคุณตั้งค่า >> 1 จากนั้นต้นไม้แต่ละต้นจะส่งออกตัวเลขระหว่าง 1 ถึง 0 ตอนนี้จากที่นี่คุณสามารถทำซ้ำกระบวนการเดียวกันตามที่อธิบายไว้ข้างต้นสำหรับ งานการถดถอย

ฉันหวังว่ามันสมเหตุสมผล


ฉันไม่ได้ลอง แต่ดูเหมือนจะสมเหตุสมผล ขอบคุณที่ตอบคำถามเก่าของฉัน
Dean MacGregor

1
ฉันคิดว่าวิธีนี้จะให้ความมั่นใจมากกว่าช่วงการทำนาย ผลลัพธ์ที่ได้ควรนำมาเปรียบเทียบกับตัวแบบเชิงเส้นซึ่งทฤษฎีของช่วงการทำนายถูกสร้างขึ้นอย่างดี ดีที่สุดสำหรับข้อมูลจำลองที่ความจริงเป็นที่รู้จักและมีการสันนิษฐานทั้งหมด
เกร็กสโนว์

1
@GregSnow: สิ่งที่คุณจะได้รับจากสิ่งที่ฉันอธิบายไว้ข้างต้นคือช่วงเวลาการทำนายที่แน่นอน โปรดทราบว่าช่วงการคาดการณ์โดยทั่วไปนั้นกว้างกว่าช่วงความเชื่อมั่นเนื่องจากช่วงความเชื่อมั่นนั้นระบุไว้อย่างชัดเจนว่าค่าเฉลี่ยของสถิติของ quanitiy นั้นอยู่ที่ใดเมื่อการทำนายเกี่ยวข้องกับการสังเกตเพียงครั้งเดียวดังนั้นจึงมีความไม่แน่นอนมากขึ้น การคาดคะเน 1,000 ครั้งที่คุณได้รับจากต้นไม้ 1,000 ต้นนั้นถือเป็นตัวอย่างของ bootstrapped และคุณไม่จำเป็นต้องใช้สมมติฐานเชิงบรรทัดฐานที่นี่ แม้แต่การวิเคราะห์ในช่วงทศวรรษที่เรียบง่ายก็ยังให้ผลที่ดี

5
@SashikanthDareddy สิ่งที่คุณจะได้รับจากสิ่งที่คุณอธิบายไม่แน่นอนช่วงเวลาการทำนาย ช่วงเวลาการคาดการณ์จะถูกกำหนดโดยมากกว่าเพียงแค่ความกว้าง ใช่ต้นไม้แต่ละต้นในรูปแบบ bootstrap แต่ bootstrap ประมาณค่าพารามิเตอร์ไม่ใช่ค่าแต่ละค่า ช่วงเวลาการทำนายนั้นขึ้นอยู่กับการกระจายของคะแนนแต่ละคะแนน ความจริงที่ว่าวิธีการของคุณให้ช่วงเวลาสำหรับสัดส่วนที่มีผลลัพธ์เด็ดขาดแทนประเภทแสดงให้เห็นนี้ ดูตัวอย่างของฉันในคำตอบที่เพิ่มเข้ามา
เกร็กสโนว์

0

ฉันได้ลองตัวเลือก (WIP ทั้งหมดนี้):

  1. ฉันทำให้ตัวแปรตามเป็นปัญหาการจัดหมวดหมู่ด้วยผลลัพธ์เป็นช่วงแทนที่จะเป็นค่าเดียว ผลลัพธ์ที่ฉันได้รับไม่ดีเมื่อเทียบกับการใช้ค่าธรรมดา ฉันเลิกใช้วิธีนี้

  2. จากนั้นฉันแปลงมันเป็นปัญหาการจำแนกประเภทหลายอย่างซึ่งแต่ละอันมีขอบเขตต่ำกว่าสำหรับช่วง (ผลลัพธ์ของแบบจำลองว่าจะข้ามขอบเขตล่างหรือไม่) จากนั้นก็วิ่งแบบจำลองทั้งหมด (~ 20) แล้ว รวมผลลัพธ์เพื่อให้ได้คำตอบสุดท้ายเป็นช่วง สิ่งนี้ใช้งานได้ดีกว่า 1 ข้อ แต่ไม่ดีเท่าที่ฉันต้องการ ฉันยังคงทำงานเพื่อปรับปรุงวิธีการนี้

ฉันใช้ OOB และการประมาณการแบบครั้งเดียวเพื่อตัดสินใจว่าแบบจำลองของฉันดีหรือไม่ดี


0

ปัญหาของการสร้างช่วงการทำนายสำหรับการทำนายป่าแบบสุ่มได้รับการแก้ไขในเอกสารต่อไปนี้:

Zhang, Haozhe, Joshua Zimmerman, Dan Nettleton และ Daniel J. Nordman "สุ่มช่วงเวลาทำนายป่า" นักสถิติชาวอเมริกัน 2019

แพ็คเกจ R "rfinterval" สามารถนำไปใช้งานได้ที่ CRAN

การติดตั้ง

หากต้องการติดตั้งrfintervalแพ็คเกจ R :

#install.packages("devtools")
#devtools::install_github(repo="haozhestat/rfinterval")
install.packages("rfinterval")
library(rfinterval)
?rfinterval

การใช้

Quickstart:

train_data <- sim_data(n = 1000, p = 10)
test_data <- sim_data(n = 1000, p = 10)

output <- rfinterval(y~., train_data = train_data, test_data = test_data,
                     method = c("oob", "split-conformal", "quantreg"),
                     symmetry = TRUE,alpha = 0.1)

### print the marginal coverage of OOB prediction interval
mean(output$oob_interval$lo < test_data$y & output$oob_interval$up > test_data$y)

### print the marginal coverage of Split-conformal prediction interval
mean(output$sc_interval$lo < test_data$y & output$sc_interval$up > test_data$y)

### print the marginal coverage of Quantile regression forest prediction interval
mean(output$quantreg_interval$lo < test_data$y & output$quantreg_interval$up > test_data$y)

ตัวอย่างข้อมูล:

oob_interval <- rfinterval(pm2.5 ~ .,
                            train_data = BeijingPM25[1:1000, ],
                            test_data = BeijingPM25[1001:2000, ],
                            method = "oob",
                            symmetry = TRUE,
                            alpha = 0.1)
str(oob_interval)

1
ยินดีต้อนรับสู่เว็บไซต์ @ xiaolongmao.You อาจต้องการที่จะใช้เวลาของเราเกี่ยวกับการท่องเที่ยว โปรดอย่าโพสต์คำตอบที่เหมือนกันในหลายกระทู้ ลองปรับแต่งคำตอบของคุณสำหรับคำถามเฉพาะในแต่ละเธรด หากคุณมีกรณีที่คุณเชื่อจริง ๆ ว่าคำตอบที่เหมือนกันตอบคำถามอย่างสมบูรณ์นั่นหมายถึงคำถามนั้นซ้ำกัน เมื่อคุณมีชื่อเสียงถึง 50 คนคุณสามารถโพสต์ความคิดเห็นไปที่ OP ในระหว่างนั้นคุณสามารถตั้งค่าสถานะ Q เพื่อปิดเป็นรายการซ้ำได้
gung - Reinstate Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.