Boosting是一种通过组合弱学习器来产生强学习器的方法。

基本思想:

  1. 从训练样本中随机抽取子集,对第1个弱学习器进行训练,得到第1个基分类器。
  2. 使用所有训练样本测试第1个基分类器,标记预测错误的样本。
  3. 从训练样本中随机抽取子集,抽取时会针对上一次预测错误样本进行加权,让错误样本有更多机会被抽取到。
  4. 利用抽取的子集对第2个弱学习器进行训练,得到第2个基分类器。它和前面的基分类器组成基分类器集合。
  5. 使用所有的训练样本传递给基分类器集合,基分离器集合预测的结果中标记预测错误的样本。
  6. 继续第3~5步。有n个弱分类器,就重复n-2次。
  7. 最终基分类器集合加权投票后得到的组合模型就可以准确地分类所有的样本点。

※ Boosting算法可以看做是Bagging算法的改良版,它强调关注训练集中预测错误的样本。通过不同基分类器的联合来提升整体的预测准确率。

※ Boosting算法是一系列算法的统称,具体有代表性的经典有:AdaBoost、GBDT

B站从油管搬运并配上字幕Boosting原理介绍


Adaboost

AdaBoost,是英文”Adaptive Boosting“(自适应增强)的缩写,由Robert Schapire在1995年提出。 前一个弱分类器分错的样本的权值(样本对应的权重)会得到加强,权重更新后的样本再次被用来训练下一个新的弱分类器。在每轮训练中,用总体(样本总体)训练新的弱分类器,产生新的样本权重。每个弱分类器的权重,会一直迭代,直到达到预定的错误率或达到指定的最大迭代次数。

Robert Schapire

Robert Schapire

Untitled

https://www.cs.princeton.edu/~schapire/papers/explaining-adaboost.pdf

算法流程

  1. 数据描述为一系列的$x$和$y$,$x$属于$X$样本集合,$y$的取值是-1和+1。

    $(x_1, y_1),...,(x_m, y_m)$ 其中 $x_i ∈ X , y_i ∈ {−1,+1}.$

  2. 初始化训练数据的权重分布。每个样本的初始化权重$w=1/m$。(m为样本总数)

    $D_1(i) = 1/m$ $i ∈ 1,...,m$

  3. 进行多次迭代,t=1,2….T。T表示迭代次数。

    $t = 1,...,T$

  4. 计算弱分类器的权重$α_t$,表示弱分类器在最终分类器中的重要程度。其中 $ε_t$ 就是为上步中的$ε_t$(误差函数的值)

    $α_t =\frac{1}{2}ln(\frac{1−ε_t}{ε_t})$

  5. 更新 $i = 1,...,m$ 每个样本的权重,得到下一个训练数据集$D_{t+1}$

    $D_{t+1}(i) = \frac{D_t(i)exp(-\alpha_ty_ih_t(x_i))}{Z_t}$

    其中 $Z_t$ 是一个归一化因子(选择它是为了使 $D_{t+1}$ 成为一个分布)。

  6. 组合弱学习器,输出最终强学习器组合$H(x)$

    $H(x) = sign(\sum_{t=1}^{T}\alpha_th_t(x))$

    $sign$ 函数用于求数值的正负。数值大于0,为1。小于0,为-1.等于0