前言
在我们学习AdaBoost算法之前我们可以先来了解一下起源,增加一下学习兴趣。
boost 算法系列的起源来自于PAC Learnability(PAC 可学习性)。这套理论主要研究的是什么时候一个问题是可被学习的,当然也会探讨针对可学习的问题的具体的学习算法。这套理论是由Valiant提出来的,也因此(还有其他贡献哈)他获得了2010年的图灵奖。同时 ,Valiant和 Kearns首次提出了 PAC学习模型中弱学习算法和强学习算法的等价性问题,即任意给定仅比随机猜测略好的弱学习算法 ,是否可以将其提升为强学习算法 ? 如果二者等价 ,那么只需找到一个比随机猜测略好的弱学习算法就可以将其提升为强学习算法 ,而不必寻找很难获得的强学习算法。 也就是这种猜测,让无数牛人去设计算法来验证PAC理论的正确性。
不过很长一段时间都没有一个切实可行的办法来实现这个理想。细节决定成败,再好的理论也需要有效的算法来执行。终于功夫不负有心人, Schapire在1996年提出一个有效的算法真正实现了这个夙愿,它的名字叫AdaBoost。AdaBoost把多个不同的决策树用一种非随机的方式组合起来,表现出惊人的性能!第一,把决策树的准确率大大提高,可以与SVM媲美。第二,速度快,且基本不用调参数。第三,几乎不Overfitting(过拟合)。我估计当时Breiman和Friedman肯定高兴坏了,因为眼看着他们提出的CART正在被SVM比下去的时候,AdaBoost让决策树起死回生!Breiman情不自禁地在他的论文里赞扬AdaBoost是最好的现货方法(off-the-shelf,即“拿下了就可以用”的意思)。(这段话摘自统计学习那些事)(摘自浅谈 Adaboost 算法)
在了解到了起源后我们先看一张图
通过个体学习器存在强依赖关系,必须串行序列化,代表是Boosting。
不存在强依赖关系,并行序列化,代表是Bagging、随机森林。
什么是集成学习?
将多个个体学习器通过一定的模块,最后输出。个体学习器通常是一些现有的学习算法从训练数据中产生,例如决策树、神经网络算法,通过这些弱分类器得到最终的强分类结果。AdaBoost算法理论
训练数据样本每一个样本,并赋予一个权重,这些权重构成了向量D。一开始,这些权重都初始化均分。首先在训练数据上训练出一个弱分类器(在二分类情况下错误率高于50%)并计算该分类器的错误率,然后在同一数据集上再次训练弱分类器。第二次训练中调整每个样本的权重值(也就是下文中的D),其中第一次分错的样本权重会增加,分对了的样本权重会减少。最后通过与权重值alpha相乘之和的到预测结果。
给定一个训练数据集T={(x1,y1),
(x2,y2)…(xN,yN)},yi属于标记集合{-1,+1}。首先,初始化训练数据的权值分布。每一个训练样本最开始时都被赋予相同的权重:1/N。D1=(w11,w12,...,w1N)
w1i=1N
i=1,2,...,N进行多轮迭代,用m = 1,2, …, M表示迭代的第多少轮,使用