यह एक बहुत ही दिलचस्प सवाल है। पूरी तरह से समझने के लिए कि क्या चल रहा था, मुझे XGBoost के माध्यम से जाना था, और इससे निपटने के लिए हमारे टूलबॉक्स में क्या अन्य तरीके थे। मेरा जवाब पारंपरिक तरीकों से अधिक है, और कैसे / क्यों XGBoost एक सुधार है। यदि आप केवल बुलेट पॉइंट चाहते हैं, तो अंत में एक सारांश है।
पारंपरिक ढाल बूस्टिंग
पारंपरिक ढाल बूस्टिंग एल्गोरिथ्म (विकिपीडिया) पर विचार करें :
- आधार मॉडल की गणना एच0
- के लिए मीटर ← 1 : एम
- छद्म अवशिष्टों की गणना करें आरमैं एम= - ∂ℓ( y)मैं,एचएम -1(x)मैं) )∂एचमी - 1(x)मैं)
- एक बेस शिक्षार्थी को छद्म अवशिष्टों में फ़िट करेंजमीटर(x )
- लागत को कम करने वाले गुणक गणना करें , , (लाइन खोज का उपयोग करके)γγ= अर्गमिनटγΣएनमैं = १ℓ ( y)मैं, एचमी - 1(xi)+γhm(xi))
- मॉडल अपडेट करें ।Hm(x)=Hm−1(x)+γhm(x)
- आपको अपना बढ़ा हुआ मॉडल ।HM(x)
फ़ंक्शन सन्निकटन महत्वपूर्ण है निम्नलिखित भाग के लिए,
एक बेस शिक्षार्थी को छद्म अवशिष्टों में फ़िट करें ।hm(x)
कल्पना कीजिए कि आप अपने ग्रैडिएंट बूस्टिंग अल्गोरिद्म का निर्माण कहाँ से करेंगे। आप कमजोर शिक्षार्थियों के रूप में मौजूदा प्रतिगमन पेड़ों का उपयोग करके ऊपर एल्गोरिथ्म का निर्माण करेंगे। मान लें कि आपको कमजोर शिक्षार्थियों के मौजूदा कार्यान्वयन को मोड़ने की अनुमति नहीं है। में मैटलैब , डिफ़ॉल्ट विभाजन कसौटी मीन स्क्वायर त्रुटि है। वही शिकयत सीखने के लिए जाता है ।
आप सर्वश्रेष्ठ मॉडल को खोजने का प्रयास कर रहे हैं जो लागत । लेकिन ऐसा करने के लिए, आप MSE को वस्तुनिष्ठ फ़ंक्शन के रूप में उपयोग करके अवशिष्ट को एक साधारण प्रतिगमन मॉडल फिट कर रहे हैं। ध्यान दें कि आप सीधे नहीं चाहते हैं कि आप क्या चाहते हैं, लेकिन ऐसा करने के लिए प्रॉक्सी के रूप में अवशिष्ट और एमएसई का उपयोग करें। खराब हिस्सा यह है कि यह जरूरी नहीं कि इष्टतम समाधान देता है। अच्छी बात यह है कि यह काम करता है।hm(x)ℓ(yi,Hm−1(xi)+hm(xi))
पारंपरिक ढाल वंश
यह पारंपरिक ग्रेडिएंट डिसेंट (विकिपीडिया) के अनुरूप है , जहाँ आप फंक्शन के ग्रेडिएंट के प्रत्येक चरण पर ऋणात्मक अनुसरण करके एक लागत फंक्शन को कम करने की कोशिश कर रहे हैं ।f(x)−∇f(x)
x( i) + 1))=x( i))-∇f(x( i)))
यह आपको एक चरण के बाद सटीक न्यूनतम खोजने की अनुमति नहीं देता है, लेकिन प्रत्येक चरण आपको न्यूनतम (यदि फ़ंक्शन उत्तल है) के करीब ले जाता है। यह एक सन्निकटन है, लेकिन यह बहुत अच्छी तरह से काम करता है और यह एल्गोरिथ्म है जो हम परंपरागत रूप से एक लॉजिस्टिक प्रतिगमन करने के लिए उपयोग करते हैं, उदाहरण के लिए।
अन्तराल
इस बिंदु पर, समझने वाली बात यह है कि सामान्य ढाल बूस्टिंग एल्गोरिथ्म प्रत्येक संभावित विभाजन के लिए लागत फ़ंक्शन गणना नहीं करता है, यह अवशिष्ट को फिट करने के लिए प्रतिगमन कमजोर शिक्षार्थी की लागत फ़ंक्शन का उपयोग करता है।ℓ
आपके प्रश्न का तात्पर्य यह लगता है कि "सच XGBoost" को प्रत्येक विभाजन के लिए लागत फ़ंक्शन की गणना करनी चाहिए, और यह कि "अनुमानित XGBoost" इसे अनुमानित करने के लिए एक अनुमानी का उपयोग कर रहा है। आप इसे इस तरह से देख सकते हैं, लेकिन ऐतिहासिक रूप से, हमारे पास सामान्य ढाल बूस्टिंग एल्गोरिदम है, जो वर्तमान बिंदु पर व्युत्पन्न को छोड़कर लागत फ़ंक्शन के बारे में जानकारी का उपयोग नहीं करता है। XGBoost ग्रैडिएंट बूस्टिंग का एक विस्तार है जो केवल ढाल से अधिक सटीक सन्निकटन का उपयोग करके कमजोर प्रतिगमन पेड़ों को उगाने के बारे में होशियार होने की कोशिश करता है।
सर्वोत्तम मॉडल चुनने के अन्य तरीकेजमीटर( x )
अगर हम AdaBoost को ग्रेडिएंट बूस्टिंग के विशेष मामले के रूप में देखते हैं, तो यह regressors का चयन नहीं करता है, बल्कि कमजोर शिक्षार्थियों के रूप में क्लासिफायर का चयन करता है। यदि हम , तो AdaBoost जिस तरह का सबसे अच्छा मॉडल ढूंढता है, वह हैजमीटर( X ) ∈ { - 1 , 1 }
जमीटर= अर्गअधिकतमजमीटरΣमैं = १एनwमैंजमीटर( x)मैं)
जहां अवशिष्ट हैं ( स्रोत, स्लाइड 20 से शुरू होता है )। इस उद्देश्य फ़ंक्शन के उपयोग के लिए तर्क यह है कि यदि और एक ही दिशा में जाते हैं / समान संकेत हैं, तो बिंदु सही दिशा में जा रहा है, और आप अधिकतम आंदोलन को अधिकतम करने की कोशिश कर रहे हैं सही दिशा।wमैंw i h h m ( x i )wमैंजमीटर( x)मैं)
लेकिन एक बार फिर से, इस सीधे मापने नहीं है जो कम करता। यह माप रहा है कि चाल कितनी अच्छी है, आपको समग्र दिशा के संबंध में जाना चाहिए, जैसा कि अवशिष्ट साथ मापा जाता है , जो कि एक सन्निकटन भी हैं। अवशिष्ट आपको बताते हैं कि आपको उनके संकेत से किस दिशा में बढ़ना चाहिए, और मोटे तौर पर उनकी परिमाण द्वारा कितना होना चाहिए, लेकिन वे आपको यह नहीं बताते कि आपको कहां रुकना चाहिए।जमीटरℓ ( y)मैं, एचमी - 1( x)मैं) + जमीटर( x)मैं) )जमीटरwमैं
बेहतर ग्रेडिएंट वंश
अगले तीन उदाहरण स्पष्टीकरण के लिए आवश्यक नहीं हैं और बस यहाँ हैं कि वेनिला ढाल वंश की तुलना में बेहतर करने के लिए कुछ तरीके प्रस्तुत करें, इस विचार का समर्थन करने के लिए कि XGBoost क्या करता है ढाल ढाल पर सुधार करने का सिर्फ एक और तरीका है। पारंपरिक ग्रेडिएंट डिसेंट सेटिंग में, जब को कम करने की कोशिश की जाती है, तो ग्रेडिएंट को फॉलो करने से बेहतर करना संभव है। कई एक्सटेंशन प्रस्तावित किए गए हैं (विकिपीडिया) । यहाँ दिखाने के लिए है कि यह अधिक गणना समय या समारोह के अधिक गुण दिए गए बेहतर करने के लिए संभव है, उनमें से कुछ कर रहे हैं ।च( x )चच
लाइन सर्च / बैकट्रैकिंग: ग्रेडिएंट डिसेंट में, एक बार ग्रेडिएंट की गणना की जाती है, अगला बिंदु होना चाहिए- ∇ एफ( x)( i ))
एक्स( i + 1 )= एक्स( i )- ∇ एफ( x)( i ))
लेकिन ढाल केवल जिस दिशा में एक, बढ़ना चाहिए नहीं वास्तव में "कितना" द्वारा, तो एक और प्रक्रिया का इस्तेमाल किया जा सकता है, सबसे अच्छा लगता है देता है ऐसा है किग > ०
एक्स( i + 1 )सी= एक्स( i )- सी ∇ एफ( x)( i ))
लागत समारोह को कम करता है। यह कुछ लिए मूल्यांकन करने के लिए किया जाता है , और चूंकि फ़ंक्शन को उत्तल होना चाहिए, यह लाइन सर्च (विकिपीडिया) या बैकट्रैकिंग लाइन सर्च (विकिपीडिया) के माध्यम से करना अपेक्षाकृत आसान है । यहाँ, मुख्य लागत मूल्यांकन । तो यह एक्सटेंशन सबसे अच्छा काम करता है अगर की गणना करना आसान है। ध्यान दें कि ग्रेडिंग बढ़ाने के लिए सामान्य एल्गोरिथ्म लाइन खोज का उपयोग करता है, जैसा कि मेरे उत्तर की शुरुआत में दिखाया गया है।च( x)( i + 1 )सी)सीचf ( x ) fच( x )च
फास्ट प्रॉक्सिमल ग्रेडिएंट मेथड: यदि फ़ंक्शन को कम से कम करने के लिए जोरदार उत्तल है, और इसकी ढाल चिकनी है ( लिप्सचित्ज़ (विकिपीडिया) ), तो उन गुणों का उपयोग करके कुछ चाल है जो अभिसरण को गति देते हैं।
स्टोचस्टिक ग्रेडिएंट डिसेंट एंड द मोमेंटम विधि: स्टोचस्टिक ग्रेडिएंट डिसेंट में, आप सभी बिंदुओं पर ग्रेडिएंट का मूल्यांकन नहीं करते हैं, बल्कि केवल उन बिंदुओं के सबसेट पर करते हैं। आप एक कदम उठाते हैं, फिर दूसरे बैच पर ग्रेडिएंट की गणना करते हैं, और जारी रखते हैं। स्टोकेस्टिक ग्रेडिएंट डिसेंट का उपयोग किया जा सकता है क्योंकि सभी बिंदुओं पर गणना बहुत महंगी है, या शायद उन सभी बिंदुओं को स्मृति में भी फिट नहीं किया जाता है। यह आपको अधिक कदम उठाने की अनुमति देता है, अधिक तेज़ी से, लेकिन कम सटीक रूप से।
ऐसा करते समय, ग्रेडिएंट की दिशा बदल सकती है, जिसके आधार पर अंक का नमूना लिया जाता है। इस आशय का प्रतिकार करने के लिए, गति विधियाँ प्रत्येक आयाम के लिए दिशा का एक औसत चलती रहती हैं, प्रत्येक चाल में विचरण को कम करती हैं।
XGBoost की हमारी चर्चा में ढाल वंश के लिए सबसे प्रासंगिक विस्तार न्यूटन की विधि (विकिपीडिया) है । केवल ढाल की गणना करने और उसका अनुसरण करने के बजाय, यह उस दिशा के बारे में अधिक जानकारी इकट्ठा करने के लिए दूसरे क्रम व्युत्पन्न का उपयोग करता है, जिसमें इसे जाना चाहिए। यदि हम ढाल मूल का उपयोग करते हैं, तो हमारे पास यह है कि प्रत्येक पुनरावृत्ति पर, हम अपने बिंदु को निम्नानुसार अपडेट करते हैं,एक्स( i )
एक्स( i + 1 )= एक्स( i )- ∇ एफ( x)( i ))
और चूंकि ग्रेडिएंट में उच्चतम वृद्धि की दिशा को इंगित करता है, उच्चतम कमी की दिशा में इसके नकारात्मक बिंदु, और हम आशा करते हैं कि । यह नहीं हो सकता है, क्योंकि हम ढाल की दिशा में बहुत दूर जा सकते हैं (इसलिए लाइन खोज एक्सटेंशन), लेकिन यह एक अच्छा सन्निकटन है। न्यूटन की विधि में, हम को अपडेट करते हैं,∇ च( x)( i ))चच( x)( i + 1 )) < च( x)( i ))एक्स( i )
एक्स( i + 1 )= एक्स( i )- ∇ एफ( x)( i ))हेस च( x)( i ))
कहाँ के हेस्सियन है में । यह अद्यतन दूसरे क्रम की जानकारी को ध्यान में रखता है, इसलिए दिशा अब उच्चतम कमी की दिशा नहीं है, लेकिन ओर अधिक सटीक इंगित करना चाहिए, जैसे कि (या वह बिंदु जहां न्यूनतम है, यदि कोई शून्य नहीं है)। यदि एक दूसरा क्रम बहुपद है, तो न्यूटन की विधि एक पंक्ति खोज के साथ मिलकर एक चरण में न्यूनतम खोजने में सक्षम होनी चाहिए।हेस च( x )चएक्सएक्स( i + 1 )च( x)( i + 1 )) = 0चच
न्यूटन की विधि स्टोचस्टिक ढाल वंश के साथ विरोधाभास है। स्टोचैस्टिक ग्रैडिएंट डिसेंट में, हम उस दिशा की गणना करने के लिए कम समय लेने के लिए कम बिंदु का उपयोग करते हैं, जिससे हमें उनमें से अधिक बनाने के लिए, उम्मीद है कि हम वहाँ जल्दी जाते हैं। न्यूटन की विधि में, हम उस दिशा की गणना करने में अधिक समय लेते हैं जिस दिशा में हम जाना चाहते हैं, इस आशा में कि हमें वहाँ पहुँचने के लिए कम कदम उठाने होंगे।
अब, न्यूटन की विधि के काम करने का कारण वही है जो XGBoost सन्निकटन कार्य करता है, और यह टेलर के विस्तार (विकिपीडिया) और टेलर के प्रमेय (विकिपीडिया) पर निर्भर करता है । एक बिंदु पर एक फ़ंक्शन का टेलर विस्तार (या टेलर श्रृंखला हैच( x + a )
च( x ) + ∂च( x )∂एक्सए + १2∂2च( x )∂एक्स2ए2+ ⋯ = Σn = 0∞1n !∂nच( x )∂एक्सnएn।
इस अभिव्यक्ति और सन्निकटन XGBoost का उपयोग करने के बीच समानता पर ध्यान दें। टेलर के प्रमेय में कहा गया है कि यदि आप ऑर्डर पर विस्तार रोकते हैं , तो त्रुटि, या और बीच का अंतर , अधिक से अधिक है , जहां अच्छा गुण है कि यह शून्य करने के लिए चला जाता है के रूप में के साथ एक समारोह है शून्य करने के लिए चला जाता है।कश्मीरच( x + a )Σकश्मीरn = 01n !∂nच( x )∂एक्सnएnजकश्मीर( x ) एकश्मीरजकश्मीरए
यदि आप कुछ विज़ुअलाइज़ेशन चाहते हैं कि यह कितनी अच्छी तरह से कुछ कार्यों को अनुमानित करता है, विकिपीडिया पृष्ठों पर एक नज़र डालें, तो उनके पास गैर-बहुपद समारोह जैसे कि , के सन्निकटन के लिए कुछ ग्राफ़ हैं ।ईएक्सलॉग( x )
ध्यान देने वाली बात यह है कि सन्निकटन बहुत अच्छी तरह से काम करता है यदि आप के पड़ोस में के मूल्य की गणना करना चाहते हैं , अर्थात बहुत छोटे परिवर्तनों के । यही हम बूस्टिंग में करना चाहते हैं। बेशक हम उस पेड़ को ढूंढना चाहेंगे जो सबसे बड़ा परिवर्तन करता है। यदि हमारे द्वारा बनाए गए कमजोर शिक्षार्थी बहुत अच्छे हैं और एक बहुत बड़ा परिवर्तन करना चाहते हैं, तो हम मनमाने ढंग से इसे केवल या रोक सकते हैंचएक्सए0.10.01इसके प्रभाव के। यह स्टेप-साइज़ या ग्रेडिएंट डिसेंट का लर्निंग रेट है। यह स्वीकार्य है, क्योंकि अगर हमारे कमजोर शिक्षार्थियों को बहुत अच्छे समाधान मिल रहे हैं, तो इसका मतलब यह है कि या तो समस्या आसान है, जिस स्थिति में हम किसी भी तरह से एक अच्छा समाधान समाप्त करने जा रहे हैं, या हम बहुत अधिक हो रहे हैं, इसलिए थोड़ा या बहुत इस बुरी दिशा में बहुत कुछ अंतर्निहित समस्या को नहीं बदलता है।
तो XGBoost क्या कर रहा है, और यह क्यों काम करता है?
XGBoost एक ग्रेडिंग बूस्टिंग एल्गोरिथ्म है जो कमजोर शिक्षार्थियों के रूप में प्रतिगमन पेड़ों का निर्माण करता है। पारंपरिक ग्रेडिएंट बूस्टिंग एल्गोरिथ्म एक रेखा खोज के साथ एक ढाल वंश के समान है, जहां जाने की दिशा में उपलब्ध कमजोर शिक्षार्थियों से खींची गई है। ग्रैडिएंट बूस्टिंग का भोला-भाला कार्यान्वयन कमजोर शिक्षार्थी के लागत कार्य का उपयोग इसे अवशिष्ट पर फिट करने के लिए करेगा। यह नए मॉडल की लागत को कम करने के लिए एक प्रॉक्सी है, जिसे गणना करना महंगा है। XGBoost क्या कर रहा है पेड़ों को फिट करने के लिए एक कस्टम कॉस्ट फ़ंक्शन का निर्माण कर रहा है, ऑर्डर की टेलर श्रृंखला को सही लागत फ़ंक्शन के लिए दो सन्निकटन के रूप में उपयोग कर रहा है, जैसे कि यह अधिक निश्चित हो सकता है कि यह जिस पेड़ को चुनता है वह एक अच्छा है। इस संबंध में, और सरलीकरण के रूप में, XGBoost को ग्रैडिएंट बूस्टिंग करना है कि न्यूटन का तरीका ग्रैडिएंट डिसेंट में क्या है।
उन्होंने इसे इस तरह क्यों बनाया
आपका प्रश्न इस सन्निकटन का उपयोग करने के कारण लागत / प्रदर्शन ट्रेडऑफ़ के लिए आता है। इस लागत फ़ंक्शन का उपयोग प्रतिगमन पेड़ों के लिए संभावित विभाजन की तुलना करने के लिए किया जाता है, इसलिए यदि हमारे बिंदुओं में 50 विशेषताएं हैं, तो 10 अलग-अलग मूल्यों के औसत के साथ, प्रत्येक नोड में 500 संभावित विभाजन होते हैं, इसलिए फ़ंक्शन का 500 मूल्यांकन। यदि आप एक निरंतर सुविधा को छोड़ते हैं, तो विभाजन की संख्या में विस्फोट होता है, और विभाजन के मूल्यांकन को अधिक से अधिक कहा जाता है (निरंतर सुविधाओं से निपटने के लिए XGBoost के पास एक और चाल है, लेकिन यह गुंजाइश से बाहर है)। जैसा कि एल्गोरिथ्म अपना अधिकांश समय विभाजन का मूल्यांकन करने में बिताएगा, एल्गोरिथ्म को गति देने का तरीका वृक्ष मूल्यांकन को गति देना है।
यदि आपने पूरे लागत फ़ंक्शन, साथ पेड़ का मूल्यांकन किया , तो यह हर नए विभाजन के लिए एक नई गणना है। लागत फ़ंक्शन की गणना में अनुकूलन करने के लिए, आपको लागत फ़ंक्शन के बारे में जानकारी होनी चाहिए, जो कि ग्रेडिएंट बूस्टिंग का पूरा बिंदु है: इसे प्रत्येक लागत फ़ंक्शन के लिए काम करना चाहिए।ℓ
दूसरा आदेश सन्निकटन कम्प्यूटेशनल रूप से अच्छा है, क्योंकि अधिकांश शर्तें किसी दिए गए पुनरावृत्ति में समान हैं। किसी दिए गए पुनरावृत्ति के लिए, अधिकांश अभिव्यक्ति को एक बार गणना की जा सकती है, और सभी विभाजन के लिए स्थिर के रूप में पुन: उपयोग किया जा सकता है:
एल( टी )≈ Σमैं = १nℓ ( y)मैं, वाई^( टी - १ )मैं)लगातार+ जीमैंलगातारचटी( x)मैं) + 12जमैंलगातारच2टी( x)मैं) + Ω ( चटी) ,
तो केवल एक चीज जिसे आपको गणना है, है और , और फिर जो बचा है वह ज्यादातर परिवर्धन, और कुछ गुणा है। इसके अलावा, अगर आप XGBoost पेपर (arxiv) पर एक नज़र डालते हैं, तो आप देखेंगे कि वे इस तथ्य का उपयोग करते हैं कि वे अभिव्यक्ति को सरल बनाने के लिए एक पेड़ का निर्माण कर रहे हैं, जो कि अनुक्रमणिका के समन के एक समूह को अभिव्यक्त करता है, जो बहुत जल्दी है।चटी( x)मैं)Ω ( चटी)
सारांश
आप सटीक मूल्यांकन के साथ सटीक समाधान से एक प्रतिगमन के रूप में XGBoost (सन्निकटन के साथ) देख सकते हैं, "सही XGBoost" का एक अनुमान। लेकिन चूंकि सटीक मूल्यांकन इतना महंगा है, इसलिए इसे देखने का एक और तरीका यह है कि विशाल डेटासेट पर, हम सभी वास्तविक रूप से कर सकते हैं, और यह अनुमान पहले-क्रम सन्निकटन की तुलना में अधिक सटीक है, जो "naïve" ग्रेडिंग एल्गोरिथ्म करेगा। ।
उपयोग में सन्निकटन न्यूटन की विधि के समान है , और टेलर सीरीज़ (विकिपीडिया) और टेलर प्रमेय (विकिपीडिया) द्वारा उचित है ।
उच्च क्रम की जानकारी वास्तव में पूरी तरह से उपयोग नहीं की जाती है, लेकिन यह आवश्यक नहीं है, क्योंकि हम अपने शुरुआती बिंदु के पड़ोस में एक अच्छा सन्निकटन चाहते हैं ।
विज़ुअलाइज़ेशन के लिए, टेलर सीरीज़ / टेलर की प्रमेय के विकिपीडिया पृष्ठ , या टेलर श्रृंखला सन्निकटन पर खान अकादमी , या गैर-बहुपद के बहुपद सन्निकटन पर MathDemo पृष्ठ की जाँच करें।