Hello,
For a binary classification, I get an accuracy of 0.48 when I apply increasing monotonicity constraint to all the features, but get an accuracy of 1.0 when I do NOT apply any monotonicity constraint to any feature.
I need to build a monotonic xgboost classifier (binary classifier) but do NOT expect a performance drop from the regular xgboost (without monotonicity constraint), with the same dataset. How may I achieve this? I am not sure if I have correctly set the parameters; thus I am sharing my code below.
X_train = np.array(df_tr)
X_validation = np.array(df_val)
X_test = np.array(df_ts)dtrain = xgb.DMatrix(X_train, label = y_train)
dvalidation = xgb.DMatrix(X_validation, label = y_validation)
dtest = xgb.DMatrix(X_test, label = y_test)#without monotonic constraints
feature_monotones = [0 for i in range(len(used_features))]
#increasing monotonic constraints to all features
#feature_monotones = [1 for i in range(len(used_features))]params = {‘max_depth’: 2,
‘eta’: 0.1,'silent': 1, 'nthread': 2, 'seed': 0, 'objective': 'binary:logistic', 'tree_method': 'hist', 'eval_metric': ['auc', 'error'], 'monotone_constraints': '(' + ','.join([str(m) for m in feature_monotones]) + ')' }
bst_cv = xgb.cv(params, dtrain, 500, nfold = 5, early_stopping_rounds=10)
evallist = [(dtrain, ‘train’), (dtest, ‘eval’)]
evals_result = {}model = xgb.train(params, dtrain, num_boost_round = bst_cv.shape[0], evals_result = evals_result, evals = evallist, verbose_eval = False)
Could you please advise me?
Thank you so much for your valuable support!