趋近智
如我们之前所讲,梯度提升模型按顺序学习,逐次添加弱学习器(通常是树)以纠正前一个集成模型的错误。尽管这种累加过程功能强大,但它可能无限期地持续下去,越来越紧密地拟合训练数据。如果没有干预,模型最终将开始拟合训练数据中固有的噪声,导致过拟合 (overfitting)和在未见数据上表现不佳。早停提供了一种实用且广泛使用的方案来确定最佳的提升迭代次数。
主要思路直接明了:在训练过程中,在一个独立的验证数据集上监测模型的表现,当验证表现不再提升时停止训练。
early_stopping_rounds,防止由于验证分数微小的随机波动而过早停止。通过根据验证表现限制提升迭代次数,早停起到了一种正则化的作用。它阻止模型变得过于复杂并拟合训练数据中的噪声。添加更多的树会增加模型的容量;早停找到一个点,在该点之后,容量的进一步增加主要捕捉噪声而不是潜在模式,从而有效控制模型复杂度。
以下是梯度提升模型的典型学习曲线:
训练误差通常持续下降,而验证误差最初会下降,但随着模型过拟合 (overfitting),随后开始上升。早停的目标是在验证误差曲线的最低点附近停止训练(本例中为第80次迭代)。虚线表示在停止之前性能没有提升的耐心期。
大多数现代梯度提升库(XGBoost、LightGBM、CatBoost)都内置支持早停功能。通常,您在调用 fit 时通过提供以下内容来启用它:
early_stopping_rounds):即“耐心”值。例如,在XGBoost中,调用可能如下所示:
# 示例 (XGBoost API)
eval_set = [(X_train, y_train), (X_val, y_val)]
model.fit(X_train, y_train,
eval_set=eval_set,
eval_metric='logloss', # 或 'rmse' 等
early_stopping_rounds=10, # 如果验证集上的对数损失在10轮内没有提升,则停止
verbose=True) # 查看每轮的表现
这种方法显著简化了超参数 (parameter) (hyperparameter)调整。您无需精心调整树的数量(n_estimators),可以将其设置为一个合理大的数值,让早停根据验证表现自动找到最佳停止点。
early_stopping_rounds 设置得过低可能由于噪声导致过早停止。设置得过高可能在停止前允许一定程度的过拟合 (overfitting)。这个值本身通常也需要一些调整,但通常不如直接调整 n_estimators 那么关键。早停是梯度提升模型正则化 (regularization)的一种基本方法。它提供了一种计算上高效的方式,通过根据未见数据上的表现动态确定提升轮次数量来防止过拟合,使其成为梯度提升模型在实际操作中不可或缺的工具。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造