如何使CatBoost get_object_importance与AUC一起使用?

时间:2018-08-24 21:44:24

标签: python machine-learning catboost

我复制了示例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从“正”翻转为“负”。

1 个答案:

答案 0 :(得分:1)

对于loss_function='RMSE',CatBoost尝试最小化RMSE的损失函数,而不是LoglossRMSE是默认的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