XGboost - Grid поиск не работает правильно - PullRequest
0 голосов
/ 29 октября 2019

Мой регрессор Xgboost без параметризации имеет 64.5 R2

Когда я вручную добавляю гиперпараметры, как показано ниже, я получаю 66.4 R2

xgb1 = XGBRegressor(
learning_rate=0.09,
max_depth=4,
min_child_weight=2,
subsample=0.7
)

Однако, когда я выполняю поиск по сетке,ввод гиперпараметров в диапазоне тех, которые я выбрал вручную - R2 только 63

Поиск по сетке:

xgb1 = XGBRegressor()

parameters = {'learning_rate': [0.09, 0.1, 0.2], 
              'min_child_weight':[1, 2, 3], 
              'gamma':[0, .1],
              'subsample':[.7, .8, .9, 1],
              'colsample_bytree':[.8, .9, 1], 
              'max_depth': [3, 4, 5], 
              'n_estimators': [100, 120, 200] }

xgb_grid = GridSearchCV(xgb1,
                        parameters,
                        cv = 5,
                        n_jobs = -1,
                        verbose=True)

xgb_grid.fit(X_train, y_train)

print(xgb_grid.best_score_)
print(xgb_grid.best_params_)

Как видно из «параметров», значенияЧто я выбрал вручную. Поиск по сетке выбирает совершенно разные параметры, которые дают параметры хуже, чем параметры по умолчанию. Это не первый случай, когда ручная параметризация дает лучшие результаты, чем поиск в Grid. Что может быть причиной этого?

Лучшие параметры и оценка:

0.6384582336141522
{'colsample_bytree': 0.8, 'gamma': 0.1, 'learning_rate': 0.2, 'max_depth': 4, 'min_child_weight': 3, 'n_estimators': 120, 'subsample': 0.9}

1 Ответ

1 голос
/ 29 октября 2019

Я не вижу здесь никаких проблем.

Все параметры, которые вы перечислили во втором фрагменте кода, присутствуют в словаре parameters.

Кроме того, вы всегда будете немного отличатьсярезультаты на каждом прогоне, поскольку существует некоторая степень случайности из-за подвыборки, выборки столбцов и т. д. Если вы хотите получать один и тот же результат каждый раз, когда используете один и тот же набор параметров, то инициализируйте регрессор со случайным состояниемустановить целочисленное значение: XGBRegressor(random_state=42).

...