梯度提升机 (GBMs) 是一种强大的集成方法家族。随机森林作为另一种集成技术,构建多个独立的树并平均它们的预测(这是一种名为bagging的技术),而梯度提升则采用一种不同的、序列化的方法。它逐个构建树,每个新树都试图纠正之前构建的集成模型所犯的错误。核心思想来源于“提升”(boosting)的理念:将多个“弱”学习器(在这种情况下,通常是表现略优于随机猜测的模型,即浅层决策树)组合成一个“强”学习器。与独立学习不同,提升是一种迭代过程。假设你正在预测房价。你从一个非常简单的模型开始,也许只是预测所有房屋的平均价格。这个初始模型很可能会有明显的错误。梯度提升接着拟合一个新模型(一个弱学习器,比如一个小型决策树),专门用于预测第一个模型所犯的错误(残差)。这个新树的预测结果,通过一个称为学习率的因子进行缩放后,被加到初始模型的预测结果中。这种组合形成了一个改进的集成模型。这个过程重复进行:计算当前集成模型的错误,为这些新错误拟合一个新树,并将其缩放后的预测结果添加到集成模型中。每个新树都集中于剩余的错误,逐步提高整体预测准确性。梯度提升中的“梯度”指的是这个过程使用了梯度下降优化。在每一步,算法都会识别“函数空间”中能最快速减少预测错误的方向(具体来说,是所选损失函数(如回归任务的均方误差或分类任务的对数损失)的负梯度)。选择新的弱学习器来近似这个负梯度,从而有效地朝着最小化总体错误的方向迈进。令 $F_{m-1}(x)$ 为 $m-1$ 棵树后集成模型的预测, $L(y, F(x))$ 为比较真实目标 $y$ 和预测 $F(x)$ 的损失函数。在第 $m$ 步,算法计算每个数据点 $i$ 的伪残差 $r_{im}$,这些残差与损失函数的负梯度相关:$$r_{im} = - \left[ \frac{\partial L(y_i, F(x_i))}{\partial F(x_i)} \right]{F(x) = F{m-1}(x)}$$然后,根据输入特征 $x$ 训练一个新的弱学习器 $h_m(x)$ 来预测这些伪残差。通过添加这个新的学习器并用学习率 $\nu$(通常表示为 eta)进行缩放来更新集成模型:$$F_m(x) = F_{m-1}(x) + \nu h_m(x)$$学习率 $\nu$(通常是0.01到0.3之间的小值)很重要。它减少了每棵树的贡献,使提升过程更保守,更不容易过拟合,尽管这通常需要添加更多的树(n_estimators)才能达到良好性能。存在一个权衡:较小的学习率通常需要更多的树。另一个重要参数是弱学习器的复杂度,例如所用决策树的 max_depth。虽然scikit-learn提供了实现(GradientBoostingClassifier、GradientBoostingRegressor),但像XGBoost(极致梯度提升)、LightGBM(轻量级梯度提升机)和CatBoost这样经过高度优化且流行的库已成为实际应用和机器学习竞赛中的标准。这些库提供了比基本GBMs更多的改进:正则化: 包含了用于防止过拟合的技术(如树权重上的L1和L2正则化)。缺失值处理: 内置处理缺失数据的机制。速度与效率: 优化算法(例如,基于直方图的分割、并行处理)以加快训练速度,尤其是在大型数据集上。高级功能: 诸如自定义目标函数、早期停止和复杂树剪枝等选项。梯度提升通常在结构化(表格)数据上为分类和回归任务提供先进的结果。然而,它的性能对超参数调优非常敏感。与随机森林(在默认设置下也能表现良好)不同,GBMs通常需要仔细调整学习率、树的数量和树深度等参数,以避免过拟合并达到最佳性能。与随机森林相比,它们的训练计算量也可能更大,尽管像LightGBM这样的库是专为速度而设计的。在接下来的部分中,我们将研究如何使用XGBoost和LightGBM等库来实际实现这些强大模型,以及有效的超参数调优策略。