Ответ 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)