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计算指标(很多指标的计算不需要先转概率,结果一致),所以你不需要额外处理就能正常运行。
正确的处理方式
- 转换为概率后判断类别:如果需要基于类别计算指标,先通过
sigmoid(即expit)把logits转成概率,再设置阈值(比如0.5)划分类别:from scipy.special import expit prob = expit(approxes[0]) # approxes是数组列表,取第一个元素 preds = (prob >= 0.5).astype(int) - 直接用logits计算指标:像AUC、对数损失这类指标,可以直接用logits计算,不需要转概率,计算效率和结果准确性都更高。
内容的提问来源于stack exchange,提问作者user23571732
相关产品推荐
相关产品推荐

