Xgboost में ओवरफिट के बारे में चर्चा


20

मेरा सेट-अप निम्नलिखित है:

मैं "एप्लाइड प्रिडिक्टिव मॉडलिंग" में दिशानिर्देशों का पालन कर रहा हूं। इस प्रकार मैंने सहसंबद्ध सुविधाओं को फ़िल्टर किया है और निम्नलिखित के साथ समाप्त होता है:

  • ट्रेनिंग सेट में 4900 डेटा पॉइंट और टेस्ट सेट में 1600 डेटा पॉइंट हैं।
  • मेरे पास 26 विशेषताएं हैं और लक्ष्य एक निरंतर परिवर्तनशील है।

मैं caretपैकेज का उपयोग करके मॉडल को प्रशिक्षित करने के लिए 5 गुना क्रॉसवॉलिडेशन लागू करता हूं । जब मैं एक MARS मॉडल लागू करता हूं तो मुझे प्रशिक्षण सेट के साथ-साथ टेस्टसेट पर लगभग 4 की औसत निरपेक्ष त्रुटि (MAE) मिलती है।

हालाँकि, xgboost (या तो ट्री अल्गोरिद्म या लीनियर वन) लगाने से मुझे प्रशिक्षण सेट पर 0.32 (!) और टेस्टसेट पर 2.4 जैसा कुछ मिलता है।

इस प्रकार यदि परीक्षण त्रुटि प्रशिक्षण त्रुटि का 8 गुना है तो मैं कहूंगा: मेरे पास प्रशिक्षण डेटा ओवरफिट है। फिर भी मुझे परीक्षण मार्ग पर एक छोटी सी त्रुटि मिलती है।

मैं xgboost पर निम्न मापदंडों का उपयोग करता हूं:

  • nrounds = 1000और eta = 0.01(चारों ओर बढ़ती घबराहट और घटते एटा से मदद मिल सकती है लेकिन मैं मेमोरी से बाहर निकलता हूं और रन टाइम बहुत लंबा होता है)
  • max_depth = 16: अगर मैं अन्य पोस्ट और 6 के डिफ़ॉल्ट की तुलना करता हूं तो यह बड़ा दिखता है लेकिन समस्या बहुत जटिल है - शायद 16 इस मामले में बहुत बड़ी नहीं है।
  • colsample_bytree = 0.7, subsample = 0.8और min_child_weight = 5: ऐसा करने से मैं ओवरफिट को कम करने की कोशिश करता हूं।

अगर मैं max_depth को कम करता हूं तो ट्रेन और टेस्ट-एरर करीब हो जाते हैं लेकिन फिर भी एक बड़ा गैप होता है और टेस्ट-एरर बड़ा होता है (3 से थोड़ा ऊपर)।

