我复制了示例here。
该示例尝试改善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
除了使用cb.eval_metrics(validation_pool, ['RMSE'])['RMSE'][-1]
观察RMSE之外,该示例并未真正将RMSE用作自定义损失函数。
cb = CatBoost({'iterations': 100, 'verbose': False, 'random_seed': 42})
print(cb.eval_metrics(validation_pool, ['RMSE'])['RMSE'][-1])
就我而言,我有一个二进制分类问题,我想最大化AUC。
我不确定是否应该仅保留代码,并希望较低的对数损失与较高的AUC相关联(不是),或者我是否需要进行其他设置(也许使用AUC作为自定义loss / eval_metric)函数,然后将importance_values_sign
从“正”翻转为“负”。
答案 0 :(得分:1)
对于loss_function='RMSE'
,CatBoost尝试最小化RMSE
的损失函数,而不是Logloss
。 RMSE
是默认的CatBoost损失函数。
CatBoost使用this页面中的公式对Logloss
进行评估。因此,较低的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
。