提升方法

提升方法

提升方法是指将弱学习算法提升为强学习算法的统计学习算法。在分类学习中,提升方法通过反复修改训练数据的权值分布,构建一系列的基本分类器(若分类器),并将这些基本分类器线形组合,构成一个强分类器。

提升方法Adaboost算法

Adaboost算法的特点是通过迭代每次学习一个基本的分类器,每一次的迭代中,提高那些被前一轮分类器错误分类的数据的权值,而降低那些被正确分类数据的权值。最后,Adaboost将基本分类器的线形组合作为强分类器,其中,分类误差率小的基本分类器较大的权值,给分类率误差大的基本分类器小的权值。

Adaboost

input:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T = \lbrace (x_1,y_1),(x_2,y_2),...,(x_N,y_N)\rbrace T={(x1,y1),(x2,y2),...,(xN,yN)},其中 x ∈ X ⊆ R n   ,   y i ∈ Y   ,  弱学习算法 x\in\mathcal{X}\subseteq R^n~,~y_i \in \mathcal{Y}~,~\text{弱学习算法} xXRn , yiY , 弱学习算法
output:最终的分类器 G ( x ) G(x) G(x)

  1. 初始化训练数据的权值分布
    D 1 = ( w 11 , . . . , w 1 i , . . . , w 1 N )   ,   w 1 i = 1 N   ,   i = 1 , 2 , . . , N D_1 = (w_{11},...,w_{1i},...,w_{1N})~,~w_{1i} = \frac{1}{N}~,~i=1,2,..,N D1=(w11,...,w1i,...,w1N) , w1i=N1 , i=1,2,..,N
  2. m = 1 , 2 , . . . , M m=1,2,...,M m=1,2,...,M
    1. 使用具有权重分布 D m D_m Dm的训练集学习,得到基本分类器: G m ( x ) : X ⟶ { − 1 + 1 } G_m(x):\mathcal{X} \longrightarrow \lbrace-1 +1 \rbrace Gm(x):X{1+1}
    2. 计算 G m ( x ) G_m(x) Gm(x)在训练集上的分类误差率: 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 ) e_m = \sum_{i=1}^N P(G_m(x_i)\neq y_i) =\sum_{i=1}^N w_{mi} I(G_m(x_i)\neq y_i) em=i=1NP(Gm(xi)=yi)=i=1NwmiI(Gm(xi)=yi)
    3. 计算 G m ( x ) G_m(x) Gm(x)的系数 α m = 1 2 log ⁡ 1 − e m e m \alpha_m = \frac{1}{2} \log\frac{1-e_m}{e_m} αm=21logem1em
    4. 更新训练数据集的权值分布 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 ) ) D_{m+1} = (w_{m+1,1},...,w_{m+1,i},...,w_{m+1,N})~,~w_{m+1,i} = \frac{w_{mi}}{Z_m}exp(-\alpha_my_iG_m(x_i)) Dm+1=(wm+1,1,...,wm+1,i,...,wm+1,N) , wm+1,i=Zmwmiexp(αmyiGm(xi))
  3. 构建基本分类器的线形组合
    1. f ( x ) = ∑ m = 1 M α m G m ( x ) f(x) = \sum_{m=1}^M\alpha_mG_m(x) f(x)=m=1MαmGm(x)
    2. G ( x ) = s i g n ( f ( x ) ) G(x) = sign(f(x)) G(x)=sign(f(x))
Adaboost算法训练误差分析

Adaboost算法最基本的性质是他在学习过程中能够不断的减少训练误差,即在训练数据集上面的分类误差率,有以下两个定理:

  1. Adaboost算法的训练误差界
  2. 二分类问题的Adaboost算法的训练误差界
Adaboost算法的解释

Adaboost算法的一个解释是该算法实际上是前向分步算法的一个实现,在这个方法里,模型是加法模型,损失函数是指数函数,算法是向前分步算法。

前向分步算法

