GridSearchCV с XGBRegressor

#python #gridsearchcv #xgbregressor

Вопрос:

Я использую R^2 (от sklearn.metrics) в качестве функции подсчета очков, но когда поиск по сетке заканчивается, он набирает лучшую оценку -282,3. Перед тем как попытаться настроить параметры для этой модели, я запустил XGBRegressor на своих обучающих данных с набором (как я думал) разумных параметров и получил оценку R^2 0,62, и при запуске поиска по сетке я убедился, что эти начальные параметры включены в диапазоны, в которые я прошел. Я в замешательстве относительно того, почему это происходит, и был бы признателен за некоторые разъяснения и, если возможно, за обходной путь. Я читал в нескольких разных местах, что API оценки всегда минимизирует значения (поэтому оценки отрицаются), но я не уверен, как это повлияет на меня, потому что R^2 может быть отрицательным, если модель плохо соответствует данным.

Я включаю приведенный ниже код, хотя и не думаю, что это необходимо для ответа на вопрос.

 params = { 'max_depth': [2, 4, 6],
           'n_estimators': [100, 500, 1000],
           'colsample_bytree': [0.2, 0.6, 0.8],
           'min_child_weight': [3, 5, 7],
           'gamma': [0.3, 0.5, 0.7],
           'subsample': [0.4, 0.6, 0.8]}

model = XGBRegressor()
grid = GridSearchCV(estimator=model, 
                   param_grid=params,
                   scoring='r2', 
                   verbose=1)
start = time.time()
grid.fit(X, y)
end = time.time()
print(end-start)
print("Best parameters:", grid.best_params_)
print("Best Score (R2): ", (grid.best_score_))
 

Для справки, это модель, которую я использовал до попытки поиска по сетке, которая дала мне оценку R^2 0,62:

 regressor = XGBRegressor(colsample_bytree=0.6, gamma=0.3, max_depth=4, min_child_weight=5, n_estimators=100,  subsample=0.8, objective='reg:squarederror')
 

Заранее спасибо!