Я воспроизвел пример здесь.
Пример пытается улучшить RMSE (ниже-> лучше).
Мое ограниченное понимание состоит в том, что CatBoost попытается минимизировать LogLoss под капотом. В этом примере более низкий LogLoss, кажется, коррелирует с более низким RMSE.
RMSE on validation datset when 0 harmful objects from train are dropped: 0.25915746122622113
RMSE on validation datset when 250 harmful objects from train are dropped: 0.25601149050939825
RMSE on validation datset when 500 harmful objects from train are dropped: 0.25158044983631966
RMSE on validation datset when 750 harmful objects from train are dropped: 0.24570533776587475
RMSE on validation datset when 1000 harmful objects from train are dropped: 0.24171376432589384
RMSE on validation datset when 1250 harmful objects from train are dropped: 0.23716221792112202
RMSE on validation datset when 1500 harmful objects from train are dropped: 0.23352830055657348
RMSE on validation datset when 1750 harmful objects from train are dropped: 0.23035731488436903
RMSE on validation datset when 2000 harmful objects from train are dropped: 0.2275943109556251
Помимо наблюдения за RMSE с cb.eval_metrics(validation_pool, ['RMSE'])['RMSE'][-1]
, в примере действительно не используется RMSE в качестве настраиваемой функции потерь.
cb = CatBoost({'iterations': 100, 'verbose': False, 'random_seed': 42})
print(cb.eval_metrics(validation_pool, ['RMSE'])['RMSE'][-1])
В моем случае у меня проблема с двоичной классификацией, и я хочу максимизировать AUC. Я не уверен, следует ли мне просто оставить код как есть, и надеюсь, что более низкие логопотери коррелируют с более высокими AUC (это не так), или, если мне нужно настроить это по-другому, возможно, используя AUC в качестве настраиваемой потери / eval_metric функция, а затем переключение importance_values_sign
с «Положительного» на «Отрицательное».