बेतरतीब जंगल है ओवरफिटिंग?


19

मैं परिक्षित के साथ यादृच्छिक जंगलों के साथ प्रयोग कर रहा हूं और मुझे अपने प्रशिक्षण सेट के शानदार परिणाम मिल रहे हैं, लेकिन मेरे परीक्षण के परिणाम अपेक्षाकृत खराब हैं ...

यहां समस्या (पोकर से प्रेरित) है जिसे मैं हल करने की कोशिश कर रहा हूं: खिलाड़ी ए के होल कार्ड, खिलाड़ी बी के होल कार्ड और एक फ्लॉप (3 कार्ड) को देखते हुए, किस खिलाड़ी का हाथ सबसे अच्छा है? गणितीय रूप से, यह 14 इनपुट (7 कार्ड - एक रैंक और प्रत्येक के लिए एक सूट) और एक आउटपुट (0 या 1) है।

यहाँ मेरे कुछ परिणाम अब तक हैं:

Training set size: 600k, test set size: 120k, number of trees: 25
Success rate in training set: 99.975%
Success rate in testing set: 90.05%

Training set size: 400k, test set size: 80k, number of trees: 100
Success rate in training set: 100%
Success rate in testing set: 89.7%

Training set size: 600k, test set size: 120k, number of trees: 5
Success rate in training set: 98.685%
Success rate in testing set: 85.69%

यहाँ प्रासंगिक कोड का उपयोग किया गया है:

from sklearn.ensemble import RandomForestClassifier
Forest = RandomForestClassifier(n_estimators = 25) #n_estimator varies
Forest = Forest.fit(inputs[:trainingSetSize],outputs[:trainingSetSize])
trainingOutputs = Forest.predict(inputs[:trainingSetSize])
testOutputs = Forest.predict(inputs[trainingSetSize:])

ऐसा प्रतीत होता है कि इस्तेमाल किए गए पेड़ों की संख्या की परवाह किए बिना, प्रशिक्षण सेट पर प्रदर्शन अपेक्षाकृत बड़े प्रशिक्षण सेट और सुविधाओं की एक छोटी संख्या के बावजूद, परीक्षण सेट पर बहुत बेहतर है ...


2
मैं यहाँ यादृच्छिक जंगलों के लिए लगभग एक दर्जन 'डायल' नहीं देख रहा हूँ। परिणाम का सत्यापन करना? बायेसियन प्राइज? पुनरुत्थान की प्रकृति? प्रत्येक पेड़ के लिए प्रशिक्षण सेट? प्रत्येक वृक्ष को कितने प्रतिशत उपसमुच्चय? ... और भी बहुत कुछ है जो प्रगणित किया जा सकता है, लेकिन मेरा कहना यह है कि आपके पास विचार करने के लिए अन्य इनपुट हैं।
EngrStudent - मोनिका

1
क्या आप उन लोगों के लिए समस्या बता सकते हैं जो पोकर नहीं जानते हैं। क्या पोकर स्कोर के लिए एक आसान गणना है? फिर यह समझना आसान है कि क्या आरएफ का उपयोग करने के साथ मौलिक रूप से कुछ गलत है ... मुझे पोकर पता नहीं है, लेकिन मुझे संदेह है कि आरएफ शायद गलत दृष्टिकोण है - अर्थात् आरएफ में पहला कदम इनपुट के केवल एक अंश का उपयोग करना है। हालांकि यह मुझे प्रतीत होता है कि इनपुट के सबसेट का उपयोग करके एक अच्छा क्लासिफायर बनाने का कोई तरीका नहीं है - सभी इनपुट की आवश्यकता होती है।
seanv507

जवाबों:


45

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

