क्या एक रैंडम फ़ॉरेस्ट मॉडल की भविष्यवाणियों में एक पूर्वानुमान अंतराल है?


52

यदि मैं एक randomForestमॉडल चलाता हूं , तो मैं मॉडल के आधार पर भविष्यवाणियां कर सकता हूं। क्या प्रत्येक पूर्वानुमान की भविष्यवाणी अंतराल प्राप्त करने का एक तरीका है जैसे कि मुझे पता है कि मॉडल कैसे "निश्चित" है। यदि यह संभव है तो यह केवल पूरे मॉडल के लिए निर्भर चर की परिवर्तनशीलता पर आधारित है या किसी विशेष भविष्यवाणी के लिए अनुसरण किए गए विशेष निर्णय पेड़ के आधार पर व्यापक और संकीर्ण अंतराल होंगे?


3
AFAIK, आरएफ पुस्तकालयों के सभी scoreप्रदर्शन के मूल्यांकन के लिए किसी प्रकार का कार्य करते हैं। चूंकि आउटपुट जंगल में पेड़ों के बहुमत वोट पर आधारित है, इसलिए वर्गीकरण के मामले में यह आपको इस परिणाम की सत्यता की संभावना देगा, जो वोट वितरण पर आधारित है। मैं प्रतिगमन के बारे में निश्चित नहीं हूँ, हालांकि .... आप किस पुस्तकालय का उपयोग करते हैं?
शशकेलो

1
आपको इसे पढ़ना चाहिए: सांख्यिकी.stackexchange.com/questions/12425/…
0asa

जवाबों:


40

यह आंशिक रूप से @ शशिकांत डेयरडे की प्रतिक्रिया है (क्योंकि यह टिप्पणी में फिट नहीं होगा) और आंशिक रूप से मूल पोस्ट की प्रतिक्रिया है।

याद रखें कि एक भविष्यवाणी अंतराल क्या है, यह एक अंतराल या मूल्यों का सेट है जहां हम अनुमान लगाते हैं कि भविष्य की टिप्पणियां झूठ होंगी। आम तौर पर भविष्यवाणी अंतराल में 2 मुख्य टुकड़े होते हैं जो इसकी चौड़ाई निर्धारित करते हैं, एक टुकड़ा जो अनुमानित मतलब (या अन्य पैरामीटर) के बारे में अनिश्चितता का प्रतिनिधित्व करता है यह विश्वास अंतराल हिस्सा है, और एक टुकड़ा है जो उस मतलब के आसपास व्यक्तिगत टिप्पणियों की परिवर्तनशीलता का प्रतिनिधित्व करता है। केंद्रीय सीमा प्रमेय के कारण विश्वास अंतराल परी मजबूत है और एक यादृच्छिक जंगल के मामले में, बूटस्ट्रैपिंग भी मदद करता है। लेकिन भविष्यवाणी अंतराल पूरी तरह से मान्यताओं पर निर्भर करता है कि कैसे डेटा को वितरित किया जाता है भविष्यवक्ता चर, सीएलटी और बूटस्ट्रैपिंग का उस हिस्से पर कोई प्रभाव नहीं पड़ता है।

भविष्यवाणी अंतराल व्यापक होना चाहिए जहां संगत आत्मविश्वास अंतराल भी व्यापक होगा। अन्य चीजें जो भविष्यवाणी अंतराल की चौड़ाई को प्रभावित करती हैं, समान विचरण के बारे में धारणाएं हैं या नहीं, इसके लिए शोधकर्ता के ज्ञान से आना होगा, न कि यादृच्छिक वन मॉडल से।

एक पूर्वानुमान अंतराल एक स्पष्ट परिणाम के लिए कोई मतलब नहीं है (आप एक अंतराल के बजाय एक भविष्यवाणी सेट कर सकते हैं, लेकिन ज्यादातर समय यह संभवतः बहुत जानकारीपूर्ण नहीं होगा)।

