यादृच्छिक वन के लिए ओओबी और भ्रम मैट्रिक्स की व्याख्या कैसे करें?


35

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

यहां कुछ अतिरिक्त जानकारी दी गई है: यह एक वर्गीकरण मॉडल था 0 = कर्मचारी रुका हुआ था, 1 = कर्मचारी समाप्त हो गया, हम वर्तमान में केवल एक दर्जन भविष्यवक्ता चर देख रहे हैं, डेटा "असंतुलित" है जिसमें टर्म रिकॉर्ड लगभग 7 हो जाएंगे। कुल रिकॉर्ड सेट का%।

मैं विभिन्न mtry और ntree चयन के साथ मॉडल चलाता हूं, लेकिन नीचे पर बसा हुआ है। OOB 6.8% है जो मुझे लगता है कि अच्छा है, लेकिन भ्रम की स्थिति के बारे में भविष्यवाणी करने के लिए भ्रम की स्थिति एक अलग कहानी बताती है, क्योंकि त्रुटि दर 92.79% से काफी अधिक है। क्या मुझे यह मानने में सही है कि मैं इस मॉडल पर भरोसा नहीं कर सकता और इसका उपयोग नहीं कर सकता क्योंकि शब्दों की भविष्यवाणी के लिए उच्च त्रुटि दर? या क्या ऐसा कुछ है जो मैं आरएफ का उपयोग करने और शर्तों की भविष्यवाणी के लिए एक छोटी त्रुटि दर प्राप्त कर सकता हूं?

 FOREST_model <- randomForest(theFormula, data=trainset, mtry=3, ntree=500, importance=TRUE, do.trace=100)
ntree      OOB      1      2
  100:   6.97%  0.47% 92.79%
  200:   6.87%  0.36% 92.79%
  300:   6.82%  0.33% 92.55%
  400:   6.80%  0.29% 92.79%
  500:   6.80%  0.29% 92.79%
> print(FOREST_model)

Call:
 randomForest(formula = theFormula, data = trainset, mtry = 3,      ntree = 500, importance = TRUE, do.trace = 100) 
               Type of random forest: classification
                     Number of trees: 500
No. of variables tried at each split: 3

        OOB estimate of  error rate: 6.8%
Confusion matrix:
     0  1 class.error
0 5476 16 0.002913328
1  386 30 0.927884615
> nrow(trainset)
[1] 5908

जवाबों:


20

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

इस उद्देश्य के लिए मैं एक आरओसी वक्र , (ii) को रिकॉल करने की साजिश रचने की सलाह देता हूं (ii) रिकॉल-प्रिसिजन और (iii) कटऑफ का चयन करने के लिए एक कैलिब्रेटिंग कर्व जो आपके उद्देश्यों के लिए सबसे उपयुक्त है। इन सभी को ROCR आर लाइब्रेरी ( CRAN पर भी उपलब्ध ) से 2 निम्नलिखित कार्यों का उपयोग करके आसानी से प्लॉट किया जा सकता है :

pred.obj <- prediction(predictions, labels,...)
performance(pred.obj, measure, ...)

उदाहरण के लिए:

rf <- randomForest (x,y,...);
OOB.votes <- predict (rf,x,type="prob");
OOB.pred <- OOB.votes[,2];

pred.obj <- prediction (OOB.pred,y);

RP.perf <- performance(pred.obj, "rec","prec");
plot (RP.perf);

ROC.perf <- performance(pred.obj, "fpr","tpr");
plot (ROC.perf);

plot  (RP.perf@alpha.values[[1]],RP.perf@x.values[[1]]);
lines (RP.perf@alpha.values[[1]],RP.perf@y.values[[1]]);
lines (ROC.perf@alpha.values[[1]],ROC.perf@x.values[[1]]);

मुझे आपके उत्तर में दिलचस्पी है, मैंने आपके द्वारा साझा किए गए कोड के साथ साजिश रची। क्या आप मुझे सुझाए गए प्लॉट के बारे में थोड़ा विस्तार खोजने के लिए कुछ संसाधन दे सकते हैं। या इसकी व्याख्या कैसे करें के बारे में कुछ वाक्य लिखेंगे। अग्रिम में बहुत धन्यवाद।
MKS

