XGBoost XGBClassifier По умолчанию в Python

Я пытаюсь использовать классификатор 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? так что я могу начать настройку?

Ответ 1

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

Ответ 2

В самом начале, я думаю, вы теряете 's' для своей переменной. Вы сверху param сверху, но используйте params при обучении модели. И затем...