Python: несбалансированные данные для классификации XGBoost Multi-label - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть набор данных о возвратах акций, где Y-метка - это направление изменения цены (= 2, если тик вверх, = 1, если тик вниз, и = 0, если нет движения. Некоторые из функций, X, включают в себя отстающий значения меток (т.е. изменение направления цены предыдущего дня).

Я пытаюсь запустить модель классификации XGBoost, однако мои данные сильно разбалансированы. Большинство значений метки Y = 0, что означает, что цена акций не изменилась.

Как я могу включить этот дисбаланс в проблему классификации XGBoost с несколькими метками?

Мой код следующий:

X = df[["ret_D_lag_1", "ret_D_lag_2", "ret_D_lag_3"]]
y = df["ret_D_t1"]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=123)

# use DMatrix for xgboost
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)

# set xgboost params
param = {
    'max_depth': 3,  # the maximum depth of each tree
    'eta': 0.3,  # the training step for each iteration
    'silent': 1,  # logging mode - quiet
    'objective': 'multi:softprob',  # error evaluation for multiclass training
    'num_class': 3}  # the number of classes that exist in this datset
num_round = 20  # the number of training iterations

# Train the model
bst = xgb.train(param, dtrain, num_round)

# Predict and choose highest probability for each label
preds = bst.predict(dtest)
best_preds = np.asarray([np.argmax(line) for line in preds])
...