हम डेटा की नकल करके भविष्यवाणी अंतराल के आसपास के कुछ मुद्दों को देख सकते हैं जहां हम सटीक सच्चाई जानते हैं। निम्नलिखित आंकड़ों पर विचार करें:

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% भविष्यवाणी अंतराल के लिए सही ज्ञान पर आधारित है ये बिंदु points से १२ तक (वास्तव में 11.०४ से ११.९ ६ तक होंगे, लेकिन गोलाई इसे सरल बनाए रखती है)। किसी भी अनुमानित भविष्यवाणी अंतराल को इससे अधिक व्यापक होना चाहिए (पूर्ण जानकारी नहीं होने से क्षतिपूर्ति के लिए चौड़ाई बढ़ जाती है) और इस सीमा को शामिल करना चाहिए।

आइए रिग्रेशन के अंतराल को देखें:

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% से अधिक) जो सही और प्रतिगमन अंतराल में हैं, लेकिन यादृच्छिक वन अंतराल में नहीं आते हैं।

एक भविष्यवाणी अंतराल उत्पन्न करने के लिए आपको अनुमानित साधनों के आसपास अलग-अलग बिंदुओं के वितरण के बारे में कुछ मजबूत धारणाएं बनाने की आवश्यकता होगी, फिर आप व्यक्तिगत पेड़ों (बूटस्ट्रैप्ड आत्मविश्वास अंतराल टुकड़ा) से भविष्यवाणियां ले सकते हैं फिर ग्रहण से एक यादृच्छिक मान उत्पन्न करें। उस केंद्र के साथ वितरण। उन उत्पन्न टुकड़ों के लिए मात्रात्मक पूर्वानुमान अंतराल बना सकते हैं (लेकिन मैं अभी भी इसका परीक्षण करूंगा, आपको कई बार प्रक्रिया को दोहराने और संयोजन करने की आवश्यकता हो सकती है)।

यह सामान्य जोड़कर ऐसा करने का एक उदाहरण है (क्योंकि हम जानते हैं कि मूल डेटा एक सामान्य उपयोग किया जाता है) उस पेड़ से अनुमानित एमएसई पर आधारित मानक विचलन के साथ भविष्यवाणियों के लिए विचलन:

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 कोड में यह बदलाव करते हुए, हमें निम्नलिखित परिणाम मिलते हैं

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

अब, मानक विचलन के साथ भविष्यवाणियों में सामान्य विचलन जोड़कर उत्पन्न अंतराल के साथ इनकी तुलना करें क्योंकि MSG जैसे @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

यहाँ छवि विवरण दर्ज करें

अब, यह स्पष्ट करता है कि दूसरे दृष्टिकोण से भविष्यवाणी अंतराल की गणना करना कहीं अधिक सटीक है और परिणाम को रैखिक प्रतिगमन से भविष्यवाणी अंतराल के काफी करीब ला रहा है।

