前言
此博客介绍了关于集成学习的相关知识,在学习 AdaBoost A d a B o o s t 算法前,可以先了解下集成学习。
提升(Boosting)方法是一种常用的统计学习方法,应用广泛且有效。在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能。
提升方法基于这样一种思想:
对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的结论,要比其中任何一个专家单独的判断好。实际上,就是“三个臭皮匠顶个诸葛亮”的道理。
对于提升方法来说,有两个问题需要回答:
- 1、在每一轮如何改变训练数据的权重或概率分布
- 2、如何将弱分类器组合成一个强分类器
AdaBoost A d a B o o s t 的做法是,提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。这样一来,在那些没有得到正确分类的数据,由于其权值的加大而受到后一轮的弱分类器的更大关注,于是,分类问题被一系列的弱分类器“分而治之”。
至于第二个问题, AdaBoost A d a B o o s t 采取加权多数表决的方法。具体地,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用。
AdaBoost A d a B o o s t 算法
输入:训练数据集 T={(x1,y1),(x2,y2),...(xN,yN)} T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . ( x N , y N ) } ,其中实例 xi∈X⊆Rn x i ∈ X ⊆ R n ,标记为 yi∈Y={−1,+1} y i ∈ Y = { − 1 , + 1 } ;弱学习算法;
输出:最终分类器 G(x) G ( x ) .
(1)初始化训练数据的权重分布
假设训练数据集一开始具有均匀的权值分布,即每个训练样本在基本分类器的学习中作用相同
(2)对 m=1,2,3,...,M m = 1 , 2 , 3 , . . . , M
AdaBoost A d a B o o s t 反复学习基本分类器,迭代执行以下步骤
- (a)使用具有权重分布
Dm
D
m
的训练数据集学习,得到基本分类器
Gm(x)=X→{−1,+1} G m ( x ) = X → { − 1 , + 1 }
使用当前分布 Dm D m 加权的训练数据集,学习基本分类器
(b)计算 Gm(x) G m ( x ) 在训练数据集上的分类误差率
em=∑i=1NP(Gm(xi)≠yi)=∑i=1NwmiI(Gm(xi)≠yi) e m = ∑ i = 1 N P ( G m ( x i ) ≠ y i ) = ∑ i = 1 N w m i I ( G m ( x i ) ≠ y i )(c)计算 Gm(x) G m ( x ) 的系数
αm=12log1−emem α m = 1 2 l o g 1 − e m e m
这里的对数是自然对数
αm α m 表示 Gm(x) G m ( x ) 在最终分类器中的重要性
当 em⩽12 e m ⩽ 1 2 时, αm⩾0 α m ⩾ 0 ,并且 αm α m 随着 em e m 的减小而增大,所以分类误差率减小的基本分类器在最终分类器中的作用越大。
- (d)更新训练数据集的权重分布
Dm+1=(wm+1,1,...,wm+1,i,...,wm+1,N)wm+1,i=wmiZmexp(−αmyiGm(xi)),i=1,2,...,N D m + 1 = ( w m + 1 , 1 , . . . , w m + 1 , i , . . . , w m + 1 , N ) w m + 1 , i = w m i Z m e x p ( − α m y i G m ( x i ) ) , i = 1 , 2 , . . . , N
这里, Zm Z m 是规范化因子
Zm=∑i+1Nwmiexp(−αmyiGm(xi)) Z m = ∑ i + 1 N w m i e x p ( − α m y i G m ( x i ) )
它使 Dm+1 D m + 1 成为一个概率分布
上面两个式子可以写成:
wm+1,i=⎧⎩⎨⎪⎪wmiZme−αm,Gm(x)=yiwmiZmeαm, Gm(x)≠yi w m + 1 , i = { w m i Z m e − α m , G m ( x ) = y i w m i Z m e α m , G m ( x ) ≠ y i
由此可见,被正确分类的样本的权值减小了,被错误分类的样本权值增大了
(3)构建基本分类器的线性组合
f(x)=∑m+1NαmGm(x) f ( x ) = ∑ m + 1 N α m G m ( x )
得到最终分类器
G(x)=sign(f(x))=sign(∑m+1NαmGm(x)) G ( x ) = s i g n ( f ( x ) ) = s i g n ( ∑ m + 1 N α m G m ( x ) )线性组合 f(x) f ( x ) 实现 M M 个基本分类器的加权表决,系数表示了基本分类器 Gm(x) G m ( x ) 的重要性。
具体数据了解 AdaBoost A d a B o o s t 算法
训练数据集如下表:
(1)初始化数据权值分布
(2) 对 m=1 m = 1 :
(a)在权值分布为 D1 D 1 的训练数据集上,阀值 v v 取2.5时分类误差率最低,故基本分类器为:
(b) G1(x) G 1 ( x ) 在训练数据集上的误差率
e1=P(G1(x)≠yi)=0.3 e 1 = P ( G 1 ( x ) ≠ y i ) = 0.3(c)计算 G1(x) G 1 ( x ) 的系数:
α1=12log1−e1e1=0.4236 α 1 = 1 2 l o g 1 − e 1 e 1 = 0.4236(d)更新训练数据集的权值分布
D2=(w21,w22,...,w210)wwi=w1iZ1exp(−α1yiG1(x)),i=1,2,...,10D2=(0.07143,0.07143,0.07143,0.07143,0.07143,0.07143,0.16667,0.16667,0.16667,0.07143)f1(x)=0.4236G1(x) D 2 = ( w 21 , w 22 , . . . , w 210 ) w w i = w 1 i Z 1 e x p ( − α 1 y i G 1 ( x ) ) , i = 1 , 2 , . . . , 10 D 2 = ( 0.07143 , 0.07143 , 0.07143 , 0.07143 , 0.07143 , 0.07143 , 0.16667 , 0.16667 , 0.16667 , 0.07143 ) f 1 ( x ) = 0.4236 G 1 ( x )
分类器 sing[f1(x)] s i n g [ f 1 ( x ) ] 在训练数据集上有3个误分类点。
对 m=2 m = 2 :
- (a)在权值分布为
D2
D
2
的训练数据集上,阀值
v
v
取8.5时分类误差率最低,故基本分类器为:
此时,序号为4,5,6的分类错误 (b) G2(x) G 2 ( x ) 在训练数据集上的误差率(将序号为4,5,6对应的w相加):
e2=0.07143+0.07143+0.07143=0.2143 e 2 = 0.07143 + 0.07143 + 0.07143 = 0.2143(c)计算 G2(x) G 2 ( x ) 的系数: α2=0.6496 α 2 = 0.6496
(d)更新训练数据集的权值分布
D3=(0.0455,0.0455,0.0455,0.1667,0.1667,0.1667,0.1667,0.1667,0.1667,0.0455)f2(x)=0.4236G1(x)+0.6496G2(x) D 3 = ( 0.0455 , 0.0455 , 0.0455 , 0.1667 , 0.1667 , 0.1667 , 0.1667 , 0.1667 , 0.1667 , 0.0455 ) f 2 ( x ) = 0.4236 G 1 ( x ) + 0.6496 G 2 ( x )
分类器 sing[f2(x)] s i n g [ f 2 ( x ) ] 在训练数据集上有3个误分类点。
对 m=3 m = 3 :
(a)在权值分布为 D3 D 3 的训练数据集上,阀值 v v 取8.5时分类误差率最低,故基本分类器为:
(b) G3(x) G 3 ( x ) 在训练数据集上的误差率: e3=0.1820 e 3 = 0.1820
(c)计算 G3(x) G 3 ( x ) 的系数: α3=0.7514 α 3 = 0.7514
(d)更新训练数据集的权值分布
D3=(0.125,0.125,0.125,0.125,0.102,0.102,0.102,0.065,0.065,0.125)f3(x)=0.4236G1(x)+0.6496G2(x)+0.7514G3(x) D 3 = ( 0.125 , 0.125 , 0.125 , 0.125 , 0.102 , 0.102 , 0.102 , 0.065 , 0.065 , 0.125 ) f 3 ( x ) = 0.4236 G 1 ( x ) + 0.6496 G 2 ( x ) + 0.7514 G 3 ( x )
分类器 sing[f3(x)] s i n g [ f 3 ( x ) ] 在训练数据集上有0个误分类点。
最终分类器为:
至此,我们介绍了 AdaBoost A d a B o o s t 算法,并通过具体的数据了解了 AdaBoost A d a B o o s t 算法的执行过程
在以上,我们可知道:
Dm+1=(wm+1,1,...,wm+1,i,...,wm+1,N)wm+1,i=wmiZmexp(−αmyiGm(xi)),i=1,2,...,N D m + 1 = ( w m + 1 , 1 , . . . , w m + 1 , i , . . . , w m + 1 , N ) w m + 1 , i = w m i Z m e x p ( − α m y i G m ( x i ) ) , i = 1 , 2 , . . . , N
这是样本分布的更新公式
αm=12log1−emem α m = 1 2 l o g 1 − e m e m
这是分类器权重的更新公式
在后续更新的博客中,我们会用到这些公式,通过python3来实现 AdaBoost A d a B o o s t 算法。
参考书籍:
- 《统计学习方法》 李航
- 《机器学习》周志华