Я пытаюсь использовать 'AUCPR' в качестве критерия оценки для ранней остановки с использованием Sklearn's RandomSearchCV & Xgboost, но я не могу указать maximize=True
для ранней остановки подходящих параметров. Вместо этого eval_metri c минимизируется для AUCPR.
Я уже упоминал этот вопрос: GridSearchCV - XGBoost - Ранняя остановка
Но кажется, что ранняя остановка работает только для целей минимизации? Наилучшая итерация при ранней остановке рассматривается, когда AUCPR является самой низкой, что является неправильной оптимизацией.
xgb = XGBClassifier()
params = {
'min_child_weight': [0.1, 1, 5, 10, 50],
'gamma': [0.5, 1, 1.5, 2, 5],
'subsample': [0.6, 0.8, 1.0],
'colsample_bytree': [0.6, 0.8, 1.0],
'max_depth': [5, 10, 25, 50],
'learning_rate': [0.0001, 0.001, 0.1, 1],
'n_estimators': [50, 100, 250, 500],
'reg_alpha': [0.0001, 0.001, 0.1, 1],
'reg_lambda': [0.0001, 0.001, 0.1, 1]
}
fit_params={"early_stopping_rounds":5,
"eval_metric" : "aucpr",
"eval_set" : [[X_val, y_val]]
}
random_search = RandomizedSearchCV(xgb,
cv=folds,
param_distributions=params,
n_iter=param_comb,
scoring=make_scorer(auc_precision_recall_curve, needs_proba=True),
n_jobs=10,
verbose=10,
random_state=1001,
)
random_search.fit(X_train, y_train, **fit_params)