मुझे लगता है कि यह एक पुरानी पोस्ट है लेकिन मैं इस पर कुछ सिमुलेशन चला रहा हूं और सोचा कि मैं अपने निष्कर्ष साझा करूंगा।
@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 का भी सुझाव दिया है। लेकिन ध्यान दें कि हमारे द्वारा चर्चा की गई सभी विधियों में अंतर्निहित धारणा यह है कि त्रुटियां एक सामान्य वितरण का पालन करती हैं।
score
प्रदर्शन के मूल्यांकन के लिए किसी प्रकार का कार्य करते हैं। चूंकि आउटपुट जंगल में पेड़ों के बहुमत वोट पर आधारित है, इसलिए वर्गीकरण के मामले में यह आपको इस परिणाम की सत्यता की संभावना देगा, जो वोट वितरण पर आधारित है। मैं प्रतिगमन के बारे में निश्चित नहीं हूँ, हालांकि .... आप किस पुस्तकालय का उपयोग करते हैं?