基于自适应提升的回归算法:AdaBoost.R2的原理与误差加权过程
我将为你讲解AdaBoost算法在回归问题上的一个经典变体:AdaBoost.R2。这个算法扩展了AdaBoost的核心思想,将其从分类任务推广到回归任务,通过迭代加权的方式提升回归模型的性能。
1. 问题描述
AdaBoost(Adaptive Boosting)最初是为二分类问题设计的,但其核心的“自适应加权”思想可以应用于回归。AdaBoost.R2正是这样一个推广。它需要解决以下核心问题:
给定一个回归训练数据集 \(D = \{(\mathbf{x}_1, y_1), (\mathbf{x}_2, y_2), ..., (\mathbf{x}_N, y_N)\}\),其中 \(y_i \in \mathbb{R}\) 是连续值标签。目标是训练一个由多个“弱”回归器(例如深度很小的决策树,或称“树桩”)组成的集成模型 \(F(\mathbf{x})\)。这个集成模型通过迭代的方式,使得在每一轮迭代中,新加入的弱回归器能够更加专注于训练集中那些先前模型预测误差较大的样本,从而降低整体的预测损失。
AdaBoost.R2算法的关键创新在于:如何将分类中的“误分类权重增加”思想,转化为回归中的“大误差样本权重增加”思想,并据此更新样本的权重分布,以及如何将所有弱回归器的预测结果进行组合。
2. 核心概念与符号定义
在深入步骤之前,我们先明确几个关键概念:
- 弱回归器:在每一轮迭代 \(t\) 中训练的基模型,记为 \(f_t(\mathbf{x})\)。它的性能仅需略好于随机猜测(例如,其误差小于0.5,具体定义见后文)。通常使用深度限制的回归树。
- 样本权重:每个训练样本 \(i\) 在第 \(t\) 轮迭代时有一个权重 \(w_i^{(t)}\)。所有权重初始化为相等,并在每轮迭代后根据预测误差进行调整。权重分布反映了算法对样本的“关注程度”。
- 损失/误差函数:用于衡量单个样本预测值与真实值差异的函数。AdaBoost.R2使用一种相对损失。
- 集成模型:最终的强回归器是所有弱回归器的加权中位数(不是简单平均)。
3. 算法步骤详解
步骤1:初始化权重与迭代准备
- 初始化每个训练样本的权重:\(w_i^{(1)} = \frac{1}{N}\), 对于 \(i = 1, 2, ..., N\)。这代表初始时所有样本同等重要。
- 设置最大迭代次数 \(T\),即要训练的弱回归器个数。
- 初始化集成模型为空。
步骤2:迭代训练弱回归器(循环 t = 1 到 T)
步骤2.1:根据权重分布训练弱回归器
- 使用当前样本权重分布 \(\{w_i^{(t)}\}\) 训练一个弱回归器 \(f_t(\mathbf{x})\)。在决策树这类可以处理样本权重的模型中,权重高的样本在计算分裂标准(如加权均方误差)时会被赋予更高的重要性。
- 这个步骤的本质是让当前模型 \(f_t\) 更“聚焦”于权重高的样本,也就是上一轮集成模型预测不好的样本。
步骤2.2:计算所有样本的“相对损失”
- 对于每个样本 \(i\),计算其绝对误差:
\[ L_i = |y_i - f_t(\mathbf{x}_i)| \]
- 为了将损失归一化到[0, 1]区间,需要计算一个“最大误差” \(D_t\) 作为参考基准。通常有三种计算方式:
- 线性: \(D_t = \max_i L_i\)(所有样本中的最大绝对误差)。
- 平方: \(D_t = \max_i L_i^2\)。
- 指数: \(D_t\) 被定义为使后续计算的损失函数具有某些性质的量,但通常也取最大误差。
- 然后,计算每个样本的相对损失:
\[ \bar{L}_i = \frac{L_i}{D_t} \]
显然, \(\bar{L}_i \in [0, 1]\)。\(\bar{L}_i\) 越大,表示该样本被当前弱回归器预测得越差。
步骤2.3:计算本轮弱回归器的“平均损失”
- 计算加权平均损失 \(\bar{L}_t\):
\[ \bar{L}_t = \sum_{i=1}^{N} w_i^{(t)} \bar{L}_i \]
- 这个 \(\bar{L}_t\) 度量了弱回归器 \(f_t\) 在加权样本上的整体表现。注意,这里我们希望 \(\bar{L}_t < 0.5\),这类似于分类中要求弱分类器准确率大于50%。如果 \(\bar{L}_t \ge 0.5\),通常需要丢弃当前弱回归器或调整参数。
步骤2.4:计算当前弱回归器的“置信度”或“权重” \(\beta_t\)
- 这是一个关键的转换步骤。我们定义:
\[ \beta_t = \frac{\bar{L}_t}{1 - \bar{L}_t} \]
- 观察其性质:如果 \(\bar{L}_t < 0.5\),则 \(\beta_t < 1\)。并且,\(\bar{L}_t\) 越小(弱回归器性能越好),\(\beta_t\) 越小(接近0)。性能差的弱回归器对应的 \(\beta_t\) 接近1。\(\beta_t\) 将用于后续的样本权重更新和模型集成。
步骤2.5:更新样本权重分布
- 这是实现“自适应”的关键。权重更新公式为:
\[ w_i^{(t+1)} = w_i^{(t)} \cdot \beta_t^{1 - \bar{L}_i} \]
- 让我们仔细分析这个公式:
- 指数部分 \(1 - \bar{L}_i\)。如果样本 \(i\) 的损失 \(\bar{L}_i\) 很大(接近1),那么 \(1 - \bar{L}_i\) 就很小(接近0)。反之,如果预测很准(\(\bar{L}_i\) 接近0),则 \(1 - \bar{L}_i\) 接近1。
- 因为 \(\beta_t < 1\),所以 \(\beta_t^{1 - \bar{L}_i}\) 是一个介于 \(\beta_t\) 和 \(1\) 之间的数。
- 核心逻辑:对于本轮预测误差大的样本(\(\bar{L}_i\) 大),其 \(1 - \bar{L}_i\) 小,所以 \(\beta_t^{1 - \bar{L}_i}\) 接近1(因为任何小于1的数的0次方是1),权重几乎不变或增加得少?这里需要纠正:实际上,因为 \(\beta_t\) 小于1,其指数越小,值越大(例如,0.5^0.1 > 0.5^0.9)。所以,对于误差大的样本(指数小),乘子更大,权重相对增加得多。相反,对于预测得好的样本(\(\bar{L}_i\) 小,指数大),乘子 \(\beta_t^{1 - \bar{L}_i}\) 更小(更接近 \(\beta_t\)),权重被显著减小。
- 总结:预测误差越大的样本,其权重在下一轮会得到相对提升,从而迫使下一个弱回归器更加关注这些“难”样本。
- 更新后,需要对所有权重进行归一化,使其和为1:
\[ w_i^{(t+1)} \leftarrow \frac{w_i^{(t+1)}}{\sum_{j=1}^{N} w_j^{(t+1)}} \]
步骤3:组合所有弱回归器形成最终强回归器
- AdaBoost.R2不采用简单的加权平均,而是使用加权中位数,因为中位数对异常预测(来自某些性能很差的弱回归器)不敏感,更稳健。
- 对于一个新的输入 \(\mathbf{x}\),每个弱回归器 \(f_t\) 给出一个预测值。
- 将这些弱回归器按照其置信度 \(\ln(1/\beta_t)\)(与 \(\beta_t\) 负相关,\(\beta_t\) 越小,置信度越高)从高到低排序。
- 计算排序后各弱回归器对应的 \(\ln(1/\beta_t)\) 的累积和,找到累积和首次达到或超过总置信度一半的那个弱回归器。该弱回归器的预测值就是集成模型 \(F(\mathbf{x})\) 的最终输出。
- 直观理解:加权中位数相当于让高置信度(低 \(\beta_t\) )的弱回归器拥有更大的“投票权重”,最终输出是这些“加权投票”的中位数位置所对应的预测值。
4. 总结与特点
- 适应性:通过动态调整样本权重,AdaBoost.R2能够将学习重点集中在那些难以预测的样本上,这是其提升性能的核心。
- 健壮性:使用加权中位数而非平均进行集成,降低了性能较差的弱回归器(可能是噪声导致的)对最终结果的影响。
- 弱学习器要求:只要求每个弱回归器的加权平均损失 \(\bar{L}_t < 0.5\),这是一个比“优于随机猜测”更直观的、适用于回归的弱学习器条件。
- 流程闭环:从初始化权重 -> 训练弱回归器 -> 计算损失 -> 计算置信度 -> 更新权重 -> 集成,形成了一个完整的、自适应的迭代提升过程。
通过以上过程,AdaBoost.R2成功地将Boosting思想从分类迁移到回归,构建了一个强大的回归集成模型。