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

原生XGB与XGBRegressor预测一致但指标不同的原因咨询

原因分析:xgb.train与XGBRegressor的poisson-nloglik指标差异

预测结果完全一致说明两个模型的参数和拟合逻辑完全对齐,指标差异的核心原因是两个接口对poisson-nloglik的计算方式不同:一个计算总损失,一个计算平均损失。

1. 指标计算的缩放差异

XGBoost原生接口(xgb.train)与scikit-learn接口(XGBRegressor)在计算poisson-nloglik时,默认归一化逻辑不同:

  • xgb.train的eval方法返回的是所有样本的对数似然损失总和
  • XGBRegressor的evals_result返回的是单样本的平均对数似然损失

你可以通过以下代码验证:将scikit-learn接口的结果乘以训练集样本数,应与原生接口的结果近似相等(忽略浮点误差):

train_size = len(simdf_train)
# 原生接口的总损失
native_loss = float(bst_A.eval(xgbMatrix_A).split(':')[-1])
# 平均损失乘以样本数,与总损失对齐
sklearn_scaled_loss = bst_B.evals_result()["validation_0"]["poisson-nloglik"][-1] * train_size
print(native_loss)
print(sklearn_scaled_loss)

2. 计算时机的细节补充

xgb.train的eval是训练完成后,基于最终模型对验证集(此处为训练集)重新计算的指标;而XGBRegressor的evals_result记录的是训练过程中每一轮迭代后的指标值,最终取第50轮的结果。不过因为模型最终收敛到同一状态,这个差异不会导致数值偏差,核心仍为缩放逻辑不同。

3. 参数一致性验证(可选)

虽然你的预测结果一致,可确认从config提取的参数是否完全保留原生模型设置(比如monotone_constraints),避免隐性参数遗漏:

print(model_param)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 14:35:56