2016-01-08 10 views
10

में XGBoost XGBClassifier डिफ़ॉल्ट कुछ बाइनरी डेटा वर्गीकृत करने के लिए मैं XGBoosts क्लासिफायर का उपयोग करने का प्रयास कर रहा हूं। जब मैं सबसे सरल चीज करता हूं और केवल डिफ़ॉल्ट का उपयोग करता हूं (निम्नानुसार)पाइथन

clf = xgb.XGBClassifier() 
metLearn=CalibratedClassifierCV(clf, method='isotonic', cv=2) 
metLearn.fit(train, trainTarget) 
testPredictions = metLearn.predict(test) 

मुझे उचित वर्गीकरण के परिणाम मिलते हैं।

मेरा अगला कदम मेरे पैरामीटर को ट्यून करने का प्रयास करना था। पर ... https://github.com/dmlc/xgboost/blob/master/doc/parameter.md मैं डिफ़ॉल्ट और वहाँ से काम से शुरू करना चाहती मापदंडों गाइड से अनुमान लगा ...

# setup parameters for xgboost 
param = {} 
param['booster'] = 'gbtree' 
param['objective'] = 'binary:logistic' 
param["eval_metric"] = "error" 
param['eta'] = 0.3 
param['gamma'] = 0 
param['max_depth'] = 6 
param['min_child_weight']=1 
param['max_delta_step'] = 0 
param['subsample']= 1 
param['colsample_bytree']=1 
param['silent'] = 1 
param['seed'] = 0 
param['base_score'] = 0.5 

clf = xgb.XGBClassifier(params) 
metLearn=CalibratedClassifierCV(clf, method='isotonic', cv=2) 
metLearn.fit(train, trainTarget) 
testPredictions = metLearn.predict(test) 

परिणाम सब कुछ शर्तों में से एक और अन्य नहीं होने की भविष्यवाणी की जा रही है।

दिलचस्प अगर मैं सेट

params={} 

जो मैं मुझे कोई पैरामीटर खिला नहीं के रूप में ही चूक देने के लिए उम्मीद है, मैं एक ही बात हो

तो किसी को पता है क्या XGBclassifier के लिए चूक है मिल ? ताकि मैं ट्यूनिंग शुरू कर सकूं?

+0

यह प्रश्न समान व्यवहार से मुकाबला करता है लेकिन कोई जवाब नहीं दिया गया है http://stackoverflow.com/questions/33470477/xgboost-predict-method-returns-the-same-predicted-value-for-all- पंक्तियां –

उत्तर

15

यह नहीं है कि आप xgboost में पैरामीटर कैसे सेट करते हैं। आप या तो अपने सर्वोपरि फ़ंक्शन को अपने प्रशिक्षण फ़ंक्शन में पास करना चाहते हैं, जैसे xgboost's train या sklearn's GridSearchCV, या आप अपने XGBClassifier की set_params विधि का उपयोग करना चाहेंगे। ध्यान देने योग्य एक और बात यह है कि यदि आप xgboost के wrapper को sklearn (यानी: XGBClassifier() या XGBRegressor() कक्षाओं) का उपयोग कर रहे हैं तो उपयोग किए गए पैरामीटर नाम स्केलर के स्वयं के जीबीएम कक्षा (उदा: ईटा -> learning_rate) में उपयोग किए जाते हैं। मैं नहीं देख रहा हूं कि sklearn wrapper के लिए सटीक दस्तावेज कहाँ छिपा हुआ है, लेकिन उन वर्गों के लिए कोड यहां है: https://github.com/dmlc/xgboost/blob/master/python-package/xgboost/sklearn.py

आपके संदर्भ के लिए यह है कि आप मॉडल ऑब्जेक्ट पैरामीटर को सीधे कैसे सेट करेंगे। कुछ साधन में ज्यादातर लोगों ग्रिड खोज के बाद से मुझे लगता है आप मॉडल बनाने पर मापदंडों सेट कर सकते हैं, यह सिर्फ सुपर ऐसा करने के लिए सामान्य नहीं है:

>>> grid = {'max_depth':10} 
>>> 
>>> clf = XGBClassifier() 
>>> clf.max_depth 
3 
>>> clf.set_params(**grid) 
XGBClassifier(base_score=0.5, colsample_bylevel=1, colsample_bytree=1, 
     gamma=0, learning_rate=0.1, max_delta_step=0, max_depth=10, 
     min_child_weight=1, missing=None, n_estimators=100, nthread=-1, 
     objective='binary:logistic', reg_alpha=0, reg_lambda=1, 
     scale_pos_weight=1, seed=0, silent=True, subsample=1) 
>>> clf.max_depth 
10 

संपादित करें। हालांकि यदि आप ऐसा करते हैं तो आपको उन्हें पूर्ण पैरा के रूप में सूचीबद्ध करने या ** kwargs का उपयोग करने की आवश्यकता होगी। उदाहरण के लिए:

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

बिना ** kwargs कि पैरामीटर सेट हो जाएगा इनपुट के रूप में एक शब्दकोश का उपयोग करना सचमुच अपनी शब्दकोश होने के लिए:

>>> XGBClassifier(grid) 
XGBClassifier(base_score=0.5, colsample_bylevel=1, colsample_bytree=1, 
     gamma=0, learning_rate=0.1, max_delta_step=0, 
     max_depth={'max_depth': 10}, min_child_weight=1, missing=None, 
     n_estimators=100, nthread=-1, objective='binary:logistic', 
     reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=0, silent=True, 
     subsample=1) 
+0

जितनी चाहें उतनी ही सच थी, आप xgboost के ट्रेन फ़ंक्शन में पैरामीटर ग्रिड पास नहीं कर सकते - पैरामीटर शब्दकोश मान सूचियां नहीं हो सकते –

0

बहुत पहले, मैं तुम्हें ढीला के लिए एक 'एस' लगता है कि अपने चर। आप शीर्ष पर param wrte लेकिन मॉडल के प्रशिक्षण के दौरान params का उपयोग करें। और फिर ...