在机器学习领域,要解决复杂的回归与分类问题并构建高精度预测模型,梯度提升机(GBM)无疑是主流技术之一,业界普遍认为它在提升(Boosting)算法中属于最强梯队。
谈到机器学习,算法种类繁多令人眼花缭乱,但Boosting方法已成为全球机器学习社区的核心思路。其本质是集成学习,即把多个简单模型(弱学习器或基础估计器)组合起来,最终输出一个强大的预测结果。GBM正是集成方法的代表,核心思想是将弱学习器逐步锤炼成强学习器。今天我们的主题是“机器学习中的GBM”,将深入探讨梯度提升算法、各类Boosting算法的区别、GBM的发展历程、工作原理、关键术语等内容。不过在深入之前,我们有必要先厘清Boosting概念本身,并了解它的不同流派。
什么是机器学习中的Boosting?
Boosting 是集成学习中一种极具启发性的思路,致力于从多个弱分类器中打磨出一个强分类器。具体操作是:先在训练数据上构建一个初始模型,然后找出该模型所犯的错误。接着,再构建第二个模型,专门纠正第一个模型的错误,第三个模型继续弥补前两个的不足……这个过程持续进行,直到整个训练集能被模型正确预测为止。
历史上第一个成功将多个弱分类器组合成单个强分类器的提升算法,叫做 AdaBoost(自适应增强)。它最初主要用于解决分类问题,例如二元分类。
Boosting算法的步骤
一套标准的Boosting算法通常遵循以下几个重要步骤:
1. 准备一个包含不同数据点的数据集,并完成初始化。
2. 为每一个数据点分配相同的权重。
3. 将这些权重作为输入,让模型开始学习。
4. 找出那些被模型错误分类的数据点。
5. 提高这些错误分类数据点的权重,让后续模型更关注它们。
6. 如果预测结果已足够好,就停止迭代;否则,回到步骤2和3,继续优化。
举个例子:
假设我们手里有三个不同的模型,它们的预测思路完全不同。例如,线性回归模型擅长捕捉数据中的线性关系,而决策树模型则更擅长应对非线性关系。如下图所示。

如果我们不单独使用这些模型,而是将它们串联起来或组合在一起,结果会怎样?最终我们将得到一个融合了所有基础模型正确信息的强模型。换句话说,用这些模型的平均预测来代替单个模型的预测,往往能从数据中挖掘出更多有价值的信息。这就是集成学习的思想,而Boosting正是基于这种集成方法演变而来的。
机器学习中的主要Boosting算法
在机器学习领域,主流的Boosting算法主要有四种:
- 梯度提升机(GBM)
- 极限梯度提升机(XGBM)
- 轻型GBM(Light GBM)
- Catboost
机器学习中的GBM是什么?
梯度提升机(GBM)是机器学习中最受欢迎的前向学习集成方法之一,绝对是处理回归和分类任务的利器。
GBM的核心,是生成一个由多个弱预测模型(例如决策树)组成的集合。当决策树被选为弱学习器时,这种算法就称为梯度提升树。
它的优势在于,能够将来自不同模型的预测结果巧妙结合起来,最终构建出一个预测更准确的模型。
但这里可能有一个疑问:既然使用的是同一种算法,多个决策树为什么能比单个决策树表现更好?而且,每棵决策树又是如何从同一份数据中捕捉到不同信息的呢?

