Имея дело с проблемой набора данных о дисбалансе (7% против 93%), я хочу выяснить лучшую структуру моей модели xgboost, используя перекрестную проверку поиска по сетке . Примечание. Я использую перекрестную проверку с разбивкой по k-сгибам, чтобы убедиться, что в каждом сгибе правильная пропорция класса меньшинства.
Моя ситуация следующая, я заметил, что GridSearchCV имеет параметр, называемый 'скоринг', которому я могу передать даже более одного sklearn.metrics , как показано здесь . Однако xgboost также имеет параметр с именем 'eval_metric', и я немного запутался между ними. Не могли бы вы объяснить мне разницу, если таковые имеются? Где правильное место для его указания?
Я приложу немного кода, чтобы проиллюстрировать это:
params_grid = {
'n_estimators': [100, 300],
'learning_rate': [0.01, 0.1, 0.3],
'colsample_bytree': [0.3, 0.5],
}
params_fixed = {
'objective':'binary:logistic',
'silent':1,
'eval_metric':'auc'
}
n_folds = 5
skf = StratifiedKFold(n_splits=n_folds,random_state=seed,shuffle=True)
# create xgboost classifier
xgb = XGBClassifier(**params_fixed, seed=seed)
grid_search = GridSearchCV(estimator=xgb, param_grid=params_grid,
cv=skf.split(X_train, y_train), scoring='balanced_accuracy')
Кроме того, какую функцию вы бы порекомендовали использовать в моем случае? Это может быть от skearn.metrics или даже обычного, но я пока не знаю, как это написать. Обратите внимание, что моя проблема - это проблема компромисса между отзывом и точностью, но для меня наиболее важным является отзыв, поскольку я хотел бы определить класс меньшинства в 99% случаев.