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 Я хотел начать с default и работать оттуда...
# 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? чтобы я мог начать настраивать?
3 ответов
это не как установить параметры в xgboost. Вы либо хотите передать свою сетку param в свою функцию обучения, такую как xgboost train
или sklearn это GridSearchCV
, или вы хотели бы использовать xgbclassifier в set_params
метод. Другое дело, что если вы используете оболочку xgboost для sklearn (т. е.:XGBClassifier()
или XGBRegressor()
classes), то используемые имена paramater являются теми же, которые используются в собственном классе GBM sklearn (например: 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
изменить: Я предполагаю, что вы можете установить параметры при создании модели, это просто не очень типично, так как большинство людей ищут сетку в некоторых средствах. Однако, если вы это сделаете, вам нужно будет либо перечислите их как полные параметры или используйте * * кварги. Например:
>>> 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)
значения по умолчанию для XGBClassifier к документации XGBClassifier с значениями по умолчанию класса: https://xgboost.readthedocs.io/en/latest/python/python_api.html#xgboost.XGBClassifier
Для начала, похоже, вам не хватает s на param
.
вы писали параметр вверху:
param = {}
param['booster'] = 'gbtree'
param['objective'] = 'binary:logistic'
.
.
.
...но используйте параметрs далее вниз, при обучении модели:
clf = xgb.XGBClassifier(params) <-- different variable!
Это была просто опечатка в вашем примере?