机器学习入门之《统计学习方法》笔记整理——提升方法

本文介绍了提升方法的基本思想及AdaBoost算法的工作原理,详细解释了AdaBoost算法的具体步骤,并探讨了其与前向分步算法的关系。此外,还讨论了提升树模型及其算法,并涉及回归问题的提升树算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  提升方法的思路是综合多个分类器,得到更准确的分类结果。 说白了就是“三个臭皮匠顶个诸葛亮”。


目录


提升方法

提升方法AdaBoost算法

  提升方法思路比较简单,它意在通过改变训练样本之间相对的权重,从而学习出多个分类器,并将这些分类器进行线性组合,从而提高分类的性能。
  从以上思路可以看出,提升方法将一个复杂的任务分配给多个专家进行判断,并且对判断的结果进行综合,这样做要比只让一个专家来判断要好,毕竟大家说好才是真的好。

  AdaBoost是提升算法的代表,所谓提升算法,指的是一种常用的统计学习方法,应用广泛且有效。在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提髙分类的性能。

算法 (AdaBoost)

输入:训练数据集 T={(x1,y1),(x2,y2),...,(xN,yN)} T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } ,其中, xiX=Rn x i ∈ X = R n yiY={1,+1} y i ∈ Y = { − 1 , + 1 } ,弱学习算法;

输出:最终分类器 G(x) G ( x )

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

D1=(w11,...,w1i,...,w1N),w1i=1N,i=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,...,M m = 1 , 2 , . . . , M

  (a) 使用具有权值分布 Dm D m 的训练数据集学习,得到基本分类器

Gm(x):X{1,+1} G m ( x ) : X → { − 1 , + 1 }

  (b) 计算 Gm(x) G m ( x ) 在训练数据集上的分类误差率

em=P(Gm(xi)yi)=i=1NwmiI(Gm(xi)yi) e m = 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 log ⁡ 1 − e m e m

这里的对数是自然对数。

  (d) 更新训练数据集的权值分布

Dm+1=(wm+1,1,...,wm+1,i,...,wm+1,N) D m + 1 = ( w m + 1 , 1 , . . . , w m + 1 , i , . . . , w m + 1 , N )

wm+1,i=wmiZmexp(αmyiGm(xi))i=1,2,...,N w m + 1 , i = w m i Z m exp ⁡ ( − α m y i G m ( x i ) ) i = 1 , 2 , . . . , N

也可以写成

