提升方法(二)
AdaBoost算法的训练误差分析
- AdaBoost的训练误差界
AdaBoost算法最终分类器的训练误差界为:
1 N ∑ i = 1 N I ( G ( x i ) ≠ y i ) ≤ 1 N ∑ i exp ( − y i f ( x i ) ) = ∏ m Z m \frac{1}{N}\sum\limits_{i = 1}^N {I\left( {G\left( {{x_i}} \right) \ne {y_i}} \right)} \le \frac{1}{N}\sum\limits_i {\exp \left( { - {y_i}f\left( {{x_i}} \right)} \right) = \prod\limits_m {{Z_m}} } N1i=1∑NI(G(xi)̸=yi)≤N1i∑exp(−yif(xi))=m∏Zm
其中 G ( x i ) G\left( {{x_i}} \right) G(xi), f ( x ) f\left( {{x}} \right) f(x)和 Z m Z_m Zm的计算方法前面已经给出。 - 二分类问题AdaBoost的训练误差界
∏ m = 1 M Z m = ∏ m = 1 M [ 2 e m ( 1 − e m ) ] = ∏ m = 1 M ( 1 − 4 γ m 2 ) ≤ exp ( − 2 ∑ m = 1 M γ m 2 ) \prod\limits_{m = 1}^M {{Z_m}} = \prod\limits_{m = 1}^M {\left[ {2\sqrt {{e_m}\left( {1 - {e_m}} \right)} } \right]} = \prod\limits_{m = 1}^M {\sqrt {\left( {1 - 4\gamma _m^2} \right)} } \le \exp \left( { - 2\sum\limits_{m = 1}^M {\gamma _m^2} } \right) m=1∏MZm=m=1∏M[2em(1−em)]=m=1∏M(1−4γm2)≤exp(−2m=1∑Mγm2)
这里 γ m = 1 2 − e m {\gamma _m} = \frac{1}{2} - {e_m} γm=21−em。- 推论
如果存在 γ > 0 \gamma > 0 γ>0,对所有 m m m有 γ m ≥ γ {\gamma _m} \ge \gamma γm≥γ,则
1 N ∑ i = 1 N I ( G ( x i ) ≠ y i ) ≤ exp ( − 2 M γ 2 ) \frac{1}{N}\sum\limits_{i = 1}^N {I\left( {G\left( {{x_i}} \right) \ne {y_i}} \right)} \le \exp \left( { - 2M{\gamma ^2}} \right) N1i=1∑NI(G(xi)̸=yi)≤exp(−2Mγ2)
- 推论
AdaBoost算法的解释
AdaBoost的另一种解释:AdaBoost算法是模型为加法模型、损失函数为指数函数、学习算法为前向分步算法时的二分类学习方法。
前向分步算法
考虑加法模型:
f
(
x
)
=
∑
m
=
1
M
β
m
b
(
x
;
γ
m
)
f\left( x \right) = \sum\limits_{m = 1}^M {{\beta _m}b\left( {x;{\gamma _m}} \right)}
f(x)=m=1∑Mβmb(x;γm)
其中
b
(
x
;
γ
m
)
{b\left( {x;{\gamma _m}} \right)}
b(x;γm)为基函数,
γ
m
{{\gamma _m}}
γm为基函数的参数,
β
m
{{\beta _m}}
βm为基函数的系数。
在给定训练集及损失函数
L
(
y
,
f
(
x
)
)
L\left( {y,f\left( x \right)} \right)
L(y,f(x))的条件下,学习加法模型
f
(
x
)
f\left( x \right)
f(x)成为经验风险极小化即损失函数极小化问题:
min
β
m
,
γ
m
∑
i
=
1
N
L
(
y
i
,
∑
m
=
1
M
β
m
b
(
x
i
;
γ
m
)
)
\mathop {\min }\limits_{{\beta _m},{\gamma _m}} \sum\limits_{i = 1}^N {L\left( {{y_i},\sum\limits_{m = 1}^M {{\beta _m}b\left( {{x_i};{\gamma _m}} \right)} } \right)}
βm,γmmini=1∑NL(yi,m=1∑Mβmb(xi;γm))
- 前向分布算法的求解思想
因为学习的是加法模型,如果能够从前向后每一步只学习一个基函数及其系数,逐步逼近优化目标函数式,那么就可以简化优化的复杂度。 - 前向分步算法
- 输入:训练数据集 T T T,损失函数 L ( y , f ( x ) ) L\left( {y,f\left( x \right)} \right) L(y,f(x)),基函数集 { b ( x ; γ ) } \{b\left( {x;{\gamma}} \right)\} {b(x;γ)};
- 输出:加法模型 f ( x ) f\left( x \right) f(x)
- 流程:
- 初始化 f 0 ( x ) = 0 f_0\left( x \right)=0 f0(x)=0
- 对
m
=
1
,
2
,
⋯
 
