梯度提升算法按顺序构建模型,其中每个新的基本学习器(通常是决策树)试图修正之前学习器集成所犯的错误。这种迭代改进过程,侧重于当前预测的损失函数的伪残差或梯度,赋予了梯度提升算法强大的预测能力。然而,正是这种机制使其特别容易过拟合。主要问题源于算法不断努力最小化训练数据上的损失。在初始阶段,新树对主要模式进行建模,并显著减少预测误差。随着过程持续多轮迭代,剩余残差逐渐不仅代表了潜在的精细结构,还代表了训练样本中固有的随机噪声。如果基本学习器足够复杂(例如,深度决策树)且提升过程不中断,算法就会开始精细地拟合这些噪声。模型本质上开始记忆训练数据,包括其特殊性。从偏差-方差角度来看,梯度提升算法通过构建一个复杂的加性函数来积极减少偏差。没有限制的话,这个过程可能导致极高的方差。模型变得对训练数据过度拟合,但未能推广到新的、未见过的数据点,因为其在后期学到的“模式”仅仅是噪声伪影。这表现为训练集和独立验证集上性能指标的典型分歧。随着提升轮次的增加,训练误差可能持续稳定下降,而验证误差达到最小值后开始上升,因为模型出现了过拟合。{"layout": {"title": "提升算法中典型的过拟合模式", "xaxis": {"title": "提升迭代次数"}, "yaxis": {"title": "误差(例如,对数损失/均方误差)"}, "legend": {"x": 0.1, "y": 0.1}}, "data": [{"x": [10, 50, 100, 150, 200, 250, 300, 350, 400, 450, 500], "y": [0.6, 0.4, 0.3, 0.25, 0.2, 0.18, 0.16, 0.15, 0.14, 0.13, 0.12], "mode": "lines", "name": "训练误差", "line": {"color": "#228be6"}}, {"x": [10, 50, 100, 150, 200, 250, 300, 350, 400, 450, 500], "y": [0.65, 0.5, 0.45, 0.42, 0.41, 0.40, 0.405, 0.415, 0.43, 0.45, 0.47], "mode": "lines", "name": "验证误差", "line": {"color": "#fd7e14"}}]}训练误差通常会随着迭代次数的增加而持续下降,而验证误差通常在开始时下降,但随后随着模型开始过拟合而上升。基本学习器的复杂度扮演着重要角色。决策树,尤其是允许其生长得很深时,可以创建分割点,从而隔离极少量的训练实例,甚至可能是单个数据点。在拟合残差时,这类复杂树可以轻易找到完美解释这些少量实例相关噪声的分割点,从而导致高度特异性且不具备泛化能力的规则。这种行为与随机森林(基于装袋法)等方法形成对比,随机森林通过平均多个独立训练的深层树的预测来帮助减少总体方差。提升算法的顺序特性(每棵树都依赖于之前的树)缺乏通过简单平均来减少方差的固有机制,反而需要明确的正则化来防止方差过度增加。了解这些过拟合机制非常重要。认识到无约束的提升算法几乎不可避免地会使训练数据过拟合,这强调了本章其余部分讨论的正则化技术的重要性。这些方法提供了必要的控制,以在使用提升算法能力的同时,确保所得模型能很好地应对新的问题。