看了好多天的adaboost,来这里记录一下。
集成学习
集成学习还是非常广泛的,它并不是具体的某种方法,你可以把这个词当做一种思想——三个臭皮匠顶个诸葛亮,总的来说,就是将一些并不是很厉害的弱分类器集合在一起,可能会有意想不到的效果。
如果你是在比赛, 到了某个瓶颈的时候,不妨试一下集成学习。这篇只会涉及到adaboost,之后会相继的写其他的集成学习方法,bagging、blending等等。
AdaBoost
adaboost其实只是boosting家族中的一种,不过在使用中效果很好,且思想简单,也是最经典的一个boosting方法。
先对adaboost算法的思想简单介绍下,再摆算法。adaboost试图对一个稍弱的分类器不断的优化继而得到一个强大的分类器
,最后得到的分类器是前面一系列弱分类器的加权平均,那么算法是怎么使得弱分类器在每轮中产生的不一样呢?那就是对样本的权重进行不断更新,更新原则就是减小前面分类器已经分类正确的样本权重,增大分类器分类错误的样本权重。
算法如下:
在每次迭代时需要计算
1.加权的错误率。这里做了标准化。
2.计算每个分类器的权重。
如何推导呢?西瓜书是用的指数损失函数推导出来的。如下:
对其求导,并让导数为0.
当时,
,这个分类器没啥用啊(瞎猜也有0.5的概率猜对呢),直接剔除掉;当
时,
是正的,且
,则
;当
时,错误率大于0.5,岂不是连瞎猜还不如,那这个分类器还有什么用吗?因为这个是二分类的问题,我们对这个结果取个负号,这样得到的错误率依然是小于0.5的,再看这个
值,是不是正好是负的?
3.更新每个样本的权重,这也是adaboost最精华的部分。
采用的策略就是在算法思想中说的那样:
- 当然要是想看理论的推导可以继续参考西瓜书,仍然是用指数损失推导的,这里用另一种思路解释为什么权重变化要乘以或者除以这样一个系数?
解释:这样做的好处是,分类错误的样本权重之和和分类正确的样本权重之和是相等的,均为(权重经过标准化后),为什么呢?你可以这样理解,经过上一轮迭代后得到的分类器的错误率是
,那么错误分类的样本权重也就是
,相对的,正确分类的样本权重是
,那么经过权重更新后,正确和错误的样本权重均为
。
- 那么紧接着一个问题就是:为什么要调整错误与正确样本的权重相等呢?这样对于得到非常不一样的分类器
是有什么帮助吗?
可能是个不恰当的解释:这样调整了之后,相当于我们之前的分类器得到的就是和扔硬币一样的结果,正确和错误的概率是一样的,那么这轮训练我们就会得到一个与之前不一样的分类器,因为我们得到的结果会是一个分类错误率小于0.5的分类器。
————————————————————————————————
算法:
for m=1,....,M do:
stump = Generate_Stump(data, weight)
=
# Calculate error
# Calcualte the weight of the classifier
end for
————————————————————————————————
网友评论