答案其实并不复杂。每棵树在节点分裂时,都会使用不同的特征子集来寻找最佳分割点。这意味着每棵树的行为路径各不相同,自然能从相同的数据中捕获到不同的信号。
GBM是如何运作的?
一般来说,大多数监督学习算法都依赖单一的预测模型,比如线性回归、惩罚回归模型或决策树。但也有部分监督算法,会通过集成的方式把多个模型组合起来。换句话说,当多个基础模型各自贡献预测结果时,这些预测的平均值会通过提升算法不断进行调整优化。
一个完整的梯度提升机,主要由三个核心要素构成:
- 损失函数
- 弱学习器
- 加法模型
我们依次细看这三个要素。
1. 损失函数
机器学习里的损失函数种类繁多,选择哪一个取决于要解决的任务类型。选择损失函数时,需要考虑其对条件分布的鲁棒性等具体需求。在实际应用中,我们必须指定损失函数,以及计算对应负梯度的函数。一旦这两个要素确定,就可以很方便地嵌入到梯度提升机中。当然,针对GBM,业界也已经提出了不少专门设计的损失函数。
损失函数的分类
根据响应变量y的类型,损失函数可以分成以下几类:
连续响应,y ∈ R:
- 高斯 L2 损失函数
- 拉普拉斯 L1 损失函数
- 指定δ的Huber损失函数
- 指定α的分位数损失函数
分类响应,y ∈ {0, 1}:
- 二项式损失函数
- Adaboost 损失函数
其他响应变量系列:
- 生存模型的损失函数
- 计数数据的损失函数
- 自定义损失函数
2. 弱学习器
弱学习器是基础学习器模型,它的特点是能从过去的错误中学习,并帮助构建出更强大的预测模型,这正是Boosting算法的精髓。在增强算法中,决策树通常扮演着弱学习器的角色。
Boosting本质上就是一个持续改进基础模型输出的框架。许多梯度提升的应用都允许你“插入”不同类型的弱学习器。而决策树,凭借其灵活性,成了最常用的弱学习器选择。
如何训练弱学习器:
机器学习模型会用训练数据集来训练基础学习器。训练的核心是,让后续的学习器特别关注前一个学习器出错最多或残差最大的那部分数据,从而提升整体性能。举个例子,一棵浅层决策树(比如只包含少量分裂)通常就被视为弱学习器。在Boosting算法中,分裂数不超过6的树非常常见。
下面这个序列展示了如何训练弱学习器来提升性能,其中每一棵树都与上一棵树的残差相关联。新引入的每一棵树,目标都是从前一棵树的错误中学习:
1. 考虑一个数据集,并在其中拟合第一棵决策树:F1(x)=y
2. 用前一棵树的最大误差来拟合下一棵决策树:h1(x)=y?F1(x)
3. 将新树添加到算法中:F2(x)=F1(x)+h1(x)
4. 再次将下一个决策树与前一棵树的残差拟合:h2(x)=y?F2(x)
5. 重复之前的操作:F3(x)=F2(x)+h2(x)
6. 如此反复,直到通过某种机制(比如交叉验证)告诉我们该停止了。
最终的模型,就是由b棵独立的树组成的阶段性加性模型:
f(x) = Σ (from b=1 to B) fb(x)
因此,这些树是贪婪地一步步构建的,根据基尼系数等纯度分数来选择最佳分割点,目标就是最小化损失。
3. 加法模型
加法模型,说白了就是“往模型里一棵接一棵地加树”。但这里有个讲究:不能一次加多棵,必须一棵一棵加,而且每加一棵新树,都不能改变模型中已有的树。这也是一种通过添加树来执行梯度下降法、从而减少损失的策略。
过去几年,梯度下降法主要被用来最小化神经网络中的参数(比如回归方程的系数和权重)。算出误差或损失后,通过调整权重来最小化误差。但最近,不少机器学习专家更倾向于用弱学习器(比如决策树)来替代这些参数。具体来说,就是往模型里添加一棵树来减少误差、提升性能。新加进来的树的预测,会和现有树系列的预测结合起来,得到最终的结果。这个过程会一直持续下去,直到损失降到可接受的范围,或者模型性能无法再提升为止。
这个方法,也被称为函数梯度下降。
极限梯度提升机 (XGBM)
XGBM 是梯度提升机的一个新版本,工作原理和GBM非常相似。在XGBM中,树也是按顺序一棵一棵添加的,每棵新树都会从之前树的错误中学习和改进。虽然XGBM和GBM在外观上感觉很像,但它们之间还是存在一些关键区别:
- XGBM使用了多种正则化技术来减少欠拟合或过拟合,这通常能获得比GBM更好的模型性能。
- XGBM在每个节点上都采用了并行处理,而GBM不可以,这使得XGBM比GBM快得多。
- XGBM能自动处理缺失值,我们不需要手动进行插补。它会自行判断这些缺失值应该落在左节点还是右节点。
光梯度提升机(Light GBM)
Light GBM 可以看作是梯度提升机的升级版,以高效率和高速度著称。和GBM、XGBM不同,它能毫无压力地处理海量数据。但另一方面,它不太适合数据点数量较少的情况。
一个重要的区别是:Light GBM倾向于让树节点按叶子方向生长,而不是按水平方向。在Light GBM中,主节点先分裂成两个辅助节点,然后系统会选择一个损失更高的辅助节点进行进一步分裂。

由于采用了这种按叶子方向分裂的策略,在处理大规模数据时,光梯度提升机(LGBM)算法往往能表现出比其它算法更优的性能。
CATBOOST
Catboost 算法主要被设计用来处理数据集中的分类特征。GBM、XGBM和Light GBM主要擅长处理数值型数据,而Catboost则专门用来把分类变量转化为数值型数据。因此,Catboost包含一个重要的预处理步骤,能将分类特征转化为数值变量,这是其他算法不具备的。
Boosting算法的优点
- Boosting算法遵循集成学习原则,这让它往往能给出极其准确的预测,冠绝群雄。
- 它非常灵活,可以优化不同的损失函数,并提供多种超参数调整选项。
- 数据处理上比较省心,因为它既能处理数值变量也能处理分类变量。
- 能够自动处理数据集中的缺失值,无需手动插补。
Boosting算法的缺点
- 提升算法可能会导致过拟合,并且对异常值非常敏感。
- 梯度提升算法持续专注于最小化误差,而且需要多棵树协同工作,所以计算成本很高。
- 这是一种比较耗时且消耗内存的算法。
- 虽然可以用各种工具解决,但本质上它的可解释性较差。
结论
通过以上梳理,我们基本上掌握了机器学习中用于预测建模的Boosting算法。我们还讨论了ML中几种重要的Boosting算法,包括GBM、XGBM、Light GBM和Catboost。此外,我们也深入了解了GBM的各个核心组件(损失函数、弱学习器和加性模型)以及它们是如何协同工作的。最后,我们也看到了Boosting算法在现实场景中应用的优势和潜在挑战。
