集成学习 系列一 ——AdaBoost

2019-04-29  本文已影响0人  7NIC7

    看了好多天的adaboost,来这里记录一下。

集成学习

    集成学习还是非常广泛的,它并不是具体的某种方法,你可以把这个词当做一种思想——三个臭皮匠顶个诸葛亮,总的来说,就是将一些并不是很厉害的弱分类器集合在一起,可能会有意想不到的效果。
    如果你是在比赛, 到了某个瓶颈的时候,不妨试一下集成学习。这篇只会涉及到adaboost,之后会相继的写其他的集成学习方法,bagging、blending等等。

AdaBoost

    adaboost其实只是boosting家族中的一种,不过在使用中效果很好,且思想简单,也是最经典的一个boosting方法。
    先对adaboost算法的思想简单介绍下,再摆算法。adaboost试图对一个稍弱的分类器h_t不断的优化继而得到一个强大的分类器G,最后得到的分类器是前面一系列弱分类器的加权平均,那么算法是怎么使得弱分类器在每轮中产生的不一样呢?那就是对样本的权重进行不断更新,更新原则就是减小前面分类器已经分类正确的样本权重,增大分类器分类错误的样本权重。

算法如下:
在每次迭代时需要计算
1.加权的错误率\epsilon。这里做了标准化。

2.计算每个分类器的权重alpha
如何推导呢?西瓜书是用的指数损失函数推导出来的。如下:
\begin{align*} min\ exploss &= arg\min_{h_t} E e^{-\alpha h_t y} \\ &= arg\min_{h_t} e^{-\alpha}P(h_t = y) + e^{\alpha}P(h_t \neq y) \\ &= arg\min_{h_t} e^{-\alpha}(1-\epsilon)+ e^{\alpha}\epsilon \end{align*}
对其求导,并让导数为0.
\begin{align*} &\frac{\partial exploss }{\partial \alpha} = 0 \\ =>\ &\alpha = \frac{1}{2}log\frac{1-\epsilon}{\epsilon} \end{align*}
\epsilon=1/2时,\alpha=0,这个分类器没啥用啊(瞎猜也有0.5的概率猜对呢),直接剔除掉;当\epsilon<1/2时,\alpha是正的,且\epsilon -> 0,则\alpha -> \infty;当\epsilon>1/2时,错误率大于0.5,岂不是连瞎猜还不如,那这个分类器还有什么用吗?因为这个是二分类的问题,我们对这个结果取个负号,这样得到的错误率依然是小于0.5的,再看这个\alpha值,是不是正好是负的?

3.更新每个样本的权重w,这也是adaboost最精华的部分。
采用的策略就是在算法思想中说的那样:
\begin{align*} w_{t+1} = \begin{cases} & w_t \sqrt{\frac{1-\epsilon}{\epsilon}} \ \ \ ,分类错误\\ & w_t / \sqrt{\frac{1-\epsilon}{\epsilon}}\ ,分类正确 \end{cases} \end{align*}

上一篇 下一篇

猜你喜欢

热点阅读