Я работаю над сильно несбалансированным набором данных. Во время настройки гиперпараметра я обнаружил, что если для colssample_bytree
установлено значение , отличное от 1 , то значение cross_val_score
из пакета sklearn не совпадает с показателем au c, полученным из xgb.cv
.
xgb.cv код:
# creating kfolds
kfolds = StratifiedKFold(n_splits = 5, shuffle = True, random_state = 16)
# creating model object and using it for xgb.cv
xgb0 = XGBClassifier(objective= 'binary:logistic', n_estimators =2, colsample_bytree = 0.6,
random_state =16, n_jobs = -1, eval_metric = 'auc')
params = xgb0.get_params()
xg_train = xgb.DMatrix(X_train_p.values, label = y_train.values)
cv_result = xgb.cv(params, xg_train, num_boost_round=2, folds = kfolds, metrics = 'auc', early_stopping_rounds = 50,
as_pandas = True, seed = 16,stratified=True, shuffle = True)
print(cv_result['test-auc-mean'].values[-1])
Это приводит к значению test-au c 0,91706
cross_val_score code :
cv_score = cross_val_score(xgb0, X_train_p, y_train, cv = kfolds, n_jobs = -1, scoring = 'roc_auc')
cv_score.mean()
Это приводит к значению test-au c, равному 0,8994
Я не понимаю этой огромной разницы между ними и, как я уже указал, если colsample_bytree
установлен в 1, тогда нет никакой разницы между оценками. Также эта разница между auc
баллами значительно увеличивается при уменьшении colsample_bytree
.
Может кто-нибудь помочь мне понять, почему это происходит. Спасибо