,
M
m=1,2,\cdots,M
m=1,2,⋯,M
- 极小化损失函数
( β m , γ m ) = arg min β , γ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β b ( x i ; γ ) ) \left( {{\beta _m},{\gamma _m}} \right) = \arg \mathop {\min }\limits_{\beta ,\gamma } \sum\limits_{i = 1}^N {L\left( {{y_i},{f_{m - 1}}\left( {{x_i}} \right) + \beta b\left( {{x_i};\gamma } \right)} \right)} (βm,γm)=argβ,γmini=1∑NL(yi,fm−1(xi)+βb(xi;γ))
得到参数 β m , γ m \beta_m,\gamma_m βm,γm。 - 更新
f m ( x ) = f m − 1 ( x ) + β m b ( x ; γ m ) {f_m}\left( x \right) = {f_{m - 1}}\left( x \right) + {\beta _m}b\left( {x;{\gamma _m}} \right) fm(x)=fm−1(x)+βmb(x;γm)
- 极小化损失函数
- 得到加法模型
f ( x ) = f M ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f\left( x \right) = {f_M}\left( x \right) = \sum\limits_{m = 1}^M {{\beta _m}b\left( {x;{\gamma _m}} \right)} f(x)=fM(x)=m=1∑Mβmb(x;γm)
前向分步算法与AdaBoost
AdaBoost算法是前向分步加法算法的特例,这时,模型是由基本分类器组成的加法模型,损失函数是指数函数。
提升树
提升树模型
以决策树为基函数的提升方法称为提升树,提升树模型可以表示为决策树的加法模型:
f
M
(
x
)
=
∑
m
=
1
M
T
(
x
;
Θ
m
)
{f_M}\left( x \right) = \sum\limits_{m = 1}^M {T\left( {x;{\Theta _m}} \right)}
fM(x)=m=1∑MT(x;Θm)
其中
T
(
x
;
Θ
m
)
{T\left( {x;{\Theta _m}} \right)}
T(x;Θm)表示决策树、
Θ
m
{{\Theta _m}}
Θm为决策树的参数、
M
M
M为树的个数。
提升树算法
- 输入:训练数据集 T T T
- 输出:提升树 f M ( x ) f_M\left(x\right) fM(x)
- 流程
- 初始化 f 0 ( x ) = 0 f_0\left(x\right)=0 f0(x)=0
- 对
m
=
1
,
2
,
⋯
 
