बूस्टिंग और पेड़ लगाना (XGBoost, LightGBM)


17

कई ब्लॉग पोस्ट, यूट्यूब वीडियो, आदि के विचारों के बारे में कर रहे हैं जीत या बढ़ाने के पेड़। मेरी सामान्य समझ यह है कि प्रत्येक के लिए छद्म कोड है:

जीतना:

  1. नमूने के x% और सुविधाओं के y% के N यादृच्छिक नमूने लें
  2. अपने मॉडल (जैसे, निर्णय पेड़) को एन के प्रत्येक पर फिट करें
  3. प्रत्येक एन के साथ भविष्यवाणी करें
  4. अंतिम भविष्यवाणी प्राप्त करने के लिए भविष्यवाणियों को औसत करें

बढ़ाने:

  1. अपने मॉडल (जैसे, निर्णय वृक्ष) को अपने डेटा में फिट करें
  2. अवशिष्ट प्राप्त करें
  3. अपने मॉडल को अवशेषों में फिट करें
  4. एन बूस्टिंग राउंड के लिए 2 पर जाएं
  5. अंतिम भविष्यवाणी अनुक्रमिक भविष्यवक्ताओं की एक भारित राशि है।

मैं अपनी समझ से ऊपर कोई स्पष्टीकरण लूंगा, लेकिन मेरा इच्छित प्रश्न इस प्रकार है:

XGBoost और LightGBM दोनों के पास ऐसे परमिशन हैं जो बैगिंग के लिए अनुमति देते हैं। एप्लिकेशन बैजिंग या बूस्टिंग नहीं है (जो हर ब्लॉग पोस्ट के बारे में बात करता है), लेकिन बैजिंग और बूस्टिंग। संयुक्त बैगिंग और बूस्टिंग कहां और कब होता है इसके लिए छद्म कोड क्या है?

मुझे उम्मीद है कि यह "बैज्ड बूस्टेड ट्रीज़" होगा, लेकिन ऐसा लगता है कि यह "बूस्टेड बैग्स ट्रीज़" है। अंतर पर्याप्त लगता है।

उगे हुए पेड़

  1. नमूने के x% और सुविधाओं के y% के N यादृच्छिक नमूने लें
  2. फ़िट प्रत्येक एन नमूनों पर बूस्टेड पेड़
  3. प्रत्येक एन के साथ भविष्यवाणी करें
  4. अंतिम भविष्यवाणी प्राप्त करने के लिए भविष्यवाणियों को औसत करें

यह ऐसा करने का सबसे अच्छा तरीका लगता है। आखिरकार, बूस्टिंग में जोखिम अधिक है और बैगिंग का प्राथमिक लाभ ओवरफिटिंग को कम करना है; बढ़े हुए मॉडल का एक गुच्छा प्राप्त करना एक महान विचार जैसा लगता है।

हालाँकि, देखने से, उदाहरण के लिए scikit-learn gradient_boosting.py (जो कि नमूना बैगिंग, लेकिन रैंडम फ़ीचर चयन नहीं करता है), और लाइटबॉगम और XGBoost के बारे में पोस्टों पर कुछ छोटे नगों को एक साथ जोड़कर, यह XGBoost और LightGBM के रूप में निम्नानुसार काम करता है:

बढ़े हुए पेड़ लगे हुए:

  1. अपने डेटा के लिए एक निर्णय ट्री फिट करें
  2. मैं एन को बढ़ाने के दौर में:
    • अवशिष्ट प्राप्त करें
    • अगर मैं mod bag_frequency == 0 (यानी, बैग हर 5 राउंड):
      • नमूने के x% और सुविधाओं के y% का एकल यादृच्छिक नमूना लें; आगे जाने वाले इस यादृच्छिक नमूने का उपयोग करें
    • अवशेषों के लिए फिट पेड़
  3. अंतिम भविष्यवाणी अनुक्रमिक भविष्यवक्ताओं की एक भारित राशि है।

कृपया मेरी समझ को यहाँ सुधारें और विवरण भरें। बूस्टेड बैज ट्री (बैग_फ्रीक्वेंसी के हिसाब से सिर्फ 1 रैंडम ट्री के साथ) बोस्टेड बूस्टेड पेड़ जितना शक्तिशाली नहीं लगता।


2
एक दिलचस्प और बहुत अच्छी तरह से तैयार प्रश्न के लिए +1। और साइट पर आपका स्वागत है।
mkt - मोनिका

आपको अपने बूस्टिंग के लिए "त्रुटि की गणना करें" की आवश्यकता है। हो गया गलत जो अलग हो जाता है। वजन adaboost के लिए महत्वपूर्ण हैं। यह एक कच्चा अवशिष्ट नहीं है। ... हम स्टोचस्टिक ग्रेडिएंट के बारे में बात नहीं कर रहे हैं, क्योंकि यह चीजों को गति देता है।
EngrStudent -

यहाँ बूस्ट-बैगेड है। प्रत्येक श्रृंखला-चरण के लिए एक नए पेड़ के बजाय आपको औसत आउटपुट के साथ एक नया जंगल मिलता है। यूजीन तुव और कारी टोर्ककोला। jmlr.org/papers/volume10/tuv09a/tuv09a.pdf
EngrStudent - Monica

