2016-01-08 16 views
10

Bazı ikili verileri sınıflandırmak için XGBoosts sınıflandırıcıyı kullanmaya çalışıyorum. BenXTBoost XGBClassifier Varsayılanlar Python'da

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

en basit olanı yapmak ve (şöyle) sadece varsayılan kullandığınızda ben oldukça iyi sınıflandırma sonuçları almak.

Benim bir sonraki adımı parametrelerimi ayarlamayı denemekti. ... https://github.com/dmlc/xgboost/blob/master/doc/parameter.md oradan varsayılan ve işten başlamak istedim ... En parametreler kılavuzundan

# 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) 

sonuç Tahmin koşullardan biri ve diğer olmamak her şey tahmin ediliyor. Ben herhangi bir parametre besleme değil bana aynı varsayılan vermesi bekleniyor

params={} 

, ben

Yani herkes XGBclassifier için varsayılan nedir biliyor mu oluyor aynı şey olsun set merakla eğer

? böylece ayar yapmaya başlayabilir miyim?

+0

Bu soru benzer davranışlarla karşılaşır ancak yanıt verilmez http://stackoverflow.com/questions/33470477/xgboost-predict-method-returns-the-same-predicted-value-for-all- satırlar –

cevap

15

Bu, xgboost'ta parametreleri nasıl ayarladığınız değil. Paragözü ızgarasını xgboost'un train ya da sklearn'in GridSearchCV gibi eğitim fonksiyonunuza iletmek isteyebilirsiniz ya da XGBClassifier'ın set_params yöntemini kullanmak isteyeceksiniz. Unutulmaması gereken bir başka konu şudur: Eğer xgboost'un sargısını sklearn (yani: XGBClassifier() veya XGBRegressor() sınıfları) kullanıyorsanız, kullanılan paramater isimleri sklearn'in kendi GBM sınıfında (ex: eta -> learning_rate) kullanılanlarla aynıdır. Sklearn sarmalayıcısının tam belgelerinin nerede saklandığını göremiyorum, ancak bu sınıflar için kod şu adreste: https://github.com/dmlc/xgboost/blob/master/python-package/xgboost/sklearn.py

Burada referans olarak, model nesne parametrelerini doğrudan nasıl ayarlayacağınız açıklanmaktadır.

>>> 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 

DÜZENLEME: Sana modeli oluşturma parametrelerini ayarlayabilirsiniz varsayalım, sadece bunu yapmak için süper tipik olmayan bazı araçlarında insanların çoğu ızgara arama beri. Ancak bunu yaparsanız, bunları tam param olarak listelemeniz veya ** kwargs kullanmanız gerekir. Örneğin:

>>> 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) 

tam anlamıyla Sözlük olmaya kwargs o parametreyi ayarlayacaktır ** olmadan giriş olarak bir sözlük kullanma: İlk başta

>>> 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

İstediğim kadar doğruysa, bir parametre ızgarasını xgboost'un tren işlevine geçiremezsiniz - parametre sözlük değerleri listelenemez –

0

, sana için bir 's' gevşek tahmin senin değişken. Üstte param yazarsınız ama bunun yerine modeli eğitirken params kullanın. Ve sonra ...

İlgili konular