wm+1,i={wmiZmeαm,wmiZmeαm,Gm(xi)=yiGm(xi)yi w m + 1 , i = { w m i Z m e − α m , G m ( x i ) = y i w m i Z m e − α m , G m ( x i ) ≠ y i

这里, Zm Z m 是规范化因子

Zm=i=1Nwmiexp(αmyiGm(xi)) Z m = ∑ i = 1 N w m i exp ⁡ ( − α m y i G m ( x i ) )

它使 Dm+1 D m + 1 成为一个概率分布。

(3) 构建基本分类器的线性组合

f(x)=m=1MαmGm(x) f ( x ) = ∑ m = 1 M α m G m ( x )

得到最终分类器

G(x)=sign(f(x))=sign(m=1MαmGm(x)) G ( x ) = s i g n ( f ( x ) ) = s i g n ( ∑ m = 1 M α m G m ( x ) )

  从以上算法可以看到:最开始步骤1,我们假设了样本具有均匀的权重分布,它将产生一个基本分类器 G1(x) G 1 ( x ) 。步骤2是一个m从1到M的循环过程,每一次循环都可以产生一个弱分类器。

  1. 分类误差率实际上就是被误分类点的权值之和。
  2. 在计算当前弱分类器在线性组合中的系数时,当 e0.5 e ≥ 0.5 时, α0 α ≥ 0 ,并且随着e的减小而增大,正好印证了需要使误差率小的弱分类器的权值更大这个事实。
  3. 每一个样本的权值 w w ,都与它原来的标签
    yi
    以及预测的标签 Gm(xi) G m ( x i ) 有关,当预测正确即它们同号时,exp指数是一个负值,这样就会减小原来样本点的权重;当预测不正确即它们异号时,exp指数是一个正值,它会增加当前样本点的权重。这正印证了我们需要使被误分类样本的权值更大这个事实。

AdaBoost算法的解释

  AdaBoost算法还有另一个解释,即可以认为AdaBoost算法是模型为加法模型、损失函数为指数函数、学习算法为前向分步算法时的二类分类学习方法。

前向分步算法

  考虑加法模型(additive model)

f(x)=m=1Mβmb(x;γm) f ( x ) = ∑ m = 1 M β m b ( x ; γ m )

  其中, b(x;γm) b ( x ; γ m ) 为基函数, γm γ m 为基函数的参数, βm β m 为基函数的系数。显然, f(x)=m=1Mβmb(x;γm) f ( x ) = ∑ m = 1 M β m b ( x ; γ m ) 是一个加法模型。

  在给定训练数据及损失函数的条件下,学习加法模型 f(x) f ( x ) 成为经验风险极小化即损失函数极小化问题:

minβm,γmi=1NL(yi,m=1Mβmb(xi;γm)) min β m , γ m ∑ i = 1 N L ( y i , ∑ m = 1 M β m b ( x i ; γ m ) )

  通常这是一个复杂的优化问题。前向分步算法(forward stage wise algorithm)求解这一优化问题的想法是:因为学习的是加法模型,如果能够从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数式,那么就可以简化优化的复杂度。具体地,每步只需优化如下损失函数:

minβ,γi=1NL(yi,βb(xi;γ)) min β , γ ∑ i = 1 N L ( y i , β b ( x i ; γ ) )

算法 (前向分步算法)

输入:训练数据集 T={(x1,y1),(x2,y2),...(xN,yN)} T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } ,损失函数 L(y,f(x)) L ( y , f ( x ) ) 和基函数的集合 {b(x;γ)} { b ( x ; γ ) }

输出:加法模型 f(x) f ( x ) .

(1) 初始化 f0(x)=0 f 0 ( x ) = 0

(2) 对 m=1,2,...,M m = 1 , 2 , . . . , M

  (a) 极小化损失函数

(βm,γm)=argminβ,γi=1NL(yi,fm1(xi)+βb(xi;γ)) ( β m , γ m ) = arg ⁡ min β , γ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β b ( x i ; γ ) )

得到参数 βm,γm β m , γ m

  (b) 更新

fm(x)=fm1(x)+βmb(x;γm) f m ( x ) = f m − 1 ( x ) + β m b ( x ; γ m )

(3) 得到加法模型

f(x)=fM(x)=m=1Mβmb(x;γm) f ( x ) = f M ( x ) = ∑ m = 1 M β m b ( x ; γ m )

  这样,前向分步算法将同时求解从 m=1 m = 1 M M 所有参数βm,γm 的优化问题简化为逐次求解各个 βm,γm β m , γ m 的优化问题。

前向分步算法与AdaBoost

  由前向分步算法可以推导出AdaBoost,AdaBoost算法是前向分歩加法算法的特例。这时,模型是由基本分类器组成的加法模型,损失函数是指数函数。

提升树

  提升树是以分类树或回归树为基本分类器的提升方法。提升树被认为是统计学习中性能最好的方法之一。

提升树模型

  提升方法实际采用加法模型(即基函数的线性组合)与前向分步算法。以决策树为基函数的提升方法称为提升树(boosting tree)。对分类问题决策树是二叉分类树,对回归问题决策树是二叉回归树。在原著例题中看到的基本分类器,可以看作是由一个根结点直接连接两个叶结点的简单决策树,即所谓的决策树桩(decision stump)。提升树模型可以表示为决策树的加法模型:

fM(x)=m=1MT(x;Θm) f M ( x ) = ∑ m = 1 M T ( x ; Θ m )

