2015-10-05 12 views
12

मैंxgboost में indiviual निर्णय पेड़ के भार का उपयोग कैसे करें?

param = {'objective':'rank:pairwise', 'booster':'gbtree'} 

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

+0

इस प्रश्न पर एक उत्तर प्यार करेगा ... अच्छा सवाल! –

उत्तर

16

प्रत्येक पेड़ को वही वज़न दिया जाता है eta और समग्र भविष्यवाणी प्रत्येक पेड़ की भविष्यवाणियों का योग है, जैसा कि आप कहते हैं।

आप शायद उम्मीद करेंगे कि पहले के पेड़ों को बाद के पेड़ों की तुलना में अधिक वजन दिया जाएगा, लेकिन यह आवश्यक नहीं है, क्योंकि हर पेड़ के बाद प्रतिक्रिया अद्यतन की जाती है। यहाँ एक खिलौना उदाहरण है:

मान लीजिए हम प्रतिक्रियाओं 10, 20, 30, 40, 50 के पहले पेड़ बनाया गया है के साथ 5 टिप्पणियों, है और 12, 18, 27, 39, 54.

की भविष्यवाणियों देता है अब, यदि eta = 1, अगले पेड़ को पारित प्रतिक्रिया चर -2, 2, 3, 1, -4 (यानी पूर्वानुमान और वास्तविक प्रतिक्रिया के बीच अंतर) होगा। अगला पेड़ तब 'शोर' सीखने की कोशिश करेगा जिसे पहले पेड़ से पकड़ा नहीं गया था। यदि nrounds = 2, तो दो पेड़ों की भविष्यवाणियों का योग मॉडल की अंतिम भविष्यवाणी देगा।

यदि eta = 0.1, तो सभी पेड़ों की भविष्यवाणी eta तक घटा दी जाएगी, इसलिए पहला पेड़ इसके बजाय 1.2, 1.8, 2.7, 3.9, 5.4 की भविष्यवाणी करेगा। अगले पेड़ में पारित प्रतिक्रिया चर के बाद मूल्य 8.8, 18.2, 27.3, 36.1, 44.6 (स्केल किए गए भविष्यवाणी और सच्ची प्रतिक्रिया के बीच का अंतर) होगा, दूसरा दौर फिर इन प्रतिक्रिया मानों का उपयोग एक और पेड़ बनाने के लिए करता है - और फिर भविष्यवाणियां eta द्वारा स्केल किया गया है। तो पेड़ 2 भविष्यवाणियों का कहना है, 7, 18, 25, 40, 40, जो एक बार स्केल हो गया, 0.7, 1.8, 2.5, 4.0, 4.0 बन गया। पहले की तरह, तीसरा पेड़ इन मूल्यों और पिछले पेड़ के प्रतिक्रिया चर के बीच अंतर पारित किया जाएगा (इसलिए 8.1, 16.4, 24.8, 32.1। 40.6)। फिर, सभी पेड़ों की भविष्यवाणियों की राशि अंतिम भविष्यवाणी देगी।

स्पष्ट रूप से जब eta = 0.1, और base_score 0 है, तो आपको कम से कम 10 राउंड की आवश्यकता होगी ताकि भविष्यवाणी कहीं भी हो सके। आम तौर पर, आपको कम से कम 1/eta राउंड की आवश्यकता होती है और आमतौर पर कई अन्य।

छोटे eta का उपयोग करने के लिए तर्क यह है कि मॉडल को पेड़ 1 बनाने के बजाय भविष्यवाणी की दिशा में छोटे कदम उठाने से लाभ होता है। यह क्रिस्टलीकरण की तरह थोड़ा है - धीरे-धीरे ठंडा करें और आप बड़े, बेहतर क्रिस्टल प्राप्त करते हैं। नकारात्मकता आपको nrounds बढ़ाने की आवश्यकता है, इस प्रकार एल्गोरिदम के रनटाइम को बढ़ा रहा है।

+0

अच्छा जवाब, यह सवाल वास्तव में एक सामान्य सामान्य प्रश्न है। क्योंकि आप केवल अवशेषों को फिट कर रहे हैं, यह सिर्फ 'ईटा' द्वारा स्केल किए गए प्रत्येक पेड़ की भविष्यवाणी को जोड़ना है। इसे स्वीकार किया जाना चाहिए। –

+0

@dataShrimp, हाय, शायद आप [इस सवाल] का जवाब दे सकते हैं (http://stackoverflow.com/questions/35983565/how-is-the-parameter-weight-dmatrix-used-in-the-gradient-boosting-procedure) ?. – Ojtwist

+0

यह एक स्पष्ट स्पष्टीकरण है जो मैंने पार किया है। धन्यवाद! – santon

संबंधित मुद्दे