2016-01-08 2 views
10

Я пытаюсь использовать классификатор XGBoosts для классификации некоторых двоичных данных. Когда я делаю простую вещь и использовать значения по умолчанию (следующее)XGBoost XGBClassifier По умолчанию в Python

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

ответ

15

Это не то, как вы устанавливаете параметры в xgboost. Вы либо хотите передать свою сетку параметров в свою учебную функцию, такую ​​как train xgboost или GridSearchCV или sklearn, или вы хотите использовать метод set_params XGBClassifier. Другое дело отметить, что если вы используете обертку xgboost для sklearn (то есть: классыили XGBRegressor()), то используемые имена paramater те же, что и в собственном классе GBM (например: eta -> learning_rate). Я не вижу, где скрыта точная документация для обертки sklearn, но код для этих классов находится здесь: 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 

EDIT: Я полагаю, вы можете установить параметры на создание модели, он просто не супер типичный для этого, так как большинство людей, поиск сетки в некоторых средств. Однако, если вы это сделаете, вам нужно будет либо перечислить их как полные параметры, либо использовать ** 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

В очень первых, я думаю, вы потеряете в «S» для вашего переменная. У вас есть param сверху, но используйте вместо этого params. И тогда ...