【集成模型】Boosting

0 - 思想

  Bagging算法思想是减少预测方差(variance),Boosting算法思想是为了减少预测偏差(bias)。

  Boosting算法思想是将“弱学习算法”提升为“强学习算法”。一般来说,弱学习算法容易找到,而后通过反复学习得到一系列弱分类器,再通过加权将他们组合起来得到一个强分类器。

  Boosting算法主要有两个核心概念:加法模型和前向分步算法。

  加法模型即是将一系列弱分类器线性相加组成强分类器的过程,有如下形式

$$F_M(x;P)=\sum_{m=1}^n\beta_m h_m(x;a_m),$$

其中$h(x;a_m)$表示第$m$个弱分类器,$a_m$对应该弱分类器的最优参数,$\beta_m$表示该分类器在强分类器中所占比重,$P$是所有$a_m$和$\beta_m$的组合。

  前向分步指的是在训练过程中,下一轮迭代产生的分类器是在上一轮的基础上训练得到的(顺序依次进行训练,sequentially),可以表达为

$$F_m(x)=F_{m-1}(x)+\beta_m h_m(x;a_m).$$

  不同的Boosting算法具有不同的损失函数,常用的AdaBoost是损失函数为指数损失的Boosting算法。

1 - AbaBoost

1.0 - 特点

  • 在每一轮迭代中,AdaBoost改变了训练数据的权值(即改变了样本的概率分布),其目标是为了将关注点放在被错误分类的样本上。具体做法为:减少上一轮被正确分类的样本权值,增加上一轮被错误分类的样本权值。综合起来来说,就是每一轮迭代的弱分类器学习的侧重点是不一样的。
  • AdaBoost采用加权多数表决方法,即加大分类误差小的弱分类器的权重,降低分类误差大的弱分类器的权重。

1.1 - 算法

  输入:训练集$D=\{(x_1,y_1),(x_2,y_2),\cdots,(x_m,y_m)\}$,基础学习算法$\varsigma$,迭代次数$T$,误差终止条件

  输出:$H(x)=sign\left (\sum_{t=1}^{T}\alpha_t h_t(x)\right )$

  • $\omega_1(x)=1/m$(初始化权重分布)
  • for $t=1,\cdots,T$
  •   $h_t=\varsigma(D,\omega_t)$ (以数据集$D$和权重分布$\omega_t$训练弱分类器$h_t$)
  •   $\epsilon_t=P_{x\sim \omega_t}(h_t(x)\neq f(x))$ (衡量弱分类器$h_t$的误差)
  •        if $\epsilon_t$满足误差终止条件 then break
  •        $\alpha_t=\frac{1}{2}ln\left ( \frac{1-\epsilon_t}{\epsilon_t} \right )$ (计算弱分类器$h_t$在最终强分类器中的权重)
  •        $\omega_{t+1}(x)=\frac{\omega_t(x)}{Z_t}\times\left\{\begin{matrix} exp(-\alpha_t)\ if\ h_t(x)=f(x)\\exp(\alpha_t)\ if\ h_t(x)\neq f(x) \end{matrix}\right.=\frac{\omega_t(x)exp(-\alpha_t f(x)h_t(x))}{Z_t}$(更新权重分布,其中$Z_t$是归一化因子)
  • end

2 - 总结

  • Boosting是一种按序构造的加模型
  • AdaBoot是用指数损失作为损失函数的Boosting算法
  • 采用基础回归模型并用梯度下降法来优化log损失的方法:LogitBoost
  • 其他的变种:L2Boost或者其他更一般的Gradient Boosting(functional gradient descent)

3 - 参考资料

https://www.cnblogs.com/ScorpioLu/p/8295990.html

posted @ 2019-10-28 21:17  CZiFan  阅读(625)  评论(0编辑  收藏  举报