स्केगन ग्रैडिएंटबॉस्टिंग क्लैसिफायर की तुलना में एक्सगबोस्ट इतना तेज क्यों है?


29

मैं 100 न्यूमेरिक फीचर्स के साथ 50k उदाहरणों पर एक ढाल बढ़ाने वाले मॉडल को प्रशिक्षित करने की कोशिश कर रहा हूं। XGBClassifierमेरी मशीन पर 43 सेकंड के भीतर 500 पेड़ लगाता है, जबकि GradientBoostingClassifier1 मिनट और 2 सेकंड में केवल 10 पेड़ (!) को संभालता है :( मैंने 500 पेड़ों को उगाने की कोशिश नहीं की क्योंकि इसमें घंटों लगेंगे। मैं उसी learning_rateऔर max_depthसेटिंग्स का उपयोग कर रहा हूं। , निचे देखो।

क्या XGBoost इतनी तेजी से बनाता है? क्या यह क्रमिक बूस्टिंग के लिए कुछ उपन्यास कार्यान्वयन का उपयोग करता है जो कि स्केलेर लोगों को नहीं पता है? या यह "कोनों को काटने" और उथले पेड़ों को उगाने वाला है?

ps मैं इस चर्चा से वाकिफ हूँ: https://www.kaggle.com/c/higgs-boson/forums/t/10335/xgboost-post-competition-survey लेकिन वहां से जवाब नहीं मिल सका ...

XGBClassifier(base_score=0.5, colsample_bylevel=1, colsample_bytree=1,
gamma=0, learning_rate=0.05, max_delta_step=0, max_depth=10,
min_child_weight=1, missing=None, n_estimators=500, nthread=-1,
objective='binary:logistic', reg_alpha=0, reg_lambda=1,
scale_pos_weight=1, seed=0, silent=True, subsample=1)

GradientBoostingClassifier(init=None, learning_rate=0.05, loss='deviance',
max_depth=10, max_features=None, max_leaf_nodes=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, n_estimators=10,
presort='auto', random_state=None, subsample=1.0, verbose=0,
warm_start=False)

2
मुझे लगता है कि मुझे जल्द ही इसे फिर से लिखना होगा "क्यों लाइट जीबीएम एक्सजीओओस्ट की तुलना में बहुत तेज है?" :)
ihadanny

जवाबों:


25

चूंकि आप "संख्यात्मक" सुविधाओं का उल्लेख करते हैं, मुझे लगता है कि आपकी विशेषताएं स्पष्ट नहीं हैं और उनमें उच्च ऊँचाई है (वे बहुत भिन्न मान ले सकते हैं, और इस प्रकार बहुत सारे संभावित विभाजन बिंदु हैं)। ऐसे मामले में, पेड़ उगाना मुश्किल है क्योंकि मूल्यांकन करने के लिए [बहुत सारी सुविधाएँ बहुत सारे विभाजन बिंदु हैं]।×

मेरा अनुमान है कि सबसे बड़ा प्रभाव इस तथ्य से आता है कि XGBoost विभाजन बिंदुओं पर एक सन्निकटन का उपयोग करता है। यदि आपके पास 10000 संभावित विभाजन के साथ एक निरंतर सुविधा है, तो XGBoost डिफ़ॉल्ट रूप से केवल "सबसे अच्छा" 300 विभाजन मानता है (यह एक सरलीकरण है)। यह व्यवहार sketch_epsपैरामीटर द्वारा नियंत्रित किया जाता है, और आप इसके बारे में डॉक्टर में अधिक पढ़ सकते हैं । आप इसे कम करने की कोशिश कर सकते हैं और इसके अंतर की जांच कर सकते हैं। चूँकि scikit-learn प्रलेखन में इसका कोई उल्लेख नहीं है , इसलिए मुझे लगता है कि यह उपलब्ध नहीं है। आप जान सकते हैं कि उनके पेपर (arxiv) में XGBoost विधि क्या है ।