加法模型:
f ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x) = \sum_{m=1}^M\beta_mb(x;\gamma_m) f(x)=m=1Mβmb(x;γm)
基函数: b ( x ; γ m ) b(x;\gamma_m) b(x;γm)基函数的参数: γ m \gamma_m γm基函数的系数: β m \beta_m βm
在给定训练数据集以及损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x))的条件下,学习加法模型可以转化成为经验风险极小化即损失函数极小化问题:
min ⁡ γ m , β m ∑ i = 1 N L ( y i , ∑ m = 1 M ) β m b ( x ; γ m ) ) \min_{\gamma_m,\beta_m}\sum_{i=1}^NL(y_i,\sum_{m=1}^M)\beta_mb(x;\gamma_m)) γm,βmmini=1NL(yi,m=1M)βmb(x;γm))
一个想法是,每一步就优化学习一个基函数及其系数,逐步逼近优化目标函数形式,即优化:
min ⁡ β , γ ∑ i = 1 N L ( y i , β b ( x i ; γ ) ) \min_{\beta,\gamma}\sum_{i=1}^NL(y_i,\beta b(x_i;\gamma)) β,γmini=1NL(yi,βb(xi;γ))
前向分步算法:
input: T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T = \lbrace (x_1,y_1),(x_2,y_2),...,(x_N,y_N)\rbrace T={(x1,y1),(x2,y2),...,(xN,yN)}损失函数: L ( y , f ( x ) ) L(y,f(x)) L(y,f(x)),基函数集: { b ( x ; γ ) } \lbrace b(x;\gamma) \rbrace {b(x;γ)}
output:加法模型 f ( x ) f(x) f(x)

  1. 初始化 f 0 ( x ) = 0 f_0(x)= 0 f0(x)=0
  2. 对m=1,2,…,M
    1. 极小化损失函数 ( β m , γ m ) = a r g min ⁡ β , γ N L ( y i , f m − 1 ( x i ) + β b ( x i ; γ ) ) (\beta_m,\gamma_m) = arg\min_{\beta,\gamma}^NL(y_i,f_{m-1}(x_i)+\beta b(x_i;\gamma)) (βm,γm)=argminβ,γNL(yi,fm1(xi)+βb(xi;γ))得到 ( β m , γ m ) (\beta_m,\gamma_m) (βm,γm)
    2. 更新 f m ( x ) = f m − 1 ( x ) + β m b ( x ; γ m ) f_m(x) = f_{m-1}(x)+\beta_mb(x;\gamma_m) fm(x)=fm1(x)+βmb(x;γm)
  3. 得到加法模型
    f ( x ) = f M ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x) = f_M(x) = \sum_{m=1}^M\beta_mb(x;\gamma_m) f(x)=fM(x)=m=1Mβmb(x;γm)
    Adaboost算法是向前分步加法算法的特例。这时,模型是由基本分类器组成的加法模型,损失函数是指数函数。
提升树

提升树是以分类树或者回归树为基本分类器的提升方法。

提升树模型

提升算法实际采用加法模型与前向分布算法,以决策树为基函数的提升方法称之为提升树(boosting tree)
f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) f_M(x) = \sum_{m=1}^M T(x;\Theta_m) fM(x)=m=1MT(x;Θm)
其中, T ( x ; Θ m ) T(x;\Theta_m) T(x;Θm)表示决策树, Θ m \Theta_m Θm为决策树的参数,M为树的个数。

提升树算法

回归问题的提升树算法:
input:训练数据集 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)
output:提升树算法: f M ( x ) f_M(x) fM(x)

  1. 初始化 f 0 ( x ) = 0 f_0(x) = 0 f0(x)=0
  2. 对m=1,2,3,…,M
    1. 计算残差
    2. 拟合残差学习一个回归树
    3. 更新 f M ( x ) f_M(x) fM(x)
  3. 得到回归问题提升树模型
    f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) f_M(x) = \sum_{m=1}^M T(x;\Theta_m) fM(x)=m=1MT(x;Θm)
梯度提升

对一般的损失函数而言,优化并不是很简单,就提出了梯度提升算法,其关键是利用损失函数的负梯度在当前模型的值作为回归问题提升树算法中的残差的近似值,拟合一个回归树。
− [ ∂ L ( y , f ( x i ) ) ∂ ( f ( x i ) ) ] f ( x ) = f m − 1 ( x ) -[\frac{\partial L(y,f(x_i))}{\partial(f(x_i))}] _ {f(x) = f_{m-1}(x)} [(f(xi))L(y,f(xi))]f(x)=fm1(x)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值