当我们拥有了不同的分类算法后,能否将其结合起来组成一个更强的分类器,这就是元算法的思路。AdaBoost就是其中最流行的算法,它的特点如下:
- 优点:泛化错误率低,易编码,可以应用在大部分分类器上,无参数调整;
- 缺点:对离群点敏感
- 适用数据类型:数值型和标称性数据
- 强可学习:在PAC框架下,一个概念如果存在一个多项式的学习算法可以学习它,并且正确率很高,就称是强可学习的
- 弱可学习:在PAC框架下,一个概念如果存在一个多项式的学习算法可以学习它,但是学习的正确率仅仅比随机猜测要好一些,就称它是弱可学习的。 但是可以证明:强可学习和弱可学习在PAC框架下是等价的,即一个概念是强可学习的充分必要条件是这个概念是弱可学习的。
- Bagging:基于数据随机重抽样的分类器的构建方法,它从原始的数据集中进行S次的重抽样,每次都选取一个新的数据替换,得到的新的数据集将大小不改变,重复S次就会得到S的数据集;我们使用不同的算法作用的S个数据集上,就可以得到S个不同的分类器,我们选择分类器中投票最高的类作为我们最终的分类类别,常用的比如随机森林。
- boosting:是一种将弱学习器提升为强学习器的算法,它首先根据训练数据集来学习到一个基学习器,再根据基学习器中分类错误的数据对样本进行调整,下一次训练时更加关注上次分错的数据,训练再次得到一个学习器,直到到达指定的值T,这样就得到了T个学习器,将其进行加权结合,每个权重代表在上一轮中迭代的成功度。·
大多数的提升算法的思想都是改变训练数据的概率分布(训练数据的权值分布,即让下一次迭代的弱分类器知道分错哪些数据点影响更大),针对不同的训练数据分布调用弱学习算法学习一系列的弱分类器,然后将这些弱分类器结合起来,构成一个强分类器。
所以提升算法主要关注两个问题:
- 在训练的每一轮如何改变训练数据的权值分布
- 如何将一系列的弱学习器组合成一个强学习器
针对这两个问题,boosting中最著名的AdaBoost的做法是:
- 提高前一轮被弱分类器分错的数据的权值,而降低那些被正确分类的数据的权值
- 加权多数表决的方法:加大分类误差率小的弱分类器的权值,减小分类误差率大的弱分类器的权值
AdaBoost算法(adaptive boosting)算法描述
- 在第(1)步中所有数据的权重都是 1 n \frac{1}{n} n1,它表示模型认为所有的数据在一开始是同等重要的。
- 在(c)中的 α m \alpha_m αm表示分类器在最终的强分类器中的重要性, α m \alpha_m αm随着 e m e_m em的减小而增大,表示分类误差越小的分类器在最终的强分类器中作用越大。
- 当我们得到了多个不同的弱分类其及它们相应的权重后,最后将其进行线性组合构建强分类器。
Adaboost入门教程——最通俗易懂的原理介绍
集成学习之Adaboost算法原理小结
scikit-learn Adaboost类库使用小结