क्या प्रीप्रोसेसिंग की आवश्यकता है पहले कैरेट पैकेज के साथ रैंडमफॉरस्ट के फाइनलमॉडल का उपयोग करना?


12

मैं 10x10CV के साथ एक यादृच्छिक वस्तु को प्रशिक्षित करने के लिए कैरेट पैकेज का उपयोग करता हूं।

library(caret)
tc <- trainControl("repeatedcv", number=10, repeats=10, classProbs=TRUE, savePred=T) 
RFFit <- train(Defect ~., data=trainingSet, method="rf", trControl=tc, preProc=c("center", "scale"))

उसके बाद, मैं एक टेस्टसेट पर यादृच्छिक परीक्षण का परीक्षण करता हूं (नया डेटा)

RF.testSet$Prediction <- predict(RFFit, newdata=testSet)

भ्रम मैट्रिक्स मुझे दिखाता है, कि मॉडल उतना बुरा नहीं है।

confusionMatrix(data=RF.testSet$Prediction, RF.testSet$Defect)
              Reference
    Prediction   0   1
             0 886 179
             1  53 126  

      Accuracy : 0.8135          
             95% CI : (0.7907, 0.8348)
No Information Rate : 0.7548          
P-Value [Acc > NIR] : 4.369e-07       

              Kappa : 0.4145 

मैं अब $ फाइनलमॉडल का परीक्षण करना चाहता हूं और मुझे लगता है कि यह मुझे एक ही परिणाम देना चाहिए, लेकिन किसी तरह मुझे प्राप्त होता है

> RF.testSet$Prediction <- predict(RFFit$finalModel, newdata=RF.testSet)
>  confusionMatrix(data=RF.testSet$Prediction, RF.testSet$Defect)
Confusion Matrix and Statistics

          Reference
Prediction   0   1
         0 323  66
         1 616 239

               Accuracy : 0.4518          
                 95% CI : (0.4239, 0.4799)
    No Information Rate : 0.7548          
    P-Value [Acc > NIR] : 1               

                  Kappa : 0.0793 

मैं क्या खो रहा हूँ?

@topepo संपादित करें:

मैंने बिना पूर्व-विकल्प के भी एक और यादृच्छिक खोज सीखी और एक और परिणाम प्राप्त किया:

RFFit2 <- train(Defect ~., data=trainingSet, method="rf", trControl=tc)
testSet$Prediction2 <- predict(RFFit2, newdata=testSet)
confusionMatrix(data=testSet$Prediction2, testSet$Defect)

Confusion Matrix and Statistics

          Reference
Prediction   0   1
         0 878 174
         1  61 131

               Accuracy : 0.8111          
                 95% CI : (0.7882, 0.8325)
    No Information Rate : 0.7548          
    P-Value [Acc > NIR] : 1.252e-06       

                  Kappa : 0.4167     

पहली बार में, आपने एक ट्रेन ऑब्जेक्ट के साथ भविष्यवाणी की थी जिसे आपने कॉल किया था RFFit, दूसरी बार आपने मॉडल ऑब्जेक्ट का उपयोग करके भविष्यवाणी की थी, मुझे लगता है। तो अंतर ट्रेन ऑब्जेक्ट के साथ अन्य चीजों को पारित करने में हो सकता है जो ट्रेन ऑब्जेक्ट का उपयोग किए बिना आपके नए परीक्षण डेटा को किसी तरह से अलग तरीके से संसाधित करता है।
डॉक्टरेट

4
दूसरे trainमॉडल के लिए आपको थोड़ा अलग परिणाम मिलेगा जब तक कि आप इसे चलाने से पहले यादृच्छिक संख्या बीज सेट नहीं करते (देखें ?set.seed)। सटीकता मान 0.8135 और 0.8111 हैं, जो बहुत करीब हैं और केवल रेज़मैपलिंग की यादृच्छिकता और मॉडल की गणना के कारण हैं।
टोप्पो

जवाबों:


17

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

मैक्स


लेकिन RFFitऑब्जेक्ट प्रीप्रोसेस trainविधि के साथ बनाया गया है ... इसलिए इसे एक केंद्रित और स्केल की गई वस्तु को वापस करना चाहिए (इसे नहीं करना चाहिए?)। यदि ऐसा है -> $finalModelभी बढ़ाया जाना चाहिए और केंद्रित
फ्रैंक

2
हां लेकिन, ऊपर दिए गए कोड के अनुसार, आपने सेंटिंग और स्केलिंग को लागू नहीं किया है testSetpredict.trainवह करता है लेकिन predict.randomForestनहीं करता है।
टोप्पो

इसलिए एक ही टेस्टसेट के उपयोग predict(RFFit$finalModel, testSet)और उपयोग में कोई अंतर नहीं है predict(RFFit, testSet)?
फ्रैंक

6
predict(RFFit$finalModel, testSet)और predict(RFFit, testSet)यदि आप preProcविकल्प का उपयोग करते हैं तो अलग होगा train। यदि आप नहीं करते हैं, तो वे समान डेटासेट पर प्रशिक्षण दे रहे हैं। दूसरे शब्दों में, कोई भी पूर्व-प्रसंस्करण जिसे आप मांगते हैं, उसे चलाने से पहले प्रशिक्षण सेट पर किया जाता है randomForest। यह किसी भी डेटा पर उसी पूर्व-प्रसंस्करण को लागू करता है जिसे आप (उपयोग predict(RFFit, testSet)) पर भविष्यवाणी करते हैं । यदि आप finalModelऑब्जेक्ट का उपयोग करते हैं , तो आप predict.randomForestइसके बजाय उपयोग कर रहे हैं predict.trainऔर पूर्व-प्रसंस्करण में से कोई भी भविष्यवाणी से पहले नहीं किया जाता है।
टोप्पो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.