使用XGBoost的超参数网格搜索-评分功能与评估指标

时间:2019-01-16 09:16:28

标签: python machine-learning scikit-learn data-science xgboost

处理不平衡数据集问题(7%对93%),我想使用grid search cross-validation找出我的xgboost模型的最佳结构。 注意:我正在使用分层k折交叉验证,以确保每折具有少数族裔类别的正确比例。

我的情况如下,我注意到GridSearchCV有一个名为“得分”的参数,我可以向其传递多个sklearn.metrics,如图here.所示。但是,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 :(得分:0)

将我的评论转化为答案,没有任何旁路,一切仍然有效,但这没有任何意义。每种算法都会最大化您告诉它的指标,因此在您的示例中,xgboost将构建树以最大化auc,并且网格搜索将找到使精度最大化的超参数。而且显然没有任何意义。

因此,您应该将两个指标设置为相同,无论是AUC,召回率还是您认为适合问题的任何指标;对于不平衡的数据集,AUC是一个不错的选择,或者您可以选择F分数,以便在召回时更加平衡。