【机器学习】提升方法AdaBoost算法

前言

此博客介绍了关于集成学习的相关知识,在学习 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 ) } ,其中实例 xiXRn x i ∈ X ⊆ R n ,标记为 yiY={1,+1} y i ∈ Y = { − 1 , + 1 } ;弱学习算法;
输出:最终分类器 G(x) G ( x ) .

(1)初始化训练数据的权重分布

D1=(w11,...,w1i,...,w1N)w1i=1Ni=1,2,...,N D 1 = ( w 11 , . . . , w 1 i , . . . , w 1 N ) , w 1 i = 1 N , i = 1 , 2 , . . . , N

假设训练数据集一开始具有均匀的权值分布,即每个训练样本在基本分类器的学习中作用相同

(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=12log1emem α m = 1 2 l o g 1 − e m e m

    这里的对数是自然对数

αm α m 表示 Gm(x) G m ( x ) 在最终分类器中的重要性
em12 e m ⩽ 1 2 时, αm0 α 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 个基本分类器的加权表决,系数 αm α m 表示了基本分类器 Gm(x) G m ( x ) 的重要性。

具体数据了解 AdaBoost A d a B o o s t 算法

训练数据集如下表:

【机器学习】提升方法AdaBoost算法_第1张图片

(1)初始化数据权值分布

D1=(w11,w12,...,w110)w1i=0.1,i=1,2,...,10 D 1 = ( w 11 , w 12 , . . . , w 110 ) w 1 i = 0.1 , i = 1 , 2 , . . . , 10

(2) m=1 m = 1 :

  • (a)在权值分布为 D1 D 1 的训练数据集上,阀值 v v 取2.5时分类误差率最低,故基本分类器为:

    G1(x)=1,x<2.51,x>2.5 G 1 ( x ) = { 1 , x < 2.5 − 1 , x > 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=12log1e1e1=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时分类误差率最低,故基本分类器为:
    G2(x)=1,x<8.51,x>8.5 G 2 ( x ) = { 1 , x < 8.5 − 1 , x > 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时分类误差率最低,故基本分类器为:

    G3(x)=1,x<5.51,x>5.5 G 3 ( x ) = { 1 , x < 5.5 − 1 , x > 5.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个误分类点。

最终分类器为:

G(x)=sign[f3(x)]=sign[0.4236G1(x)+0.6496G2(x)+0.7514G3(x)] G ( x ) = s i g n [ f 3 ( x ) ] = s i g n [ 0.4236 G 1 ( x ) + 0.6496 G 2 ( x ) + 0.7514 G 3 ( x ) ]

至此,我们介绍了 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=12log1emem α m = 1 2 l o g 1 − e m e m

这是分类器权重的更新公式
在后续更新的博客中,我们会用到这些公式,通过python3来实现 AdaBoost A d a B o o s t 算法。

参考书籍:

  • 《统计学习方法》 李航
  • 《机器学习》周志华

你可能感兴趣的:(机器学习)