मेरा सुझाव है कि आप आरओसी वक्र के लिए प्रविष्टि के साथ शुरू करते हैं जो ऊपर और अन्य प्रविष्टियों से जुड़ा हुआ है।
इटाराम

उत्तर सीधे तौर पर अत्यधिक तिरछे डेटा सेट में निर्णय ट्री की सीमा को संबोधित नहीं करता है।
स्मॉलचेयर

19

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

आपको अपने सेट को "0" वर्ग के नमूने द्वारा या तो "1" वर्ग के समान आकार के लिए या classwtपैरामीटर के साथ खेलकर संतुलित करने का प्रयास करना चाहिए ।


1
एक classwtपैरामीटर होने के बावजूद , मुझे नहीं लगता कि यह आर। प्रति लिंक में पैकेज के randomForest()कार्य में अभी तक लागू है । क्या आपने इसे पहले इस्तेमाल किया है? मैंने इसे विभिन्न मूल्यों के साथ आज़माया लेकिन डिफ़ॉल्ट के समान परिणाम मिला । randomForestclasswt=NULL
झब्बारब

9

आपके भ्रम मैट्रिक्स के आधार पर, आपको 5,908 डेटा पॉइंट मिले हैं और इनमें से विशाल, विशाल बहुमत प्रकार 0 ('कर्मचारी स्टे') हैं। इसलिए क्लासिफायर "आलसी" होने और बहुसंख्यक वर्ग को चुनने से दूर हो सकता है जब तक कि यह बिल्कुल निश्चित नहीं है कि एक उदाहरण अन्य वर्ग का है। ध्यान दें कि आपकी समग्र त्रुटि दर ~ 7% है, जो कक्षा 1 के उदाहरणों के प्रतिशत के काफी करीब है!

आपको कुछ विकल्प मिले हैं:

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

  • Class0 की विषम संख्या की भरपाई करने के लिए अपने नुकसान फ़ंक्शन / वर्ग भार को समायोजित करें। आप अनिवार्य रूप से Class0 एक की तुलना में Class1 उदाहरण को गलत तरीके से वर्गीकृत करने के लिए इसे और अधिक महंगा बनाना चाहते हैं। इसे शुरू करने के लिए कक्षा ० = १ / ०.० = ~ = १४x १ कक्षा की कोशिश करना समझ में आ सकता है, लेकिन आप इसे अपनी व्यावसायिक मांगों के आधार पर समायोजित करना चाहते हैं (कितना बुरा एक प्रकार की त्रुटि है)। मुझे लगता है कि classwtपैरामीटर वही है जो आप यहां खोज रहे हैं।

  • यह सुनिश्चित करने के लिए स्तरीकृत नमूने का उपयोग करें कि आपको पेड़ों के प्रशिक्षण डेटा में दोनों वर्गों से उदाहरण मिले हैं। यह संभव है कि आपके कुछ पेड़ केवल Class0 डेटा पर प्रशिक्षित किए गए थे, जो स्पष्ट रूप से उनके सामान्यीकरण प्रदर्शन के लिए खराब होगा। strataतर्क की जाँच करें ।


बेतरतीब ढंग से प्रमुख वर्ग से चयन उचित लगता है। उन्हें समान होने की आवश्यकता नहीं है: यहां तक ​​कि 1: 5 अनुपात में सुधार होना चाहिए।
इटाराम

@ इटमार, यह निश्चित रूप से है जो मैं पहले कोशिश करूँगा। हालांकि, ऐसा लगता है कि यह सुनिश्चित करने के लिए कुछ तरीका होना चाहिए कि आपके द्वारा बनाए गए उदाहरण बड़े डेटा सेट के प्रतिनिधि हैं।
मैट क्राऊस

1
एक विकल्प बड़े सेट पर पीसीए (सिद्धांत घटक विश्लेषण) चलाने के लिए हो सकता है, पहले सिद्धांत घटक के अनुसार अंक क्लस्टर करें और प्रत्येक क्लस्टर से एक नमूना चुनें।
इटाराम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.