रैंडम फॉरेस्ट - ओवरफिटिंग से कैसे निपटें


41

मेरे पास एक कंप्यूटर विज्ञान पृष्ठभूमि है, लेकिन मैं इंटरनेट पर समस्याओं को हल करके खुद को डेटा विज्ञान सिखाने की कोशिश कर रहा हूं।

मैं पिछले कुछ हफ्तों से इस समस्या पर काम कर रहा हूं (लगभग 900 पंक्तियाँ और 10 विशेषताएँ)। मैं शुरू में लॉजिस्टिक रिग्रेशन का उपयोग कर रहा था, लेकिन अब मैं यादृच्छिक जंगलों में बदल गया हूं। जब मैं अपने प्रशिक्षण डेटा पर अपना रैंडम फ़ॉरेस्ट मॉडल चलाता हूं तो मुझे वास्तव में auc (> 99%) के लिए उच्च मूल्य मिलते हैं। हालाँकि जब मैं परीक्षण डेटा पर एक ही मॉडल चलाता हूं तो परिणाम इतने अच्छे नहीं होते हैं (लगभग 77% की सटीकता)। यह मुझे विश्वास दिलाता है कि मैं प्रशिक्षण डेटा को खत्म कर रहा हूं।

यादृच्छिक जंगलों में फिटिंग को रोकने के बारे में सबसे अच्छे अभ्यास क्या हैं?

मैं अपने विकास के वातावरण के रूप में r और rstudio का उपयोग कर रहा हूं। मैं randomForestपैकेज का उपयोग कर रहा हूं और सभी मापदंडों के लिए डिफॉल्ट को स्वीकार कर लिया है


4
ब्रिमन का दावा है कि आरएफ ओवरफिट नहीं करता है। stat.berkeley.edu/~breiman/RandomForests/cc_home.htm इस धारणा पर कि वह सही है, शायद आपके प्रशिक्षण और परीक्षण सेट के बीच किसी प्रकार की असंगति है?
मोनिका

यदि आप ट्यूनिंग पैरामीटर का अनुकूलन करते हैं तो RF AVOIDS से अधिक डेटा पर निर्भर करता है
Brash Equilibrium

मुझे लगता है कि एक पूर्ण अनदेखी ट्यूनिंग पैरामीटर का नमूना है। stackoverflow.com/questions/34997134/…
सोरेन हवेलुंड वेलिंग

जवाबों:


30

kk{5,10}


1
धन्यवाद। क्या कुछ ट्यूटोरियल है जो दिखाता है कि इन मापदंडों को कैसे अनुकूलित किया जाए?
अभि

आपको स्टैनफोर्ड ऑनलाइन पाठ्यक्रमों के लिए पंजीकरण करने की आवश्यकता होगी, जो बहुत सरल है, लेकिन यहां इसे R: class.stanford.edu/courses/HumanitiesScience/StatLearning//
Equilibrium

अगर मैं इसे सही ढंग से समझ रहा हूं तो हम यादृच्छिक सत्यापन में जाने वाले उन सुविधाओं की संख्या का पता लगाने के लिए क्रॉस सत्यापन का उपयोग करते हैं, जो प्रत्येक चरण में मॉडल की कोशिश की जाने वाली सुविधाओं की संख्या के विपरीत होगी। सही बात ?
अभि

4
मैं इस जवाब के खिलाफ तर्क दूंगा: आरएफ की दो आकर्षक विशेषताएं यह हैं कि उन्हें ओवरफिट करना मुश्किल है और डिफ़ॉल्ट पैरामीटर आमतौर पर काफी अच्छे हैं। इस उत्तर से प्रतीत होता है कि RF डिफॉल्ट के प्रति संवेदनशील है जो शायद ही कभी होता है
charles

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

33

आप अपने प्रशिक्षण डेटा पर 99% AUC कैसे प्राप्त कर रहे हैं? ध्यान रखें कि दोनों के बीच अंतर है

predict(model)

तथा

predict(model, newdata=train)

जब प्रशिक्षण डेटासेट के लिए भविष्यवाणियां हो रही हों। पहला विकल्प यादृच्छिक वन से आउट-ऑफ-बैग भविष्यवाणियों को प्राप्त करता है। यह आम तौर पर आप क्या चाहते हैं, जब प्रशिक्षण डेटा पर वास्तविक मूल्यों की भविष्यवाणी की तुलना करते हैं।

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


3
मैं भविष्यवाणी (मॉडल, डेटा = ट्रेन) का उपयोग कर रहा था। मैंने अब भविष्यवाणी (मॉडल) पर स्विच कर दिया है और मेरा एन्यू 87% तक गिर गया है। क्या यह एक अच्छी चीज है या बुरी चीज?
अभि १

