【发布时间】:2019-06-10 08:13:10
【问题描述】:
处理不平衡数据集问题(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')
此外,在我的情况下,您会推荐使用哪个功能?它可以来自 searn.metrics 甚至是自定义的,但我还不知道如何编写它。请注意,我的问题是召回和精度之间的权衡问题,但召回对我来说是最重要的,因为我想在 99% 的情况下检测少数类。
【问题讨论】:
标签: python machine-learning scikit-learn data-science xgboost