बढ़ाया बूस्ट श्रृंखला ensembles के एक जंगल बनाने के लिए जा रहा है, और औसत उत्पादन ले। यह ओवर-फिटिंग को संलग्न कर सकता है जो एक श्रृंखला (बढ़ा हुआ) पहनावा बना सकता है, और अधिक मजबूत आउटपुट दे सकता है, लेकिन लाभ बहुत बड़ा नहीं होगा।
EngrStudent -

जवाबों:


13

बैगिंग: x% नमूने के N यादृच्छिक नमूने लें और विशेषताओं के y%

उदाहरण बार-बार उप नमूना में हैं जीतना नहीं, बल्कि खासियत है। ( रैंडमफोर्स , XGBoost और CatBoost दोनों करते हैं):

Given dataset D of size N.
For m in n_models:
    Create new dataset D_i of size N by sampling with replacement from D.
    Train model on D_i (and then predict)
Combine predictions with equal weight 

अतिरेक से छुटकारा पाने के लिए अपने बूस्टिंग छद्म कोड में एक प्रारंभिक चरण शामिल करें :

Init data with equal weights (1/N).
For m in n_model:
    Train model on weighted data (and then predict)
    Update weights according to misclassification rate.
    Renormalize weights
Combine confidence weighted predictions

बढ़े हुए बूस्टेड पेड़ (जैसा कि आप इसे कहते हैं) निश्चित रूप से एक उचित दृष्टिकोण है, लेकिन एक्सजीबोस्ट या कैटलॉग से अलग है :

Given dataset D of size N.
For m in n_models:
    Create new dataset D_i of size N by sampling with replacement from D.
    (Insert Boosting pseudo code here (on D_i))
Combine predictions with equal weight 

XGBoost और CatBoost दोनों बूस्टिंग पर आधारित हैं और संपूर्ण प्रशिक्षण डेटा का उपयोग करते हैं। वे हर बूस्टिंग में एक बार सबसम्प्लिंग करके बैगिंग को लागू करते हैं:

Init data with equal weights (1/N).
For m in n_model:
    Train model on weighted bootstrap sample (and then predict)
    Update weights according to misclassification rate.
    Renormalize weights
Combine confidence weighted predictions

यदि आप "फिट मॉडल को रेजिड्यूल्स के लिए फिट" रहना चाहते हैं, तो यह " बूटस्ट्रैप सैंपल में डेटा के अवशेषों के लिए फिट मॉडल" के बराबर होगा ।


आगे के रिमार्क्स :

जैसा कि आप सुझाव देते हैं, "कोई भी सर्वोत्तम तरीका नहीं है" (कोई मुफ्त लंच प्रमेय नहीं)। कुछ डेटा सेटों पर XGBoost को "खराब बूस्टेड ट्रीज़" कहा जा सकता है।

नमूने के x% का एकल यादृच्छिक नमूना लें

यह लाइन भ्रामक है। आपको यह कहां से मिला?

अगर मैं mod bag_frequency == 0 (यानी, बैग हर 5 राउंड):

यह आपके छद्म कोड में उल्लिखित नहीं होना चाहिए। विशेष रूप से तब जब अन्य महत्वपूर्ण पैरामीटर बचे हैं (जैसे बूस्टिंग में सीखने की दर )।


(+1) अच्छा जवाब! स्पष्ट करने के लिए: क्या ओपी गलत है " XGBoost और LightGBM दोनों के पास परमेस हैं जो बैगिंग की अनुमति देते हैं "?
mkt - मोनिका

दोनों जीतना के लिए अनुमति देते हैं: bagging_fraction में LightGBM और subsample में XGBoost । निश्चित नहीं, मैंने पूरे समय कैटबॉस्ट का उल्लेख क्यों किया। लेकिन वे सभी सवाल के संबंध में उसी तरह काम करते हैं।
लक्षसन नाथन

मेरी गलती, मैंने आपके उत्तर में उस लाइन को याद किया जिसमें उल्लेख है कि। क्या आप समझा सकते हैं " हर बढ़ाव के बाद एक बार सबसम्प्लिंग करना "? क्या आपका मतलब यह है कि प्रत्येक बढ़ाने वाले पुनरावृत्ति में, कई उप-प्रजातियां ली जाती हैं, पेड़ प्रत्येक उप-थल में फिट होते हैं, और फिर गर्भपात दर की गणना बैगेड पेड़ों के आधार पर की जाती है, और अंत में अद्यतन वजन? यदि हां, तो क्या आप इसे अपने छद्मकोश में स्पष्ट कर सकते हैं?
mkt -

कई उप-नमूने नहीं खींचे जाते हैं, बस एक: सभी भारित उदाहरणों के लिए मॉडल को फिट करने के बजाय, मॉडल को बूटस्ट्रैप नमूने पर प्रशिक्षित किया जाता है।
लक्ष्मण नाथन

"नमूने के x% का एक एकल यादृच्छिक नमूना लें" के बारे में; बेहतर होगा "पंक्तियों के x% का एक भी नमूना लें"। मुझे वह यहाँ से मिला ।
जोनाथन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.