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

R语言XGBoost自定义评估指标返回值恒为0问题排查

问题原因
  • XGBoost使用objective = "binary:logistic"时,训练过程中传入feval自定义评估函数的preds参数是未经过sigmoid激活的对数几率(log-odds)值,并非你最后调用predict输出的0~1区间概率值。
  • 你写的判定逻辑preds-0.05<0.20要求预测值大于0.25才会返回非0结果,但训练阶段拿到的log-odds值远低于0.25,所有值都会被判定为0,因此迭代过程中指标全程显示为0。
解决方案

在自定义评估函数中先将传入的log-odds值转换为0~1概率值,R中可以直接调用plogis()函数完成该转换。

修改后的代码

仅需要替换你原有的my_metric函数即可:

my_metric <- function(preds, dtest){
  # 先把log-odds转为概率
  preds_prob <- plogis(preds)
  g <- c(0.75,1.5)
  c <- ifelse(preds_prob - 0.05 < 0.20, 0, preds_prob)
  d <- c * g
  result_matrix <- sum(d)
  return(list(metric = "result", value = result_matrix))
}

修改后重新运行代码,第100轮的评估指标值就会和你预期的0.3299713一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:45:01