Оценка au c в xgb.cv не совпадает с cross_val_score, когда значение `colsample_bytree` отличается от 1 - PullRequest
1 голос
/ 26 марта 2020

Я работаю над сильно несбалансированным набором данных. Во время настройки гиперпараметра я обнаружил, что если для 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.

Может кто-нибудь помочь мне понять, почему это происходит. Спасибо

...