XGBoost भी ऐसे विभाजन बिंदुओं के मूल्यांकन पर एक सन्निकटन का उपयोग करता है। मुझे नहीं पता कि कौन सी कसौटी शिकंजी सीखती है, विभाजन का मूल्यांकन करती है, लेकिन यह बाकी समय के अंतर को समझा सकती है।


टिप्पणियों का पालन करना

विभाजन बिंदुओं के मूल्यांकन के संबंध में

हालाँकि, "XGBoost का भी इस तरह के विभाजन बिंदुओं के मूल्यांकन पर एक अनुमान का उपयोग करता है" से आपका क्या मतलब है? जहां तक ​​मैं समझता हूं, मूल्यांकन के लिए वे इष्टतम उद्देश्य फ़ंक्शन में सटीक कमी का उपयोग कर रहे हैं, क्योंकि यह कागज में eq (7) में दिखाई देता है।

विभाजन बिंदु का मूल्यांकन करने के लिए, आपको गणना करनी होगी जहां लागत फ़ंक्शन है, लक्ष्य, अब तक बनाया गया मॉडल, और वर्तमान जोड़। ध्यान दें कि यह वह नहीं है जो XGBoost कर रहा है; वे टेलर एक्सपेंशन द्वारा लागत फ़ंक्शन को सरल बना रहे हैं , जो गणना करने के लिए एक बहुत ही सरल फ़ंक्शन की ओर जाता है। उन्हें संबंध में ग्रेडिएंट और के Hessian की गणना करनी होती है , और वे स्टेज पर सभी संभावित विभाजन के लिए उन संख्याओं का पुन: उपयोग कर सकते हैं , जिससे ओवररल गणना तेजी से होती है। आप देख सकते हैंएल(y,एचमैं-1+मैं)एलyएचमैं-1मैंएलएलएचमैं-1मैंअधिक विस्तार के लिए टेलर एक्सपेंशन (क्रॉसविलेजिएटेड क्यू / ए) के साथ हानि फ़ंक्शन स्वीकृति , या उनके पेपर में व्युत्पत्ति।

मुद्दा यह है कि उन्होंने कुशलता से अनुमानित करने का एक तरीका खोज लिया है । यदि आप पूरी तरह से मूल्यांकन करने के लिए थे , बिना इनसाइडर ज्ञान के अनुकूलन या परिहार या निरर्थक गणना की अनुमति देता है, तो प्रति विभाजन में अधिक समय लगेगा। यह इस संबंध में, यह एक अनुमान है। हालाँकि, अन्य ग्रेडिएंट बूस्टिंग इम्प्लीमेंटेशन भी स्प्लिट्स का मूल्यांकन करने के लिए एक प्रॉक्सी कॉस्ट फ़ंक्शंस का उपयोग करते हैं, और मुझे नहीं पता कि अन्य की तुलना में XGBoost सन्निकटन जल्दी है या नहीं।एल(y,एचमैं-1+मैं)एल


धन्यवाद @Winks, मैं कागज पढ़ता हूं और विभाजित उम्मीदवारों को चुनने के लिए अनुमानित एल्गोरिथ्म से आपका क्या मतलब है। हालाँकि, "XGBoost का भी इस तरह के विभाजन बिंदुओं के मूल्यांकन पर एक सन्निकटन का उपयोग करता है" से आपका क्या मतलब है? जहां तक ​​मैं समझता हूं, मूल्यांकन के लिए वे इष्टतम उद्देश्य फ़ंक्शन में सटीक कमी का उपयोग कर रहे हैं, क्योंकि यह कागज में eq (7) में दिखाई देता है।
इधारानी

मैंने आपकी टिप्पणी को स्वीकार करने के लिए अपना उत्तर संपादित किया। चेक इस क्यू / ए विभाजन अंक के मूल्यांकन के बारे में अधिक जानकारी के लिए।
विंक

बहुत बहुत धन्यवाद, @Winks! बहुत अच्छा होगा यदि आप यहाँ मेरे अधिक विस्तृत प्रश्न का उत्तर दे सकें: datascience.stackexchange.com/q/10997/16050
ihadanny

यह एक बेहतरीन जवाब है। हैट्रिक !
इलियास
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.