You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CatBoost二分类自定义评估指标中approxes为何出现负值?

CatBoost自定义评估函数中approxes为负值的原因及解决办法

核心误解:approxes是对数几率(Logits),不是概率值

CatBoost二分类模型默认传递给自定义评估函数的approxes数组,是对数几率(logit),也就是ln(p/(1-p)),这个值的取值范围是(-∞, +∞),完全不是你预期的0-1概率区间:

  • 当模型预测的正类概率p<0.5时,logit为负值(比如你看到的-1.25,对应p≈0.22)
  • 当p>0.5时,logit为正值(你看到的0.25对应p≈0.56)

你用expit(y_pred).astype(int)转换后全为0,是因为expit(-1.25)≈0.22、expit(0.25)≈0.56,直接转int会把所有小于1的数都变成0,这显然不对。

内置评估函数正常的原因

内置的F:beta等评估函数,CatBoost内部已经自动完成了logits到概率的转换,或者直接基于logits计算指标(很多指标的计算不需要先转概率,结果一致),所以你不需要额外处理就能正常运行。

正确的处理方式

  1. 转换为概率后判断类别:如果需要基于类别计算指标,先通过sigmoid(即expit)把logits转成概率,再设置阈值(比如0.5)划分类别:
    from scipy.special import expit
    prob = expit(approxes[0])  # approxes是数组列表,取第一个元素
    preds = (prob >= 0.5).astype(int)
    
  2. 直接用logits计算指标:像AUC、对数损失这类指标,可以直接用logits计算,不需要转概率,计算效率和结果准确性都更高。

内容的提问来源于stack exchange,提问作者user23571732

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 23:17:13