AdaBoost 算法 是一种经典的集成学习算法,它将多个弱分类器集成起来,以达到较高的分类准确率,广泛应用于数据分类、人脸检测等应用中。尤其在人脸检测方面,AdaBoost 是非常经典、成功的一个算法。弱分类器被线性组合成为一个强分类器。
一、面临两个问题:
- 在每一轮,如何改变训练数据的概率分布或者权值分布。
- 如何将弱分类器组合成强分类器。
二、AdaBoost 的思路:
- 提高那些被前一轮弱分类器错误分类样本的权值,降低那些被正确分类的样本的权值。
- 采用加权多数表决。具体的,加大分类错误率低的分类器的权值,使其在表决中起较大作用,减少分类误差率大的弱分类器的权值,使其在表决中起较小作用。
三、训练目标:
最小化指数损失函数。
四、三部分组成:
- 初始化训练数据的权值分布。如果有N个样本,则每一个训练样本最开始时都被赋予相同的权值:1/N。
- 训练弱分类器。具体训练过程中,如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它的权值就被降低;相反,如果某个样本点没有被准确地分类,那么它的权值就得到提高。然后,权值更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。
- 将各个训练得到的弱分类器组合成强分类器。各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最终的分类函数中起着较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用。换言之,误差率低的弱分类器在最终分类器中占的权重较大,否则较小。
五、具体步骤:
输人参数:e是预测误差,m 是需要构建的单决策器的个数,如:
if(x < 3 )
y ﹦1
else
y =-1
就是一个简单的单决策器,基于x 预测y。α是每个单决策器的不同权重。n 是数据集中点的个数。
W = [ 1/n,1/n,…,1/n ] # W是一个数组,表示每个数据点的权重,初始相同
C = {}; # C 是一个集合,存放每次循环得到的最佳单决策器
For i = 1 : m
1) 在当前的权重W 下,尝试各种不同的单决策器,直到找到预测误差最小的那个单决策器Hi(针对所有数据),使得误分的数据点的权重之和最小。对Hi预测错误的数据点,计算这些点的权重之和εi;
2) C ﹦C 与 Hi 的并集;
3) 计算分类器的权重αi, αi = 1/2 *log((1-εi + /εi) ;
4) 更新W 数组,
w_right = exp( - αi) ,w_wrong = exp( αi) ; # exp 是自然对数
预测正确的数据点,原始权重乘以w_right;
预测错误的数据点,原始权重乘以w_rong;
5) W = W/sum(W) ; # 规范化W,规范化之后,使各元素之和为1
6) 对C 中保留的所有分类器,集成决策器为:H_all = α1 * H1 + …αi* Hi
7)使用H_all对所有数据点再次预测,如果 H_a11 预测的误差e为0 或小于某个阈值,终止 for 循环;否则继续 for 循环。
六、AdaBoost的优缺点
1、AdaBoost算法优点
- 在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活。
- AdaBoost具有很高的精度,训练误差以指数速率下降。
- 相对于bagging算法和Random Forest算法,AdaBoost充分考虑的每个分类器的权重。
2、Adaboost算法缺点
- AdaBoost迭代次数也就是弱分类器数目不太好设定,可以使用交叉验证来进行确定。
- 数据不平衡导致分类精度下降。
- 训练比较耗时,每次重新选择当前分类器最好切分点。
- 对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。
3、AdaBoost应用领域
- 模式识别、计算机视觉领域,用于二分类和多分类场景
参考: