0

我在这里复制了这个例子。

该示例试图改进 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。我不确定我是否应该将代码保持原样,并希望较低的 logloss 与较高的 AUC 相关(它没有),或者如果我需要以不同的方式设置它,也许使用 AUC 作为自定义损失/eval_metric函数,然后importance_values_sign从“正”翻转到“负”。

4

1 回答 1

1

在 的情况下loss_function='RMSE',CatBoost 尝试最小化RMSE损失函数,而不是LoglossRMSE是默认的 CatBoost 损失函数。

CatBoostLogloss使用页面中的公式进行评估。因此,较低Logloss与较高相关AUC

所以,你只需要更换

cb = CatBoost({'iterations': 100, 'verbose': False, 'random_seed': 42})

cb = CatBoost({'loss_function': 'Logloss', 'iterations': 100, 'verbose': False, 'random_seed': 42})

并且观察不是为了RMSE,而是为了AUC

于 2018-08-27T14:17:00.127 回答