Поиск сетки гиперпараметров с помощью XGBoost - функция оценки по сравнению с оценочной метрикой - PullRequest
0 голосов
/ 16 января 2019

Имея дело с проблемой набора данных о дисбалансе (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% случаев.

1 Ответ

0 голосов
/ 16 января 2019

Превращая мой комментарий в ответ, обхода нет вообще, и все по-прежнему работает, но это просто не имеет смысла. Каждый алгоритм максимизирует показатель, о котором вы говорите, поэтому в вашем примере xgboost будет строить деревья, чтобы максимизировать auc, а поиск по сетке найдет гиперпараметры, которые максимизируют точность. И это явно бессмысленно.

Таким образом, вы должны установить обе метрики на одно и то же, будь то AUC, отзыв или что вы считаете подходящим для вашей проблемы; для несбалансированных наборов данных AUC - хороший выбор, или вы можете выбрать F-балл, который более сбалансирован в отношении отзыва.

...