其中, T(x;Θm) T ( x ; Θ m ) 表示决策树; Θm Θ m 为决策树的参数; M M 为树的个数。

提升树算法

  提升树算法采用前向分步算法。首先确定初始提升树fm(x)=0 ,第 m m 歩的模型是

fm(x)=fm1(x)+T(x;Θm)

其中, fm1(x) f m − 1 ( x ) 为当前模型,通过经验风险极小化确定下一棵决策树的参数 Θm Θ m

Θ^m=argminΘmi=1NL(yi,fm1(xi)+T(xi;Θm)) Θ ^ m = arg ⁡ min Θ m ∑ i = 1 N L ( y i , f m − 1 ( x i ) + T ( x i ; Θ m ) )

  由于树的线性组合可以很好地拟合训练数据,即使数据中的输入与输出之间的关系很复杂也是如此,所以提升树是一个髙功能的学习算法。

  不同问题有大同小异的提升树学习算法,其主要区别在于使用的损失函数不同。包括用平方误差损失函数的回归问题,用指数损失函数的分类问题,以及用一般损失函数的一般决策问题。

  对于二类分类问题,提升树算法只需将AdaBoost算法中的基本分类器限制为二类分类树即可,可以说这时的提升树算法是AdaBoost算法的特殊情况。

算法 (回归问题的提升树算法)

输入:线性可分训练数据集 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 yiYR y i ∈ Y ⊆ R

输出:提升树 fM(x) f M ( x ) .

(1) 初始化 f0(x)=0 f 0 ( x ) = 0

(2) 对 m=1,2,...,M m = 1 , 2 , . . . , M

  (a) 计算残差

rmi=yifm1(xi),i=1,2,...,N r m i = y i − f m − 1 ( x i ) , i = 1 , 2 , . . . , N

  (b) 拟合残差 rmi r m i 学习一个回归树,得到 T(x;Θm) T ( x ; Θ m )

  (c) 更新 fm(x)=fm1(x)+T(x;Θm) f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m )

(3) 得到回归问题提升树

fM(x)=m=1MT(x;Θm) f M ( x ) = ∑ m = 1 M T ( x ; Θ m )

算法 (梯度提升算法)

输入:线性可分训练数据集 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 yiYR y i ∈ Y ⊆ R ,损失函数 L(y,f(x)) L ( y , f ( x ) )

输出:回归树 f^(x) f ^ ( x ) .

(1) 初始化

f0(x)=argminci=1NL(yi,c) f 0 ( x ) = arg ⁡ min c ∑ i = 1 N L ( y i , c )

(2) 对 m=1,2,...,M m = 1 , 2 , . . . , M

  (a) 对 i=1,2,...,N i = 1 , 2 , . . . , N ,计算

rmi=[L(yi,f(xi))f(xi)]f(x)=fm1(x) r m i = − [ ∂ L ( y i , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x )

  (b) 对 rmi r m i 拟合一个回归树,得到第 m m 棵树的叶节点区域Rmj,j=1,2,...,J

  (c) 对 j=1,2,...,J j = 1 , 2 , . . . , J ,计算

cmj=argmincxiRmjL(yi,fm1(xi)+c) c m j = arg ⁡ min c ∑ x i ∈ R m j L ( y i , f m − 1 ( x i ) + c )

  (d) 更新 fm(x)=fm1(x)+j=1JcmjI(xRmj) f m ( x ) = f m − 1 ( x ) + ∑ j = 1 J c m j I ( x ∈ R m j )

(3) 得到回归树

f^(x)=fM(x)=m=1Mj=1JcmjI(xRmj) f ^ ( x ) = f M ( x ) = ∑ m = 1 M ∑ j = 1 J c m j I ( x ∈ R m j )

参考文章

  1. 提升方法
  2. 《统计学习方法(李航)》讲义 第08章 提升方法
  3. 提升方法及AdaBoost
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Quanfita

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值