,
M
m=1,2,\cdots,M
m=1,2,⋯,M
- 计算残差:
r m i = y i − f m − 1 ( x i ) , i = 1 , 2 , ⋯   , N {r_{mi}} = {y_i} - {f_{m - 1}}\left( {{x_i}} \right),i = 1,2, \cdots ,N rmi=yi−fm−1(xi),i=1,2,⋯,N - 拟合残差 r m i {r_{mi}} rmi学习一个回归树,得到 T ( x ; Θ m ) {T\left( {x;{\Theta _m}} \right)} T(x;Θm)
- 更新 f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m ) {f_m}\left( x \right) = {f_{m - 1}}\left( x \right) + T\left( {x;{\Theta _m}} \right) fm(x)=fm−1(x)+T(x;Θm)
- 计算残差:
- 得到回归问题提升树
f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) {f_M}\left( x \right) = \sum\limits_{m = 1}^M {T\left( {x;{\Theta _m}} \right)} fM(x)=m=1∑MT(x;Θm)
梯度提升算法
提升树利用加法模型与前向分步算法实现学习的优化过程,当损失函数为平方损失或指数损失时每一步优化很简单,但对一般损失函数而言,往往每一步都不容易,因此提出了梯度提升算法。
- 输入:数据集 T T T和损失函数 L ( y , f ( x ) ) L\left( {y,f\left( x \right)} \right) L(y,f(x))
- 输出:回归树 f ^ ( x ) \hat f\left( x \right) f^(x)
- 流程
- 初始化:
f 0 ( x ) = arg min c ∑ i = 1 N L ( y i , c ) {f_0}\left( x \right) = \arg \mathop {\min }\limits_c \sum\limits_{i = 1}^N {L\left( {{y_i},c} \right)} f0(x)=argcmini=1∑NL(yi,c) - 对
m
=
1
,
2
,
⋯
 
,
M
m=1,2,\cdots,M
m=1,2,⋯,M
- 对
i
=
1
,
2
,
⋯
 
,
N
i=1,2,\cdots,N
i=1,2,⋯,N,计算
r m i = − [ ∂ L ( y i , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) {r_{mi}} = - {\left[ {\frac{{\partial L\left( {{y_i},f\left( {{x_i}} \right)} \right)}}{{\partial f\left( {{x_i}} \right)}}} \right]_{f\left( x \right) = {f_{m - 1}}\left( x \right)}} rmi=−[∂f(xi)∂L(yi,f(xi))]f(x)=fm−1(x) - 对 r m i {r_{mi}} rmi拟合一个回归树,得到第 m m m棵树的叶子结点区域 R m j , j = 1 , 2 , ⋯   , J {R_{mj}},j = 1,2, \cdots ,J Rmj,j=1,2,⋯,J
- 对
j
=
1
,
2
,
⋯
 
,
J
j=1,2,\cdots,J
j=1,2,⋯,J,计算
c m j = arg min c ∑ x i ∈ R m j L ( y i , f m − 1 ( x i ) + c ) {c_{mj}} = \arg \mathop {\min }\limits_c \sum\limits_{{x_i} \in {R_{mj}}} {L\left( {{y_i},{f_{m - 1}}\left( {{x_i}} \right) + c} \right)} cmj=argcminxi∈Rmj∑L(yi,fm−1(xi)+c) - 更新 f m ( x ) = f m − 1 ( x i ) + ∑ j = 1 J c m j I ( x ∈ R m j ) {f_m}\left( x \right) = {f_{m - 1}}\left( {{x_i}} \right) + \sum\limits_{j = 1}^J {{c_{mj}}I\left( {x \in {R_{mj}}} \right)} fm(x)=fm−1(xi)+j=1∑JcmjI(x∈Rmj)
- 对
i
=
1
,
2
,
⋯
 
,
N
i=1,2,\cdots,N
i=1,2,⋯,N,计算
- 得到回归树
f ^ ( x ) = f M ( x ) = ∑ m = 1 M ∑ j = 1 J c m j I ( x ∈ R m j ) \hat f\left( x \right) = {f_M}\left( x \right) = \sum\limits_{m = 1}^M {\sum\limits_{j = 1}^J {{c_{mj}}I\left( {x \in {R_{mj}}} \right)} } f^(x)=fM(x)=m=1∑Mj=1∑JcmjI(x∈Rmj)
- 初始化:
参考文献
《统计学习方法》