सामान्यता की धारणा लेते हुए, यादृच्छिक जंगल से भविष्यवाणी अंतराल की गणना करने का एक और आसान तरीका है। प्रत्येक व्यक्तिगत पेड़ से हमारे पास अनुमानित मूल्य ( ) के साथ-साथ औसत चुकता त्रुटि ( ) है। इसलिए प्रत्येक व्यक्तिगत पेड़ से भविष्यवाणी को के रूप में सोचा जा सकता है । सामान्य वितरण गुणों का उपयोग करके यादृच्छिक वन से हमारी भविष्यवाणी का वितरण । ऊपर हमने जिस उदाहरण पर चर्चा की, उसे लागू करने से हमें नीचे के परिणाम मिलते हैं एम एस मैं एन ( μ मैं , आर एम एस मैं ) एन ( Σ μ मैं / n , Σ आर एम एस मैं / 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
मोनिका

2
यह उचित उत्तर की तरह लगता है, और भविष्य कहनेवाला अंतराल के बारे में वितरण संबंधी मान्यताओं की आवश्यकता नहीं है। यहाँ अजगर में ऐसा करने के बारे में एक ट्यूटोरियल है: blog.datadive.net/prediction-intervals-for-random-forests
कॉलिन

6

यह randomForest के साथ हल करना आसान है।

पहले मुझे प्रतिगमन कार्य से निपटने दें (यह मानते हुए कि आपके जंगल में 1000 पेड़ हैं)। में predictसमारोह, आप व्यक्तिगत पेड़ से परिणाम वापस करने का विकल्प है। इसका मतलब है कि आपको 1000 कॉलम आउटपुट प्राप्त होंगे। हम प्रत्येक पंक्ति के लिए 1000 कॉलम का औसत ले सकते हैं - यह नियमित आउटपुट है आरएफ ने किसी भी तरह से उत्पादन किया होगा। अब भविष्यवाणी अंतराल प्राप्त करने के लिए +/- 2 std कहते हैं। आपको उन सभी विचलन की आवश्यकता है जो प्रत्येक पंक्ति के लिए, 1000 मानों से +/- 2 एसटीडी की गणना करते हैं। विचलन और आपकी भविष्यवाणी पर इन ऊपरी और निचले सीमा को बनाते हैं।

दूसरा, वर्गीकरण के मामले में, याद रखें कि प्रत्येक पेड़ 1 या 0 (डिफ़ॉल्ट रूप से) का उत्पादन करता है और 1000 से विभाजित सभी 1000 से अधिक पेड़ों का योग वर्ग की संभावना (बाइनरी वर्गीकरण के मामले में) देता है। संभावना के आधार पर एक भविष्यवाणी अंतराल रखने के लिए आपको मिन को संशोधित करने की आवश्यकता है। नोड्साइज़ विकल्प (उस विकल्प के सटीक नाम के लिए रैंडम फ़ोरम डॉक्यूमेंटेशन देखें) एक बार जब आप इसे एक मान सेट करते हैं >> 1 तो व्यक्तिगत पेड़ 1 और 0. के बीच संख्याओं को आउटपुट करेंगे, अब यहां से आप उसी प्रक्रिया को दोहरा सकते हैं जैसा कि ऊपर वर्णित है। प्रतिगमन कार्य।

मुझे उम्मीद है कि इसका कोई अर्थ है।


मैंने कोशिश नहीं की है, लेकिन यह समझ में आता है। मेरे पुराने प्रश्न का उत्तर देने के लिए धन्यवाद।
डीन मैकग्रेगर

1
मुझे लगता है कि यह तरीका एक अनुमान अंतराल की तुलना में आत्मविश्वास अंतराल की तरह कुछ और देगा। परिणामों की तुलना एक रेखीय मॉडल से की जानी चाहिए जहां भविष्यवाणी अंतराल का सिद्धांत अच्छी तरह से स्थापित है। कुछ सिम्युलेटेड डेटा पर सर्वश्रेष्ठ जहां सत्य को जाना जाता है और सभी मान्यताओं को धारण किया जाता है।
ग्रेग स्नो

1
@GregSnow: जो मैंने ऊपर वर्णित किया है उससे आप क्या प्राप्त कर रहे होंगे, यह भविष्यवाणी अंतराल निश्चित है। ध्यान दें कि भविष्यवाणी अंतराल आम तौर पर आत्मविश्वास अंतराल की तुलना में बहुत अधिक व्यापक होते हैं क्योंकि आत्मविश्वास अंतराल वास्तव में निर्दिष्ट कर रहे हैं जहां क्वांटिटी का मतलब सांख्यिकीय निहित है जहां भविष्यवाणी सिर्फ एक अवलोकन के साथ संबंध है इसलिए अधिक अनिश्चितता और इसलिए व्यापक अंतराल। आपके द्वारा 1000 पेड़ों से प्राप्त की गई 1000 भविष्यवाणियों को बूटस्ट्रैप्ड नमूने के रूप में माना जा सकता है और आपको यहां सामान्यता लागू करने की आवश्यकता नहीं है। यहां तक ​​कि सरल decile विश्लेषण अच्छे परिणाम देगा।

5
@ शशिकांत डारेड्डी, आप जो वर्णन कर रहे हैं, वह आपको निश्चित रूप से एक भविष्यवाणी अंतराल नहीं मिलेगा। एक भविष्यवाणी अंतराल केवल व्यापक होने से अधिक द्वारा निर्धारित किया जाता है। हां, व्यक्तिगत पेड़ बूटस्ट्रैप बनाते हैं, लेकिन बूटस्ट्रैप मापदंडों का अनुमान लगाता है, व्यक्तिगत मूल्यों का नहीं। भविष्यवाणी अंतराल व्यक्तिगत बिंदुओं के वितरण पर बहुत निर्भर है। तथ्य यह है कि आपकी विधि श्रेणियों के बजाय एक स्पष्ट परिणाम के साथ अनुपात के लिए एक अंतराल देती है। जोड़े गए उत्तर में मेरा उदाहरण देखें।
ग्रेग स्नो

0

मैंने कुछ विकल्प आज़माए हैं (यह सभी WIP):

  1. मैंने वास्तव में आश्रित चर को एक मान के बजाय श्रेणियों के रूप में परिणामों के साथ एक वर्गीकरण समस्या बना दिया। सादे मूल्य का उपयोग करने की तुलना में मुझे जो परिणाम मिले, वे खराब थे। मैंने यह तरीका छोड़ दिया।

  2. मैंने तब इसे कई वर्गीकरण समस्याओं में बदल दिया, जिनमें से प्रत्येक रेंज के लिए एक निचली-बाउंड था (मॉडल के परिणाम यह है कि यह निचली सीमा को पार करेगा या नहीं) और फिर सभी मॉडल (~ 20) चलाए, और फिर रेंज के रूप में अंतिम उत्तर प्राप्त करने के लिए परिणाम को संयुक्त किया। यह ऊपर 1 से बेहतर काम करता है लेकिन उतना अच्छा नहीं है जितना मुझे इसकी आवश्यकता है। मैं अभी भी इस दृष्टिकोण को बेहतर बनाने के लिए काम कर रहा हूं।

मैंने अपने मॉडल कितने अच्छे / बुरे हैं, यह तय करने के लिए मैंने ओओबी और लीव-वन-आउट अनुमानों का इस्तेमाल किया।


0

यादृच्छिक वन भविष्यवाणियों के लिए पूर्वानुमान अंतराल के निर्माण की समस्या को निम्नलिखित पत्र में संबोधित किया गया है:

झांग, हाओज़े, जोशुआ ज़िम्मरमैन, डैन नेटलटन और डैनियल जे। नॉर्डमैन। "यादृच्छिक वन भविष्यवाणी अंतराल।" द अमेरिकन स्टेटिस्टिशियन, 2019।

R पैकेज "rfinterval" इसका कार्यान्वयन CRAN पर उपलब्ध है।

स्थापना

आर पैकेज rfinterval स्थापित करने के लिए :

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

प्रयोग

जल्दी शुरू:

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 . आप हमारी यात्रा करना चाहते हैं । कृपया कई थ्रेड्स के समान उत्तर पोस्ट न करें। प्रत्येक धागे पर विशिष्ट प्रश्न के लिए अपने उत्तरों को अनुकूलित करने का प्रयास करें। यदि आपके पास एक मामला है जहां आप वास्तव में मानते हैं कि एक समान उत्तर पूरी तरह से प्रश्न का उत्तर देता है, तो इसका मतलब है कि प्रश्न एक डुप्लिकेट है। जब आप 50 प्रतिष्ठा तक पहुँचते हैं, तो आप ओपी पर एक टिप्पणी पोस्ट कर सकते हैं। अंतरिम में, आप डुप्लिकेट के रूप में बंद करने के लिए क्यू को ध्वजांकित कर सकते हैं।
गंग - मोनिका
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.