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

关于Python中XGBRegressor早停轮次工作机制的疑问

XGBRegressor早停机制疑问:为何最优轮次后仍训练到62轮?

我正在使用XGBRegressor开发模型,对早停轮次(early_stopping_rounds)的工作机制存在技术疑问。以下是我的代码:

model = XGBRegressor(n_jobs=-1, n_estimators=1000, early_stopping_rounds=50, random_state=42)
model.fit(X_train, y_train, eval_set=[(X_train, y_train),(X_val,y_val)])

训练输出如下:

[0] validation_0-rmse:12740.82085   validation_1-rmse:14354.43509
[1] validation_0-rmse:9487.04070    validation_1-rmse:10616.13605
[2] validation_0-rmse:7283.04039    validation_1-rmse:8239.62752
[3] validation_0-rmse:5858.70801    validation_1-rmse:6670.77442
[4] validation_0-rmse:4965.48363    validation_1-rmse:5681.79305
[5] validation_0-rmse:4385.77247    validation_1-rmse:5110.99709
[6] validation_0-rmse:4043.46385    validation_1-rmse:4774.20268
[7] validation_0-rmse:3763.10815    validation_1-rmse:4635.01149
[8] validation_0-rmse:3591.72373    validation_1-rmse:4561.27221
[9] validation_0-rmse:3459.59007    validation_1-rmse:4520.31052
[10]    validation_0-rmse:3364.49960    validation_1-rmse:4493.90137
[11]    validation_0-rmse:3292.77090    validation_1-rmse:4488.63371
[12]    validation_0-rmse:3261.68385    validation_1-rmse:4477.47174
[13]    validation_0-rmse:3194.66407    validation_1-rmse:4479.46967
[14]    validation_0-rmse:3131.46617    validation_1-rmse:4483.96315
[15]    validation_0-rmse:3105.17158    validation_1-rmse:4496.17191
[16]    validation_0-rmse:2980.64759    validation_1-rmse:4513.39312
[17]    validation_0-rmse:2969.50538    validation_1-rmse:4515.67529
[18]    validation_0-rmse:2928.73793    validation_1-rmse:4514.08650
[19]    validation_0-rmse:2885.23440    validation_1-rmse:4512.02239
[20]    validation_0-rmse:2877.47452    validation_1-rmse:4511.70923
[21]    validation_0-rmse:2775.98275    validation_1-rmse:4541.79559
[22]    validation_0-rmse:2665.77462    validation_1-rmse:4555.71092
[23]    validation_0-rmse:2636.37427    validation_1-rmse:4549.20621
[24]    validation_0-rmse:2562.55110    validation_1-rmse:4556.94927
...
[58]    validation_0-rmse:1443.62609    validation_1-rmse:4736.20431
[59]    validation_0-rmse:1423.84305    validation_1-rmse:4746.66728
[60]    validation_0-rmse:1387.68330    validation_1-rmse:4747.30871
[61]    validation_0-rmse:1367.73335    validation_1-rmse:4747.11801

我理解到模型共训练了62棵树,最优树数为13,但既然13是最优值,为什么在RMSE持续上升的情况下,模型仍会训练到62轮?


解答

核心原因是你设置的early_stopping_rounds=50的规则是:只有当验证集性能连续50轮没有出现新的最优值时,才会触发早停终止训练。

结合你的训练日志分析:

  1. 第12轮时,验证集RMSE(validation_1-rmse)达到了当前最小值4477.47174,这才是真正的最优轮次(XGBoost轮次从0开始计数)。
  2. 从第13轮开始,每一轮的验证集RMSE都没有低于第12轮的最优值,这个“无提升”的计数开始累积。
  3. 当累积到第12+50=62轮时,连续50轮都没有出现更优的验证集性能,触发早停条件,训练停止。

另外需要明确:XGBRegressor在触发早停后,会自动保留最优轮次(第12轮)的模型参数,后续预测默认使用的是这个最优模型,而非最后训练的62轮模型。你可以通过model.best_iteration查看最优轮次编号,model.best_score_查看对应的最优分数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:35:20