一、AdaBoost简介
1.AdaBoost是什么?
AdaBoost,是英文"Adaptive Boosting"(自适应增强)的缩写,由Yoav Freund和Robert Schapire在1995年提出。它的自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。
Adaboost算法基本原理就是将多个弱分类器(弱分类器一般选用单层决策树)进行合理的结合,使其成为一个强分类器。
2.AdaBoost算法可以简述为三个步骤:
(1)首先,是初始化训练数据的权值分布D1。假设有N个训练样本数据,则每一个训练样本最开始时,都被赋予相同的权值:w1=1/N。
(2)然后,训练弱分类器hi。具体训练过程中是:如果某个训练样本点,被弱分类器 h i h_i hi准确地分类,那么在构造下一个训练集中,它对应的权值要减小;相反,如果某个训练样本点被错误分类,那么它的权值就应该增大。权值更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。
(3)最后,将各个训练得到的弱分类器组合成一个强分类器。各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最终的分类函数中起着较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用。换言之,误差率低的弱分类器在最终分类器中占的权重较大,否则较小。
二、AdaBoost算法过程
给定一个训练数据集 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) … ( x N , y N ) T={(x_1,y_1), (x_2,y_2)…(x_N,y_N)} T=(x1,y1),(x2,y2)…(xN,yN),其中实例 x ∈ χ x∈χ x∈χ,而实例空间, y i y_i yi属于标记集合{-1,+1},Adaboost的目的就是从训练数据中学习一系列弱分类器或基本分类器,然后将这些弱分类器组合成一个强分类器。
AdaBoost的算法流程如下:
- 步骤1. 首先,初始化训练数据的权值分布。每一个训练样本最开始时都被赋予相同的权值:1/N。
- 步骤2. 进行多轮迭代,用m = 1,2, …, M表示迭代的第多少轮
(1)使用具有权值分布Dm的训练数据集学习,得到基本分类器(选取让误差率最低的阈值来设计基本分类器):
(2) 计算Gm(x)在训练数据集上的分类误差率
注: 由上述式子可知, G m ( x ) G_m(x) Gm(x)在训练数据集上的误差率 e m e_m em就是被 G m ( x ) G_m(x) Gm(x)误分类样本的权值之和
(3)计算 G m ( x ) G_m(x) Gm(x)的系数, a m a_m am表示 G m ( x ) G_m(x) Gm(x)在最终分类器中的重要程度(目的:得到基本分类器在最终分类器中所占的权重。注:这个公式 写成 α m = 1 / 2 l n ( ( 1 − e m ) / e m α_m = 1/2ln((1 - e_m)/e_m αm=1/2ln((1−em)/em 更准确,因为底数是自然对数e,故用In, 写成log容易让人误以为底数是2或别的底数,下同):
注: 由上述式子可知, e m < = 1 / 2 e_m <= 1/2 em<=1/2时, a m > = 0 a_m >= 0 am>=0,且 a m a_m am随着 e m e_m em的减小而增大,意味着分类误差率越小的基本分类器在最终分类器中的作用越大。
(4)更新训练数据集的权值分布(目的:得到样本的新的权值分布),用于下一轮迭代
注: 使得被基本分类器
G
m
(
x
)
G_m(x)
Gm(x)误分类样本的权值增大,而被正确分类样本的权值减小。就这样,通过这样的方式,AdaBoost方法能“重点关注”或“聚焦于”那些较难分的样本上。
其中,
Z
m
Z_m
Zm是规范化因子,使得
D
m
+
1
D_m+_1
Dm+1成为一个概率分布:
- 步骤3. 组合各个弱分类器
从而得到最终分类器,如下:
三、AdaBoost实例讲解
注:博主有点懒,所以鉴于案例分析有点长,此次借用网上一篇博主的博客,附截图如下。如果有不明白的,可以在下面留言。
例:给定如图所示的训练样本,弱分类器采用平行于坐标轴的直线,用Adaboost算法的实现强分类过程。
数据分析:
将这10个样本作为训练数据,根据 X 和Y 的对应关系,可把这10个数据分为两类,图中用“+”表示类别1,用“O”表示类别-1。本例使用水平或者垂直的直线作为分类器,图中已经给出了三个弱分类器,即:
初始化:
首先需要初始化训练样本数据的权值分布,每一个训练样本最开始时都被赋予相同的权值: w i = 1 / N w_i=1/N wi=1/N,这样训练样本集的初始权值分布 D 1 ( i ) D_1(i) D1(i):
令每个权值 w 1 i = 1 / N = 0.1 w_1i = 1/N = 0.1 w1i=1/N=0.1,其中,N = 10,i = 1,2, …, 10,然后分别对于t= 1,2,3, …等值进行迭代(t表示迭代次数,表示第t轮),下表已经给出训练样本的权值分布情况:
第1次迭代t=1:
初试的权值分布 D 1 D_1 D1为1/N(10个数据,每个数据的权值皆初始化为0.1)
D 1 D_1 D1 =[0.1, 0.1, 0.1, 0.1, 0.1, 0.1,0.1, 0.1, 0.1, 0.1]
- 在权值分布 D 1 D_1 D1的情况下,取已知的三个弱分类器h1、h2和h3中误差率最小的分类器作为第1个基本分类器H1(x)(三个弱分类器的误差率都是0.3,那就取第1个吧)
- 可见 被误分类样本的权值之和影响误差率e,误差率e影响基本分类器在最终分类器中所占的权重α。
- 然后, 更新训练样本数据的权值分布,用于下一轮迭代,对于正确分类的训练样本“1 2 3 4 6 9 10”(共7个)的权值更新为:
- 这样, 第1轮迭代后,最后得到各个样本数据新的权值分布:
D 2 D_2 D2=[1/14,1/14,1/14,1/14,1/6,1/14,1/6,1/6,1/14,1/14]
由于样本数据 “5 7 8” 被 H 1 ( x ) H_1(x) H1(x) 分错了,所以它们的权值由之前的0.1增大到1/6;反之,其它数据皆被分正确,所以它们的权值皆由之前的0.1减小到1/14,下表给出了权值分布的变换情况:
可得分类函数: f 1 ( x ) = α 1 H 1 ( x ) = 0.4236 H 1 ( x ) f_1(x)= α_1H_1(x) = 0.4236H_1(x) f1(x)=α1H1(x)=0.4236H1(x)。此时,组合一个基本分类器 s i g n ( f 1 ( x ) ) sign(f_1(x)) sign(f1(x))作为强分类器在训练数据集上有3个误分类点(即5 7 8),此时强分类器的训练错误为:0.3
第二次迭代t=2:
在权值分布 D 2 D_2 D2的情况下,再取三个弱分类器 h 1 h_1 h1、 h 2 h_2 h2和 h 3 h_3 h3中误差率最小的分类器作为第2个基本分类器 H 2 ( x ) H_2(x) H2(x):
①当取弱分类器 h1=X1=2.5时,此时被错分的样本点为“5 7 8”:
误差率e=1/6+1/6+1/6=3/6=1/2;
② 当取弱分类器h2=X1=8.5时,此时被错分的样本点为“3 4 6”:
误差率e=1/14+1/14+1/14=3/14;
③ 当取弱分类器h3=X2=6.5时,此时被错分的样本点为“1 2 9”:
误差率e=1/14+1/14+1/14=3/14;
- 因此,取当前最小的分类器 h 2 h_2 h2作为第2个基本分类器 H 2 ( x ) H_2(x) H2(x)
- 显然,
H
2
(
x
)
H_2(x)
H2(x)把样本“3 4 6”分错了,根据
D
2
D_2
D2可知它们的权值为
D
2
(
3
)
=
1
/
14
D_2(3)=1/14
D2(3)=1/14,
D
2
(
4
)
=
1
/
14
D_2(4)=1/14
D2(4)=1/14,
D 2 ( 6 ) = 1 / 14 D_2(6)=1/14 D2(6)=1/14,所以 H 2 ( x ) H_2(x) H2(x)在训练数据集上的误差率:
- 这样,第2轮迭代后,最后得到各个样本数据新的权值分布:
D 3 D_3 D3=[1/22,1/22,1/6,1/6,7/66,1/6,7/66,7/66,1/22,1/22]
下表给出了权值分布的变换情况:
可得分类函数: f 2 ( x ) = 0.4236 H 1 ( x ) + 0.6496 H 2 ( x ) f_2(x)=0.4236H_1(x) + 0.6496H_2(x) f2(x)=0.4236H1(x)+0.6496H2(x)。此时,组合两个基本分类器 s i g n ( f 2 ( x ) ) sign(f_2(x)) sign(f2(x))作为强分类器在训练数据集上有3个误分类点(即3 4 6),此时强分类器的训练错误为:0.3
第三次迭代t=3:
在权值分布 D 3 D_3 D3的情况下,再取三个弱分类器 h 1 h_1 h1、 h 2 h_2 h2和 h 3 h_3 h3中误差率最小的分类器作为第3个基本分类器 H 3 ( x ) H_3(x) H3(x):
①当取弱分类器h1=X1=2.5时,此时被错分的样本点为“5 7 8”:
误差率e=7/66+7/66+7/66=7/22;
②当取弱分类器h2=X1=8.5时,此时被错分的样本点为“3 4 6”:
误差率e=1/6+1/6+1/6=1/2=0.5;
③当取弱分类器h3=X2=6.5时,此时被错分的样本点为“1 2 9”:
误差率e=1/22+1/22+1/22=3/22;
- 因此,取当前最小的分类器 h 3 h_3 h3作为第3个基本分类器 H 3 ( x ) H_3(x) H3(x):
-
这样,第3轮迭代后,得到各个样本数据新的权值分布为:
D 4 D_4 D4=[1/6,1/6,11/114,11/114,7/114,11/114,7/114,7/114,1/6,1/38]
下表给出了权值分布的变换情况:
可得分类函数: f 3 ( x ) = 0.4236 H 1 ( x ) + 0.6496 H 2 ( x ) + 0.9229 H 3 ( x ) f_3(x)=0.4236H_1(x) + 0.6496H_2(x)+0.9229H_3(x) f3(x)=0.4236H1(x)+0.6496H2(x)+0.9229H3(x)。此时,组合三个基本分类器 s i g n ( f 3 ( x ) ) sign(f_3(x)) sign(f3(x))作为强分类器,在训练数据集上有0个误分类点。至此,整个训练过程结束。
整合所有分类器,可得最终的强分类器为:
这个强分类器Hfinal对训练样本的错误率为0!
四、AdaBoost的误差界以及指数损失函数推导
可以参考:https://www.bbsmax.com/A/A2dmEpNbde/
详细的推导请看《统计学习方法第二版》
五、AdaBoost的优点和缺点
优点
(1)Adaboost提供一种框架,在框架内可以使用各种方法构建子分类器。可以使用简单的弱分类器,不用对特征进行筛选。
(2)Adaboost算法不需要弱分类器的先验知识,最后得到的强分类器的分类精度依赖于所有弱分类器。无论是应用于人造数据还是真实数据,Adaboost都能显著的提高学习精度。
(3)Adaboost算法不需要预先知道弱分类器的错误率上限,且最后得到的强分类器的分类精度依赖于所有弱分类器的分类精度,可以深挖分类器的能力。Adaboost可以根据弱分类器的反馈,自适应地调整假定的错误率,执行的效率高。
(4)Adaboost对同一个训练样本集训练不同的弱分类器,按照一定的方法把这些弱分类器集合起来,构造一个分类能力很强的强分类器,即“三个臭皮匠赛过一个诸葛亮”。
缺点:
在Adaboost训练过程中,Adaboost会使得难于分类样本的权值呈指数增长,训练将会过于偏向这类困难的样本,导致Adaboost算法易受噪声干扰。此外,Adaboost依赖于弱分类器,而弱分类器的训练时间往往很长。
参考资料:
[1]《统计学习方法》李航著
[2]《机器学习实战》Peter Harrington著
[3]https://blog.csdn.net/v_JULY_v/article/details/40718799
[4]https://blog.csdn.net/guyuealian/article/details/70995333
[5]https://blog.csdn.net/px_528/article/details/72963977