2
धन्यवाद! मैंने पाया कि यह मेरे लिए भी मुद्दा था। मैंने आरएफ मॉडल के लिए 'प्रशिक्षण त्रुटि' के रूप में उपयोग करने के लिए किस उपाय पर एक अनुवर्ती प्रश्न पोस्ट किया है: आंकड़े
Berk U.

बहुत बहुत धन्यवाद!! मैं भी यही गलती कर रहा था! @Abhi के लिए: यह एक अच्छी बात है, क्योंकि पिछले AUC निरर्थक रूप से उच्च था। यह एक और अधिक यथार्थवादी है। क्रॉस-सत्यापन का प्रयास करें और उस पर एयूसी को मापें और आप शायद समान मूल्य देखेंगे।
जिज्ञासु

7

निर्णय पेड़ों के लिए ओवरफिटिंग से निपटने के दो तरीके हैं: (ए) पेड़ों को उनकी संपूर्णता (बी) के लिए नहीं बढ़ाते हैं

यही बात पेड़ों के जंगल पर भी लागू होती है - उन्हें बहुत ज्यादा और अधिक न बढ़ाएं।

मैं randomForestबहुत उपयोग नहीं करता, लेकिन मेरे ज्ञान के लिए, कई पैरामीटर हैं जिनका उपयोग आप अपने जंगलों को ट्यून करने के लिए कर सकते हैं:

  • nodesize - टर्मिनल नोड्स का न्यूनतम आकार
  • maxnodes - टर्मिनल नोड्स की अधिकतम संख्या
  • mtry - प्रत्येक पेड़ के निर्माण के लिए उपयोग किए जाने वाले चर की संख्या (धन्यवाद @ user777)

1
और mtry, चर की संख्या एल्गोरिथ्म प्रत्येक पेड़ का निर्माण करने के लिए आकर्षित करती है, कुल सुविधाओं की संख्या के वर्गमूल को डिफ़ॉल्ट रूप से।
मोनिका

मैं इसके बजाय अधिकतम और निचले नमूने छोड़ देता। दोनों decresing maxnodes और sampsize पेड़ों को कम गहराई और अधिक मजबूत जंगल के साथ देते हैं, हालांकि पेड़ के निचले हिस्से को भी समतल करते हैं, और जंगल संभवतः कम क्रॉस-मान्य पूर्वानुमान भविष्यवाणी में परिवर्तित हो जाएगा, देखें stackoverflow.com/questions/34997134/…
सोरेन हवेलुंड वेलिंग

2

आप क्रॉस सत्यापन विधियों का उपयोग करना चाह सकते हैं, जैसे कि के गुना क्रॉस सत्यापन।


आपको सुविधाओं को सामान्य / स्केल करने की आवश्यकता है?
चार्ल्स

4
@ मेरे माफी माँगता हूँ। यादृच्छिक जंगलों का उपयोग करने में सुविधाओं को पैमाना करना आवश्यक नहीं है। देखें: stackoverflow.com/questions/8961586/…
फ्री

मुझे लगता है कि क्रॉस-वैलिडेशन उपयोगी होगा। यह विभाजन नमूना सत्यापन के साथ एक अपेक्षाकृत छोटा डेटासेट है जो संभावित रूप से त्रुटि के अस्थिर अनुमानों का उत्पादन करता है (हालांकि माना जाता है कि मुझे यह समझ में नहीं आता है कि यह मुद्दा नहीं है)
charles

1

आप ग्रिडसर्च का उपयोग करके अपने मापदंडों को ट्यून कर सकते हैं

from sklearn.ensemble import RandomForestClassifier

from sklearn.grid_search import GridSearchCV

random_classifier = RandomForestClassifier()

parameters = { 'max_features':np.arange(5,10),'n_estimators':[500],'min_samples_leaf': [10,50,100,200,500]}

random_grid = GridSearchCV(random_classifier, parameters, cv = 5)

एक प्रयास संपादक का सुझाव है कि मॉड्यूल GridSearchCVको कहा जाता है model_selection, और इस प्रकार कोड की दूसरी पंक्ति होनी चाहिए from sklearn.model_selection import GridSearchCV
गूँग - मोनिका

0

[५, १५] की श्रेणियों में अधिकतम_दोपहर पैरामीटर को ट्यून करने की कोशिश करें , लेकिन इससे अधिक नहीं क्योंकि यदि आप बड़ी गहराई लेते हैं तो ओवरफिटिंग की अधिक संभावना है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.