रैखिक बूस्टर का उपयोग करने से मुझे लगभग एक ही ट्रेन मिलती है और इष्टतम paremeters पर परीक्षण त्रुटि होती है:

  • lambda = 90 और `अल्फा = 0: क्रॉस-वैलिडेशन द्वारा पाया गया, लैम्ब्डा को ओवरफिट से बचना चाहिए।
  • colsample_bytree = 0.8, subsample = 0.8और min_child_weight = 5: ऐसा करने से मैं ओवरफिट को कम करने की कोशिश करता हूं।

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

आपको क्या लगता है: क्या मैं ओवरफिट को स्वीकार कर सकता हूं यदि (यदि यह संभव है) वास्तविक जीवन का प्रदर्शन बेहतर है? क्या मेरी सेटिंग में xgboost ओवरफिट होता है?

जवाबों:


34

क्या ओवरफ़िटिंग इतना बुरा है कि आपको एक मॉडल नहीं चुनना चाहिए जो ओवरफिट करता है, भले ही इसका परीक्षण त्रुटि छोटा हो? नहीं, लेकिन आपको इसे चुनने का औचित्य होना चाहिए।

यह व्यवहार XGBoost तक सीमित नहीं है। यह सभी मशीन लर्निंग तकनीकों के बीच एक सामान्य धागा है; अंडरफ़टिंग और ओवरफ़िटिंग के बीच सही ट्रेडऑफ़ खोजना। औपचारिक परिभाषा Bias-variance tradeoff (विकिपीडिया) है

पूर्वाग्रह-विचरण व्यापार

निम्नलिखित अपने मॉडल के चुनाव को सही ठहराने में मदद करने के लिए बायस-विचरण व्यापार का एक सरलीकरण है।

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

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

वे परिभाषा बहुत हद तक अंडरफुटिंग और ओवरफिटिंग की परिभाषाओं के समान हैं। हालाँकि, उन परिभाषाओं को अक्सर विरोध के रूप में सरल बनाया जाता है, जैसे कि

  • यदि प्रशिक्षण और परीक्षण त्रुटि दोनों उच्च हैं, तो मॉडल कम है। इसका मतलब है कि मॉडल बहुत सरल है।
  • यदि परीक्षण त्रुटि प्रशिक्षण त्रुटि से अधिक है, तो मॉडल ओवरफिटिंग है। इसका मतलब है कि मॉडल बहुत जटिल है।

वे सरलीकरण निश्चित रूप से सहायक हैं, क्योंकि वे मॉडल की सही जटिलता को चुनने में मदद करते हैं। लेकिन वे एक महत्वपूर्ण बिंदु को नजरअंदाज करते हैं, यह तथ्य कि (लगभग) प्रत्येक मॉडल में पूर्वाग्रह और विचरण घटक दोनों होते हैं। अंडरफिटिंग / ओवरफिटिंग विवरण आपको बताता है कि आपके पास बहुत अधिक पूर्वाग्रह / बहुत अधिक विचरण है, लेकिन आपके पास (लगभग) हमेशा है दोनों होते हैं

यदि आप पूर्वाग्रह-भिन्नता व्यापार के बारे में अधिक जानकारी चाहते हैं, तो वे Google के माध्यम से उपलब्ध सहायक विज़ुअलाइज़ेशन और अच्छे ressource के बहुत सारे हैं। प्रत्येक मशीन सीखने वाली पाठ्यपुस्तक में पूर्वाग्रह-विधा व्यापार पर एक खंड होगा, यहां कुछ हैं

  • सांख्यिकीय शिक्षा और सांख्यिकीय शिक्षा के तत्व (यहां उपलब्ध) के लिए एक परिचय ।
  • क्रिस्टोफर बिशप द्वारा पैटर्न मान्यता और मशीन लर्निंग,।
  • मशीन लर्निंग: केविन मर्फी द्वारा एक संभाव्य परिप्रेक्ष्य।

इसके अलावा, एक अच्छी ब्लॉग पोस्ट जिसने मुझे समझने में मदद की वह है स्कॉट फोर्टमैन-रो की अंडरस्टैंडिंग द बायस-वेरिएंस ट्रेडऑफ़

अपनी समस्या के लिए आवेदन

तो आपके पास दो मॉडल हैं,

ट्रेन MAEटेस्ट MAEमार्स~4.0~4.0कम विचरण, उच्च पूर्वाग्रह,XGBoost~0.3~2.4उच्च विचरण, निचला पूर्वाग्रह,

और आपको एक लेने की जरूरत है। ऐसा करने के लिए, आपको यह परिभाषित करने की आवश्यकता है कि एक बेहतर मॉडल क्या है। आपके निर्णयों में शामिल किए जाने वाले पैरामीटर जटिलता और मॉडल का प्रदर्शन हैं।

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

यहां लक्ष्य एक मॉडल ढूंढना नहीं है जो "ओवरफिट नहीं करता है"। यह उस मॉडल को ढूंढना है जिसमें सबसे अच्छा पूर्वाग्रह-विचरण व्यापार है। इस मामले में, मैं तर्क दूंगा कि XGBoost मॉडल द्वारा पूरा किए गए पूर्वाग्रह में कमी, प्रसरण में वृद्धि को सही ठहराने के लिए पर्याप्त है।

तुम क्या कर सकते हो

हालांकि, आप शायद हाइपरपैरामीटर को ट्यून करके बेहतर कर सकते हैं।

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

  • आपके द्वारा उगने वाले पेड़ों की गहराई शुरू करने के लिए बहुत अच्छी जगह है। आपको ध्यान देना होगा कि गहराई की हर एक इकाई के लिए, आप निर्माण किए जाने वाले लीफ़्स की संख्या को दोगुना करते हैं। यदि आपको आकार 16 के बजाय आकार दो के पेड़ उगाने थे, तो यह लगेगा1/214समय की! आपको अधिक छोटे पेड़ उगाने की कोशिश करनी चाहिए। यही कारण है कि पेड़ की गहराई को विशेषता बातचीत की डिग्री का प्रतिनिधित्व करना चाहिए । यह शब्दजाल हो सकता है, लेकिन यदि आपकी विशेषताओं में 3 की सहभागिता की डिग्री है (मोटे तौर पर: 4 सुविधाओं का एक संयोजन उन विशेषताओं में से 3 के संयोजन से अधिक शक्तिशाली नहीं है + चौथा), तो आकार के बढ़ते हुए पेड़ 3 से अधिक है हानिकारक। गहराई तीन के दो पेड़ों में गहराई चार के एक पेड़ की तुलना में अधिक सामान्यीकरण शक्ति होगी। यह एक जटिल अवधारणा है और मैं अभी इसमें नहीं जाऊंगा, लेकिन आप एक शुरुआत के लिए कागजात के इस संग्रह की जांच कर सकते हैं । इसके अलावा, ध्यान दें कि गहरे पेड़ उच्च विचरण करते हैं!

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


1
किसी को "धन्यवाद" कहते हुए टिप्पणी नहीं करनी चाहिए लेकिन इस लंबे और दिलचस्प जवाब के लिए मैं "धन्यवाद" कहना चाहूंगा। मुझे पता है कि आप जो कुछ लिखते हैं, उसके बारे में कुछ ज्ञान था, लेकिन यह वास्तव में अच्छी तरह से एक साथ रखा गया था। मैं आपके कुछ संदर्भों के माध्यम से जाना और नए पेड़ उगाऊंगा और शायद एक टिप्पणी के साथ वापस आऊंगा। अभी के लिए: धन्यवाद! महान!
रिक

इंटरैक्शन पेज स्टेट का लिंक ।columbia.edu/~jakulin/Int वास्तव में बहुत अच्छा है!
रिक

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