I am working on a highly imbalanced dataset for a competition.
The training data shape is : (166573, 14)
train['outcome'].value_counts() 0 159730 1 6843
I am using XGBClassifier for building model and the only parameter I manually set is scale_pos_weight : 23.34 (0 value counts / 1 value counts)
and it's giving around 82% under AUC metric.
I guess I can get much accuracy if I hypertune all other parameters.
XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1, colsample_bytree=1, gamma=0, learning_rate=0.1, max_delta_step=0, max_depth=3, min_child_weight=1, missing=None, n_estimators=100, n_jobs=1, nthread=None, objective='binary:logistic', random_state=0, reg_alpha=0, reg_lambda=1, scale_pos_weight=23.4, seed=None, silent=True, subsample=1)
I tried GridSearchCV but it's taking a lot of time to complete on my local machine and I am not able to get any result back.
clf = XGBClassifier() grid = GridSearchCV(clf, params, n_jobs=-1, scoring="roc_auc", cv=3) grid.fit(X_train, y_train) print("Best: %f using %s" % (grid.best_score_, grid.best_params_))
What others parameters should I target to tune considering higly imbalanced dataset and how to run it so that I can actually get some results back?