यदि आप प्रशिक्षण डेटा को भविष्यवाणी विधि में वापस भेजते हैं (जैसा कि आप कर रहे हैं) तो आपको सही OOB त्रुटि के बजाय यह लगभग पूर्ण भविष्यवाणी (जो बेतहाशा आशावादी है) मिलती है। यह मत करो। इसके बजाय, प्रशिक्षित वन ऑब्जेक्ट को OOB त्रुटि के भीतर याद रखना चाहिए। मैं स्कोर-लर्न के कार्यान्वयन से अपरिचित हूं, लेकिन यहां दस्तावेज को देखकर ऐसा लगता है कि आपको oob_score=Trueफिट विधि को कॉल करते समय निर्दिष्ट करने की आवश्यकता है , और फिर सामान्यीकरण त्रुटि के रूप में संग्रहीत किया जाएगा।oob_score_लौटी हुई वस्तु में। आर पैकेज "रैंडमफॉरस्टेस्ट" में, लौटे ऑब्जेक्ट पर कोई तर्क के साथ भविष्यवाणी पद्धति को कॉल करने पर प्रशिक्षण सेट पर ओओबी भविष्यवाणी वापस आ जाएगी। यह आपको कुछ अन्य माप का उपयोग करके त्रुटि को परिभाषित करने देता है। भविष्यवाणी पद्धति में प्रशिक्षण सेट को वापस भेजने से आपको एक अलग परिणाम मिलेगा, क्योंकि यह सभी पेड़ों का उपयोग करेगा। मुझे नहीं पता कि scikit-learnकार्यान्वयन ऐसा करेगा या नहीं।

सटीकता का परीक्षण करने के लिए प्रशिक्षण डेटा को पूर्वानुमान पद्धति में वापस भेजने की गलती है। हालांकि यह एक बहुत ही सामान्य गलती है, इसलिए चिंता न करें।


1
धन्यवाद! हालांकि, मुझे अभी भी एक चिंता है: 400k प्रशिक्षण के उदाहरण और 50 पेड़ों के साथ, मुझे 89.6% सही मिला, जबकि अधिक डेटा और दो बार कई पेड़ों के साथ, मुझे 89.7% सही मिला ... क्या यह सुझाव देता है कि आरएफ एक अच्छा नहीं है इसके लिए विधि? मैंने अतीत में एक एमएलपी न्यूरल नेटवर्क का इस्तेमाल किया और परीक्षण सेट पर ~ 98.5% सटीकता तक पहुंच गया ...
Uwat

5
यह संभव है, हालांकि ऐसा लगता है कि आप लगभग पर्याप्त पेड़ों का उपयोग नहीं कर रहे हैं। आमतौर पर आपको हजारों की जरूरत होती है। ध्यान दें कि आरएफ एल्गोरिथ्म में पेड़ों की संख्या को ट्यून करने के लिए कोई पैरामीटर नहीं है, अधिक हमेशा बेहतर होता है, लेकिन एक बार आपके पास 'पर्याप्त' (आनुभविक रूप से निर्धारित होने के लिए) अधिक पेड़ों के साथ ओओबी त्रुटि में सुधार नहीं होता है। यहां तक ​​कि छोटे सरल डेटा सेटों के लिए, 500 से कम पेड़ों का कुछ भी लगभग पर्याप्त नहीं है।
बोगदानोविस्ट

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

12

मुझे लगता है कि उत्तर है max_features पैरामीटर: इंट, स्ट्रिंग या कोई नहीं, वैकल्पिक (डिफ़ॉल्ट = "ऑटो") पैरामीटर। मूल रूप से इस समस्या के लिए आपको इसे किसी को भी सेट नहीं करना चाहिए, ताकि प्रत्येक पेड़ को सभी इनपुट के साथ बनाया जाए, क्योंकि स्पष्ट रूप से आप केवल कार्ड के एक अंश का उपयोग करके एक उचित क्लासिफायरियर नहीं बना सकते हैं (डिफ़ॉल्ट "ऑटो" sqrt (nfeatures) का चयन कर रहा है) प्रत्येक पेड़ के लिए इनपुट)


1
वह यह था! 50 पेड़ों और 600k प्रशिक्षण उदाहरणों के साथ 95% सटीकता।
उवाट

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