Я разработал модель в R, используя XGBoost.Мои данные сильно разбалансированы по отношению к переменной класса, то есть 5% против 95%.Несмотря на это, я получил хорошие результаты в отношении AUC-ROC & AUC_Precision в R на тестовых данных.Это были 90% и 61%.Сейчас я перевожу код R на python для развертывания в производстве.Там нет R там.Я пытался сохранить те же гиперпараметры, что и в R, но результаты очень разные.AUC находится в диапазоне 86%, но точность составляет около 28% по данным испытаний.Я использую пакет XGBoost, а не XGBClassifier от sklearn.Причина тому: у меня много зависимых переменных, установленных как монотонные.В XGBClassifier нет опции, которую я могу установить 'monotone_constraint'.Вот фрагменты кода из R:
xgb.model <- xgb.train(data =xgb.data.train, params= list(objective='binary:logistic',
eta=0.3, max.depth=6, subsample=0.8,
gamma=5,
monotone_constraints=c(0,-1,-1,-1,-1,0,1,1,1),
eval_metric='auc',eval_metric='aucpr',
verbose = 1),
watchlist=list(test=xgb.data.test), nrounds=400, max.delta.step=10)
И код из Python:
feature_monotones = [0,-1,-1,-1,-1,0,1,1,1]
eval_metric = ['auc','aucpr']
params = {objective='binary:logistic'
'max_depth': 6,
'eta': 0.3,
#'silent': 1,
#'nthread': 2,
'subsample': 0.8,
'gamma': 5,
'seed': 1234,
'eval_metric': eval_metric,
'max_delta_step':10,
'monotone_constraints': '(' + ','.join([str(m) for m in feature_monotones]) + ')'
}
evallist = [(dtrain, 'train'), (dtest, 'eval')]
evals_result = {}
bst = xgb.train(params, dtrain, num_boost_round = 1000, evals_result = evals_result, evals = evallist, verbose_eval = True)
Я сохранил гиперпараметры схожими, за исключением nrounds = 400 в R и num_boost_round = 1000в питоне.В python нет совпадений с nrounds для R.Но я предполагаю, что nrounds похож на num_boost_round.
Есть идеи, почему так много разных результатов?