Прецизионные дисбалансированные классы CatBoost - PullRequest
0 голосов
/ 30 января 2019

Я использую CatBoostClassifier, и мои классы сильно разбалансированы.Я применил параметр scale_pos_weight, чтобы учесть это.Во время тренировки с набором данных оценки (тест) CatBoost показывает высокую точность теста.Однако, когда я делаю прогнозы на тесте с использованием метода прогнозирования, я получаю только низкую точность оценки (рассчитывается с использованием sklearn.metrics).

Я думаю, что это может быть связано с весами классов, которые я применил.Тем не менее, я не совсем понимаю, как это влияет на оценку точности.

params = frozendict({
    'task_type': 'CPU',
    'loss_function': 'Logloss',
    'eval_metric': 'F1', 
    'custom_metric': ['F1', 'Precision', 'Recall'],
    'iterations': 100,
    'random_seed': 20190128,
    'scale_pos_weight': 56.88657244809081,
    'learning_rate': 0.5412829495147387, 
    'depth': 7, 
    'l2_leaf_reg': 9.526905230698302
})

from catboost import CatBoostClassifier
model = cb.CatBoostClassifier(**params)
model.fit(
    X_train, y_train,
    cat_features=np.where(X_train.dtypes == np.object)[0],
    eval_set=(X_test, y_test),
    verbose=False,
    plot=True
)

model.get_best_score()
{'learn': {'Recall': 0.9243007537531925,
  'Logloss': 0.15892360013680026,
  'F1': 0.9416723809244181,
  'Precision': 0.9640191600545249},
 'validation_0': {'Recall': 0.914252301192093,
  'Logloss': 0.1714387314107052,
  'F1': 0.9357892623978286,
  'Precision': 0.9642642597943112}}

y_test_pred = model.predict(data=X_test)

from sklearn.metrics import balanced_accuracy_score, recall_score, precision_score, f1_score
print('Balanced accuracy: {:.2f}'.format(balanced_accuracy_score(y_test, y_test_pred)))
print('Precision: {:.2f}'.format(precision_score(y_test, y_test_pred)))
print('Recall: {:.2f}'.format(recall_score(y_test, y_test_pred)))
print('F1: {:.2f}'.format(f1_score(y_test, y_test_pred)))

Balanced accuracy: 0.94
Precision: 0.29
Recall: 0.91
F1: 0.44

Я ожидал получить ту же точность, что и шоу CatBoost во время тренировок, однако это не так.Что я делаю не так?

...