Невозможно передать параметр в XGBoost - PullRequest
1 голос
/ 13 июня 2019

Я пытаюсь выполнить поиск в сетке по нескольким параметрам, чтобы получить мой набор данных. Я заметил, что параметры, которые я передаю моей функции xgboost, не принимаются. Например, результат моей модели alg.get_params() это

{'colsample_bytree': 1,  'gamma': 0,  'learning_rate': 0.1,  'max_depth': 3, 'n_estimators': 100, 'objective': 'multi:softmax', 'reg_alpha': 0,  'reg_lambda': 1}

Я определил простой словарь для параметров следующим образом:

xgb_params = {
        'maxdepth':[8],
        'objective':['multi:softmax'],
        'n_estimators':[600, 900, 1200],
        'gamma':[0, .1, .2],
        'lambda':[.5, 1, 3],
        'alpha':[.5, 1, 2],
        'num_class':[3],
        #Other parameters
             }

Фактическая передача параметров обрабатывается с помощью функции gridsearch, как показано ниже:

alg = XGBClassifier()
grid_search = GridSearchCV(estimator = alg, param_grid=xgb_params, scoring='accuracy', cv=4, verbose=1)
grid_search.fit(X_train, y_train)

Не уверен, куда я иду не так. Проведя некоторое исследование, многие авторы предлагают использовать hyperopt для оптимизированного поиска / настройки гиперпараметров, однако я пытаюсь понять, в чем я ошибаюсь, используя свой текущий подход.

1 Ответ

2 голосов
/ 14 июня 2019

Все в порядке с вашим кодом, вы просто смотрите не на то. alg.get_params() представляет параметры оценки по умолчанию, а через GridSearchCV вы тренируете 4 модели. Чтобы получить к ним доступ, вам нужно запросить grid_search, например:

Чтобы получить все результаты:

print(grid_search.cv_results_)

Ваша лучшая оценка:

print(grid_search.best_estimator_)

И его гиперпараметры:

print(grid_search.best_params_)
...