提升Boosting
本文内容主体是基于李航老师的《统计学习方法》第二版中提升方法章节的内容,有兴趣的同学可以自行参考书籍资料。其中个人觉得不是很直观的部分进行了适当的解释,解释仅属于个人理解,若觉得解释更加难以理解的同学可以自行忽略。代码部分有时间再补充。若文中有编辑错误,烦请指正,谢谢。
1. 提升简介
强可学习(strongly learnable):一个概念,如果存在一个学习算法能够学习它,并且正确率很高,则称为是强可学习的;
弱可学习(weakly learnable):一个概念,如果存在一个学习算法能够学习它,但是正确率仅比瞎猜好一些,则称为是弱可学习的。
Schapire学者后来证明了,强可学习和弱可学习是等价的,也就是说,一个概念是弱可学习的,那它必然是强可学习的;反之亦然。
这样,对于一个问题来说,如果发现了该问题的弱可学习属性,或者说能够设计出一个效果较差的模型来学习它,那么一定存在一个模型可以对该问题进行很好的学习。所以,人们就开始思考,能否根据较弱的模型进行“提升”,升级为较强的学习模型呢?因为往往要找到一个弱模型是更加容易的。上述升级的过程,就成为“提升方法”。
大多数的提升方法都是改变训练数据的概率分布(即训练数据的权值分布),针对不同的训练数据分布调用弱学习算法学习一系列弱分类器,然后再将所有弱分类器组合起来成为强分类器的思路。因此,提升问题主要关注点有两个:
- 每一轮如何改变训练数据的权值或概率分布?
- 如何将弱分类器组合成一个强分类器?
2. AdaBoost算法
2.1 算法思路及步骤
AdaBoost是针对二分类问题的算法。
算法思路:针对上述两个关注点,AdaBoost采用提高分类错误样本的权值,降低分类正确样本的权值来改变数据的概率分布;最后,通过所有弱分类器进行加权多数表决的方式来得到最终结果,其中误差率大的分类器,其投票权值就较低。
算法步骤:
- 输入:训练数据集 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)},其中 x i ∈ X ∈ ℜ n , y i ∈ { − 1 , + 1 } x_i\in X\in \real^n,y_i\in\{-1,+1\} xi∈X∈ℜn,yi∈{−1,+1};加上一种针对问题的弱学习算法;
- 输出:一种强学习算法的分类器 G ( x ) G(x) G(x);
- 初始化训练数据的权值分布
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 - 对m=1,2,…,M,进行以下操作:(M表示最终组合的弱分类器个数,可以对不断进化的分类器设定一个终止条件,最终达到条件后的弱分类器个数就是M,也可以提前设定M的数值,但这样可能结果就不可控了)
1). 使用具有权值分布 D m D_m Dm的训练数据学习,得到基本分类器。
G m ( x ) : X → { − 1 , + 1 } G_m(x):X\rightarrow\{-1,+1\} 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)≠y_i)=\sum_{i=1}^N w_{mi}I(G_m(x_i)≠y_i) em=i=1∑NP(Gm(xi)̸=yi)=i=1∑NwmiI(Gm(xi)̸=yi)
3). 计算第m个弱分类器 G m ( x ) G_m(x) Gm(x)的投票权值系数:
α m = 1 2 ln 1 − e m e m \alpha_m=\frac{1}{2}\ln \frac{1-e_m}{e_m} αm=21lnem1−em
可以从系数公式看出,错误率越高,则系数越小,所占投票比例也就越小。另外,因为提升要求弱分类器对于分类效果要比瞎猜好一些,所以可以确定,在二分类问题中, e m ≤ 1 2 → α m ≥ 0 e_m≤\frac{1}{2} \rightarrow \alpha_m≥0 em≤21→αm≥0。
4).更新训练数据集的权值分布
D m + 1 = ( w m + 1 , 1 , . . . , w m + 1 , i , . . . , w m + 1 , N ) D_{m+1}=(w_{m+1,1},...,w_{m+1,i},...,w_{m+1,N}) Dm+1=(wm+1,1,...,wm+1,i,...,wm+1,N)
即 w m + 1 , i = w m i Z m e − α m y i G m ( x 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 , i = 1 , 2 , . . . , N 即w_{m+1,i}=\frac{w_{mi}}{Z_m}e^{-\alpha_my_iG_m(x_i)}=\begin{cases} \frac{w_{mi}}{Z_m}e^{-\alpha_m},G_m(x_i)=y_i\\ \frac{w_{mi}}{Z_m}e^{\alpha_m},G_m(x_i)≠y_i \end{cases},i=1,2,...,N 即wm+1,i=Zmwmie−αmyiGm(xi)={Zmwmie−αm,Gm(xi)=yiZmwmieαm,Gm(xi)̸=yi,i=1,2,...,N
这里, Z m Z_m Zm是归一化因子,将更新后的权值进行归一化,即 Z m = ∑ i = 1 N w m i e − α m y i G m ( x i ) Z_m=\sum_{i=1}^Nw_{mi}e^{-\alpha_my_iG_m(x_i)} Zm=∑i=1Nwmie−αmyiGm(xi)。由上可知,正确分类的样本权值缩小了 e − α m e^{-\alpha_m} e−αm,错误分类的样本权值增大了 e α m e^{\alpha_m} eαm倍,相当于错误分类的权值相对于正确分类的权值增大了 e 2 α m e^{2\alpha_m} e2αm倍。 - 构建基本分类器的线性组合,得到最终分类器
G
(
x
)
G(x)
G(x):
f ( x ) = ∑ m = 1 M α m G m ( x ) , G ( x ) = s i g n ( f ( x ) ) f(x)=\sum_{m=1}^M\alpha_mG_m(x),G(x)=sign(f(x)) f(x)=m=1∑MαmGm(x),G(x)=sign(f(x))
f ( x ) f(x) f(x)的符号决定实例x的分类,绝对值表示分类的确信度。
2.2 AdaBoost算法的训练误差分析
AdaBoost的训练误差界定理:AdaBoost算法最终分类器的训练误差界为
1
N
∑
i
=
1
N
I
(
G
(
x
i
)
≠
y
i
)
≤
1
N
∑
i
e
−
y
i
f
(
x
i
)
=
∏
m
Z
m
\frac{1}{N}\sum_{i=1}^N I(G(x_i)≠y_i)≤\frac{1}{N}\sum_i e^{-y_if(x_i)}=\prod_m Z_m
N1i=1∑NI(G(xi)̸=yi)≤N1i∑e−yif(xi)=m∏Zm
证明:
前半部分不等式,由于当
G
(
x
i
)
≠
y
i
G(x_i)≠y_i
G(xi)̸=yi时,
−
y
i
f
(
x
i
)
≥
0
→
e
−
y
i
f
(
x
i
)
≥
1
-y_if(x_i)≥0→e^{-y_if(x_i)}≥1
−yif(xi)≥0→e−yif(xi)≥1,所以显然成立。
后半部分有:
∵
w
m
+
1
,
i
=
w
m
i
Z
m
e
−
α
m
y
i
G
m
(
x
i
)
⇒
Z
m
w
m
+
1
,
i
=
w
m
i
e
−
α
m
y
i
G
m
(
x
i
)
∵w_{m+1,i}=\frac{w_{mi}}{Z_m}e^{-\alpha_my_iG_m(x_i)}\Rightarrow Z_mw_{m+1,i}=w_{mi}e^{-\alpha_my_iG_m(x_i)}
∵wm+1,i=Zmwmie−αmyiGm(xi)⇒Zmwm+1,i=wmie−αmyiGm(xi)
∴
1
N
∑
i
e
−
y
i
f
(
x
i
)
=
1
N
∑
i
exp
(
−
∑
m
=
1
M
y
i
α
m
G
m
(
x
i
)
)
∴\frac{1}{N}\sum_i e^{-y_if(x_i)}=\frac{1}{N}\sum_i \exp(-\sum_{m=1}^My_i\alpha_mG_m(x_i))
∴N1i∑e−yif(xi)=N1i∑exp(−m=1∑MyiαmGm(xi))
又
∵
w
1
i
=
1
N
⇒
上
式
=
∑
i
w
1
i
∏
m
=
1
M
exp
(
−
y
i
α
m
G
m
(
x
i
)
)
又∵w_{1i}=\frac{1}{N}\Rightarrow上式=\sum_i w_{1i}\prod_{m=1}^M\exp(-y_i\alpha_mG_m(x_i))
又∵w1i=N1⇒上式=i∑w1im=1∏Mexp(−yiαmGm(xi))
=
∑
i
Z
1
w
1
i
Z
1
exp
(
α
1
y
i
G
1
(
x
i
)
)
∏
m
=
2
M
exp
(
−
y
i
α
m
G
m
(
x
i
)
)
=
Z
1
∑
i
w
2
i
∏
m
=
2
M
exp
(
−
y
i
α
m
G
m
(
x
i
)
)
=\sum_i Z_1\frac{w_{1i}}{Z_1}\exp(\alpha_1y_iG_1(x_i))\prod_{m=2}^M\exp(-y_i\alpha_mG_m(x_i))=Z_1\sum_i w_{2i}\prod_{m=2}^M\exp(-y_i\alpha_mG_m(x_i))
=i∑Z1Z1w1iexp(α1yiG1(xi))m=2∏Mexp(−yiαmGm(xi))=Z1i∑w2im=2∏Mexp(−yiαmGm(xi))
=
.
.
.
=
Z
1
Z
2
.
.
.
Z
M
−
1
∑
i
w
M
i
exp
(
−
α
M
y
i
G
M
(
x
i
)
)
=
∏
m
=
1
M
Z
m
,
证
毕
=...=Z_1Z_2...Z_{M-1}\sum_i w_{Mi}\exp(-\alpha_My_iG_M(x_i))=\prod_{m=1}^M Z_m,证毕
=...=Z1Z2...ZM−1i∑wMiexp(−αMyiGM(xi))=m=1∏MZm,证毕
上述定理说明,可以在每一轮选取适当的
G
m
G_m
Gm使得
Z
m
Z_m
Zm最小,从而使训练误差下降最快。
二分类问题AdaBoost的训练误差界
∏
m
=
1
M
Z
m
=
∏
m
=
1
M
[
∑
i
=
1
N
w
m
i
e
−
α
m
y
i
G
m
(
x
i
)
]
=
∏
m
=
1
M
[
∑
y
i
=
G
m
(
x
i
)
N
w
m
i
e
−
α
m
+
∑
y
i
≠
G
m
(
x
i
)
N
w
m
i
e
α
m
]
\prod_{m=1}^M Z_m=\prod_{m=1}^M[\sum_{i=1}^Nw_{mi}e^{-\alpha_my_iG_m(x_i)}]=\prod_{m=1}^M[\sum_{y_i=G_m(x_i)}^Nw_{mi}e^{-\alpha_m}+\sum_{y_i≠G_m(x_i)}^Nw_{mi}e^{\alpha_m}]
m=1∏MZm=m=1∏M[i=1∑Nwmie−αmyiGm(xi)]=m=1∏M[yi=Gm(xi)∑Nwmie−αm+yi̸=Gm(xi)∑Nwmieαm]
=
∏
m
=
1
M
[
(
1
−
e
m
)
e
−
α
m
+
e
m
e
α
m
]
=
∏
m
=
1
M
2
e
m
(
1
−
e
m
)
=
∏
m
=
1
M
1
−
4
γ
m
2
,
其
中
γ
m
=
1
2
−
e
m
=\prod_{m=1}^M[(1-e_m)e^{-\alpha_m}+e_me^{\alpha_m}]=\prod_{m=1}^M 2\sqrt{e_m(1-e_m)}=\prod_{m=1}^M \sqrt{1-4\gamma_m^2},其中\gamma_m=\frac{1}{2}-e_m
=m=1∏M[(1−em)e−αm+emeαm]=m=1∏M2em(1−em)=m=1∏M1−4γm2,其中γm=21−em
∴
∏
m
=
1
M
Z
m
=
∏
m
=
1
M
1
−
4
γ
m
2
≤
exp
(
−
2
∑
m
=
1
M
γ
m
2
)
∴\prod_{m=1}^M Z_m=\prod_{m=1}^M \sqrt{1-4\gamma_m^2}≤\exp(-2\sum_{m=1}^M \gamma_m^2)
∴m=1∏MZm=m=1∏M1−4γm2≤exp(−2m=1∑Mγm2)
其中,上式的右半部分不等式是因为:
−
4
γ
m
2
∈
(
−
1
,
0
)
,
构
造
x
=
−
4
γ
m
2
,
f
(
x
)
=
e
x
−
x
,
f
′
(
x
)
=
e
x
−
1
,
∴
x
∈
(
−
1
,
0
)
时
,
f
(
x
)
单
调
递
减
-4\gamma_m^2\in(-1,0),构造x=-4\gamma_m^2,f(x)=e^x-x,f'(x)=e^x-1,∴x\in(-1,0)时,f(x)单调递减
−4γm2∈(−1,0),构造x=−4γm2,f(x)=ex−x,f′(x)=ex−1,∴x∈(−1,0)时,f(x)单调递减
∴
f
(
x
)
≥
f
(
0
)
=
1
⇒
e
−
4
γ
m
2
+
4
γ
m
2
≥
1
⇒
e
−
2
γ
m
2
≥
1
−
4
γ
m
2
⇒
∏
m
=
1
M
1
−
4
γ
m
2
≤
exp
(
−
2
∑
m
=
1
M
γ
m
2
)
∴f(x)≥f(0)=1\Rightarrow e^{-4\gamma_m^2}+4\gamma_m^2≥1\Rightarrow e^{-2\gamma_m^2}≥\sqrt{1-4\gamma_m^2}\Rightarrow \prod_{m=1}^M \sqrt{1-4\gamma_m^2}≤\exp(-2\sum_{m=1}^M \gamma_m^2)
∴f(x)≥f(0)=1⇒e−4γm2+4γm2≥1⇒e−2γm2≥1−4γm2⇒m=1∏M1−4γm2≤exp(−2m=1∑Mγm2)
但是其实,AdaBoost算法的使用并不需要知道下界 γ \gamma γ,因为其具有自适应能力,所以才叫Ada(Adaptive)
2.3 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是基函数的系数。对于损失函数极小化的优化问题:
min
β
m
,
γ
m
∑
i
=
1
N
L
(
y
i
,
∑
m
=
1
M
β
m
b
(
x
i
;
γ
m
)
)
,
分
步
后
简
化
为
min
β
m
,
γ
m
∑
i
=
1
N
L
(
y
i
,
β
m
b
(
x
i
;
γ
m
)
)
\min\limits_{\beta_m,\gamma_m}\sum_{i=1}^N L(y_i,\sum_{m=1}^M\beta_mb(x_i;\gamma_m)),分步后简化为\min\limits_{\beta_m,\gamma_m}\sum_{i=1}^N L(y_i,\beta_mb(x_i;\gamma_m))
βm,γmmini=1∑NL(yi,m=1∑Mβmb(xi;γm)),分步后简化为βm,γmmini=1∑NL(yi,βmb(xi;γm))
上述优化问题是非常复杂的。前向分步算法解决上述问题的方式是,因为学习是的加法模型,如果从前向后,每步只学习一个基函数及其系数,逐步逼近优化目标,那么就可以简化问题的求解。
前向分步算法步骤:
- 输入:训练数据集 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)},其中 x i ∈ X ∈ ℜ n , y i ∈ { − 1 , + 1 } x_i\in X\in \real^n,y_i\in\{-1,+1\} xi∈X∈ℜn,yi∈{−1,+1};损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x));基函数集 { b ( x ; γ ) } \{b(x;\gamma)\} {b(x;γ)};
- 输出:加法模型 f ( x ) f(x) f(x);
- 初始化 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0;
- 对m=1,2,…,M,进行如下操作:
a. 极小化损失函数
( β m , γ m ) = arg min β , γ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β b ( x i ; γ ) ) (\beta_m,\gamma_m)=\arg\min\limits_{\beta,\gamma}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+\beta b(x_i;\gamma)) (βm,γm)=argβ,γmini=1∑NL(yi,fm−1(xi)+βb(xi;γ))
得到参数 β m , γ m \beta_m,\gamma_m βm,γm
b. 更新加法模型:
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)=fm−1(x)+βmb(x;γm) - 得到最终的加法模型 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算法
AdaBoost算法是前向分步算法的特例,其中,加法模型是由基本分类器(弱分类器)组成的加法模型,损失函数是指数函数。
证明:
加法模型是由基本分类器(弱分类器)组成的加法模型,这一句话是很直观的,无需证明。主要要证明损失函数是指数函数
L
(
y
,
f
(
x
)
)
=
exp
(
−
y
f
(
x
)
)
L(y,f(x))=\exp(-yf(x))
L(y,f(x))=exp(−yf(x))。
假设,已经完成m-1次前向分步算法的迭代,得到
f
m
−
1
(
x
)
=
α
1
G
1
(
x
)
+
.
.
.
+
α
m
−
1
G
m
−
1
(
x
)
f_{m-1}(x)=\alpha_1G_1(x)+...+\alpha_{m-1}G_{m-1}(x)
fm−1(x)=α1G1(x)+...+αm−1Gm−1(x),其中,
α
\alpha
α相当于前向分步算法中的
β
\beta
β。
那么,在第m轮中,希望得到
α
m
,
G
m
(
x
)
\alpha_m,G_m(x)
αm,Gm(x)使得
f
m
(
x
)
=
f
m
−
1
(
x
)
+
α
m
G
m
(
x
)
f_m(x)=f_{m-1}(x)+\alpha_mG_m(x)
fm(x)=fm−1(x)+αmGm(x)在训练数据集T上的指数损失最小,即
(
α
m
,
G
m
(
x
)
)
=
arg
min
α
m
,
G
m
∑
i
=
1
N
exp
[
−
y
i
(
f
m
−
1
(
x
i
)
+
α
m
G
m
(
x
i
)
)
]
=
arg
min
α
m
,
G
m
∑
i
=
1
N
w
ˉ
m
i
exp
[
−
y
i
α
m
G
m
(
x
i
)
]
(\alpha_m,G_m(x))=\arg\min\limits_{\alpha_m,G_m}\sum_{i=1}^N \exp[-y_i(f_{m-1}(x_i)+\alpha_m G_m(x_i))]=\arg\min\limits_{\alpha_m,G_m}\sum_{i=1}^N \bar{w}_{mi}\exp[-y_i\alpha_m G_m(x_i)]
(αm,Gm(x))=argαm,Gmmini=1∑Nexp[−yi(fm−1(xi)+αmGm(xi))]=argαm,Gmmini=1∑Nwˉmiexp[−yiαmGm(xi)]
其中,
w
ˉ
m
i
=
exp
[
−
y
i
f
m
−
1
(
x
i
)
]
\bar{w}_{mi}=\exp[-y_if_{m-1}(x_i)]
wˉmi=exp[−yifm−1(xi)]。因为
w
ˉ
m
i
\bar{w}_{mi}
wˉmi既不依赖
α
\alpha
α也不依赖G,所以与最小化无关。下面证明让上式达到最小的优化问题得到的
α
m
∗
,
G
m
∗
(
x
)
\alpha_m^*,G_m^*(x)
αm∗,Gm∗(x)就是AdaBoost算法得到的
α
m
,
G
m
(
x
)
\alpha_m,G_m(x)
αm,Gm(x)。
首先求解
G
m
∗
(
x
)
G_m^*(x)
Gm∗(x),观察上式可知,只要
α
m
>
0
\alpha_m>0
αm>0,那么,想要让目标函数取最小值,则
G
m
(
x
)
G_m(x)
Gm(x)分类正确的数量要越多越好,这样才能使
−
y
i
α
m
G
m
(
x
i
)
<
0
-y_i\alpha_m G_m(x_i)<0
−yiαmGm(xi)<0。另外,在
G
m
(
x
)
G_m(x)
Gm(x)错误分类的样本中,样本对应的权值应该越小越好,这表示分类器分类错的样本并不是很重要的样本,所以写成数学表达式为:
G
m
∗
(
x
)
=
arg
min
G
m
∑
i
=
1
N
w
ˉ
m
i
I
(
y
i
≠
G
(
x
i
)
)
G_m^*(x)=\arg\min\limits_{G_m}\sum_{i=1}^N\bar{w}_{mi}I(y_i≠G(x_i))
Gm∗(x)=argGmmini=1∑NwˉmiI(yi̸=G(xi))
这时,分类器
G
m
∗
(
x
)
G_m^*(x)
Gm∗(x)就是AdaBoost算法中的基本分类器
G
m
(
x
)
G_m(x)
Gm(x),因为是使第m轮加权训练数据分类误差率最小的基本分类器。(补充说明一下,这里的
G
m
(
x
)
G_m(x)
Gm(x)在AdaBoost算法中是用弱学习模型根据带权值的样本数据学习得到的,即AdaBoost算法步骤中的2-1).,即使是弱学习模型,对数据进行训练得到最终的分类器,也肯定是针对当前样本集能得到最优的误差率,只是因为它是弱学习模型,所以最优的误差率也不是非常理想罢了。所以,上述推导中的
G
m
∗
(
x
)
G_m^*(x)
Gm∗(x)要求的也是当前带权样本集误差率最小的分类器,所以两者是等价的)
之后,由于
α
m
∗
\alpha^*_m
αm∗不影响
G
m
∗
(
x
)
G_m^*(x)
Gm∗(x)的最优解,所以
G
m
∗
(
x
)
G_m^*(x)
Gm∗(x)当做已知。求
α
m
∗
\alpha^*_m
αm∗。
∵
∑
i
=
1
N
w
ˉ
m
i
exp
[
−
y
i
α
m
G
m
(
x
i
)
]
=
∑
y
i
=
G
m
(
x
i
)
w
ˉ
m
i
e
−
α
m
+
∑
y
i
≠
G
m
(
x
i
)
w
ˉ
m
i
e
α
m
=
(
e
α
m
−
e
−
α
m
)
∑
i
=
1
N
w
ˉ
m
i
I
(
y
i
≠
G
(
x
i
)
)
+
e
−
α
m
∑
i
=
1
N
w
ˉ
m
i
∵\sum_{i=1}^N \bar{w}_{mi}\exp[-y_i\alpha_m G_m(x_i)]=\sum_{y_i=G_m(x_i)} \bar{w}_{mi}e^{-\alpha_m}+\sum_{y_i≠G_m(x_i)} \bar{w}_{mi}e^{\alpha_m}=(e^{\alpha_m}-e^{-\alpha_m})\sum_{i=1}^N \bar{w}_{mi}I(y_i≠G(x_i))+e^{-\alpha_m}\sum_{i=1}^N \bar{w}_{mi}
∵i=1∑Nwˉmiexp[−yiαmGm(xi)]=yi=Gm(xi)∑wˉmie−αm+yi̸=Gm(xi)∑wˉmieαm=(eαm−e−αm)i=1∑NwˉmiI(yi̸=G(xi))+e−αmi=1∑Nwˉmi
上
式
对
α
m
求
导
取
0
后
得
:
(
e
α
m
+
e
−
α
m
)
∑
i
=
1
N
w
ˉ
m
i
I
(
y
i
≠
G
(
x
i
)
)
−
e
−
α
m
∑
i
=
1
N
w
ˉ
m
i
=
0
上式对\alpha_m求导取0后得:(e^{\alpha_m}+e^{-\alpha_m})\sum_{i=1}^N \bar{w}_{mi}I(y_i≠G(x_i))-e^{-\alpha_m}\sum_{i=1}^N \bar{w}_{mi}=0
上式对αm求导取0后得:(eαm+e−αm)i=1∑NwˉmiI(yi̸=G(xi))−e−αmi=1∑Nwˉmi=0
∴
(
e
α
m
+
e
−
α
m
)
∑
i
=
1
N
w
ˉ
m
i
I
(
y
i
≠
G
(
x
i
)
)
=
e
−
α
m
∑
i
=
1
N
w
ˉ
m
i
,
又
∵
e
m
=
∑
i
=
1
N
w
ˉ
m
i
I
(
y
i
≠
G
(
x
i
)
)
,
∑
i
=
1
N
w
ˉ
m
i
=
1
∴(e^{\alpha_m}+e^{-\alpha_m})\sum_{i=1}^N \bar{w}_{mi}I(y_i≠G(x_i))=e^{-\alpha_m}\sum_{i=1}^N \bar{w}_{mi},又∵e_m=\sum_{i=1}^N \bar{w}_{mi}I(y_i≠G(x_i)),\sum_{i=1}^N \bar{w}_{mi}=1
∴(eαm+e−αm)i=1∑NwˉmiI(yi̸=G(xi))=e−αmi=1∑Nwˉmi,又∵em=i=1∑NwˉmiI(yi̸=G(xi)),i=1∑Nwˉmi=1
∴
(
e
α
m
+
e
−
α
m
)
e
m
=
e
−
α
m
⇒
(
e
2
α
m
+
1
)
e
m
=
1
⇒
α
m
∗
=
1
2
ln
1
−
e
m
e
m
∴(e^{\alpha_m}+e^{-\alpha_m})e_m=e^{-\alpha_m}\Rightarrow (e^{2\alpha_m}+1)e_m=1\Rightarrow \alpha_m^*=\frac{1}{2}\ln\frac{1-e_m}{e_m}
∴(eαm+e−αm)em=e−αm⇒(e2αm+1)em=1⇒αm∗=21lnem1−em
上述推导中的
e
m
e_m
em和AdaBoost算法中的
e
m
e_m
em是一模一样的,但是在倒数第二行增加了一个条件,就是
∑
i
=
1
N
w
ˉ
m
i
=
1
\sum_{i=1}^N \bar{w}_{mi}=1
∑i=1Nwˉmi=1,所以,在AdaBoost算法中,每次更新权值后,都要用归一化因子
Z
m
Z_m
Zm将权值归一化,才能满足上述条件,推导才能成立。由于AdaBoost算法最开始的权值分布是
w
1
i
=
1
N
w_{1i}=\frac{1}{N}
w1i=N1,初始化的权值即满足条件,而后续每次迭代都将权值进行归一化了,所以在上述推导中的
w
ˉ
m
i
\bar{w}_{mi}
wˉmi其实和AdaBoost算法中的
w
m
i
w_{mi}
wmi是等价的。
3.提升树
以决策树(通常是CART)为基函数的提升方法称为提升树。同CART,提升树也可以分为分类提升树和回归提升树。
首先确定初始提升树
f
0
(
x
)
=
0
f_0(x)=0
f0(x)=0,第m步的模型是
f
m
(
x
)
=
f
m
−
1
(
x
)
+
T
(
x
;
Θ
m
)
f_m(x)=f_{m-1}(x)+T(x;\Theta_m)
fm(x)=fm−1(x)+T(x;Θm),其中
f
m
−
1
(
x
)
f_{m-1}(x)
fm−1(x)是当前模型。然后经过经验风险极小化确定下一棵决策树的参数
Θ
m
\Theta_m
Θm:
Θ
^
m
=
arg
min
Θ
m
∑
i
=
1
N
L
(
y
i
,
f
m
−
1
(
x
i
)
+
T
(
x
i
;
Θ
m
)
)
\hat{\Theta}_m=\arg\min\limits_{\Theta_m}\sum_{i=1}^N L(y_i,f_{m-1}(x_i)+T(x_i;\Theta_m))
Θ^m=argΘmmini=1∑NL(yi,fm−1(xi)+T(xi;Θm))
3.1 二分类提升树
由于二分类问题,只需要将AdaBoost算法的基本分类器限制为二分类决策树即可,可以说,此时的提升树是AdaBoost算法的特例。此时模型的损失函数仍然是指数函数。
3.2 回归提升树
根据回归决策树模型可知,此时的基本分类器可以将输入空间划分为J个互不相交的区域
R
1
,
R
2
,
.
.
.
,
R
J
R_1,R_2,...,R_J
R1,R2,...,RJ,并且可以在每个区域确定对应的输出常量
c
j
c_j
cj,此时基本分类器可以表示为:
T
(
x
;
Θ
)
=
∑
j
=
1
J
c
j
I
(
x
∈
R
j
)
T(x;\Theta)=\sum_{j=1}^J c_jI(x\in R_j)
T(x;Θ)=j=1∑JcjI(x∈Rj)
回归提升树算法步骤的前半部和上文一样,唯一的区别是采用的损失函数不是指数函数,而是平方误差损失函数(也可用其他更一般的损失函数)。此时有:
L
(
y
i
,
f
m
−
1
(
x
i
)
+
T
(
x
i
;
Θ
m
)
)
=
[
y
−
f
m
−
1
(
x
)
−
T
(
x
;
Θ
m
)
]
2
=
[
r
−
T
(
x
;
Θ
m
)
]
2
L(y_i,f_{m-1}(x_i)+T(x_i;\Theta_m))=[y-f_{m-1}(x)-T(x;\Theta_m)]^2=[r-T(x;\Theta_m)]^2
L(yi,fm−1(xi)+T(xi;Θm))=[y−fm−1(x)−T(x;Θm)]2=[r−T(x;Θm)]2
其中
r
=
y
−
f
m
−
1
(
x
)
r=y-f_{m-1}(x)
r=y−fm−1(x),是当前模型拟合数据的残差。所以,对于回归问题的提升树算法来说,只需简单地拟合当前模型的残差即可。
回归提升树算法的具体步骤:
- 输入:训练数据集 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)},其中 x i ∈ X ⊆ ℜ n , y i ∈ Γ ⊆ R x_i\in X\subseteq \real^n,y_i\in\Gamma\subseteq R xi∈X⊆ℜn,yi∈Γ⊆R;
- 输出:提升树 f M ( x ) f_M(x) fM(x)
- 初始化$f_0(x)=0;
- 对m=1,2,…,M,进行以下操作:
a. 计算残差 r m i = y i − f m − 1 ( x i ) , i = 1 , 2 , . . . , N r_{mi}=y_i-f_{m-1}(x_i),i=1,2,...,N rmi=yi−fm−1(xi),i=1,2,...,N
b. 拟合残差 r m i r_{mi} rmi学习一个回归树,得到 T ( x ; Θ m ) T(x;\Theta_m) T(x;Θm)
c. 更新 f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m ) f_m(x)=f_{m-1}(x)+T(x;\Theta_m) fm(x)=fm−1(x)+T(x;Θm) - 得到回归问题提升树: f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) f_M(x)=\sum_{m=1}^MT(x;\Theta_m) fM(x)=∑m=1MT(x;Θm)
3.3 梯度提升回归树(GDBT,Gradient Descent Boosting Tree)
对于平方差损失或指数函数损失,提升树模型的过程都是比较简单的。但是如果损失函数转变为更一般的函数,那很可能每一步的优化就不会那么容易。因此Freidman提出了梯度提升算法,利用最速下降法的近似方法,其关键是利用损失函数的负梯度在当前模型的值
−
[
∂
L
(
y
,
f
(
x
i
)
)
∂
f
(
x
i
)
]
f
(
x
)
=
f
m
−
1
(
x
)
-\bigg[\frac{\partial L(y,f(x_i))}{\partial f(x_i)}\bigg]_{f(x)=f_{m-1}(x)}
−[∂f(xi)∂L(y,f(xi))]f(x)=fm−1(x)
作为回归问题提升树算法中的残差近似值,拟合回归树。
梯度提升树算法的步骤:
- 训练数据集 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)},其中 x i ∈ X ⊆ ℜ n , y i ∈ Γ ⊆ R x_i\in X\subseteq \real^n,y_i\in\Gamma\subseteq R xi∈X⊆ℜn,yi∈Γ⊆R;损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x));
- 输出:回归树 f ^ ( x ) \hat{f}(x) f^(x)
- 初始化: f 0 ( x ) = arg min c ∑ i = 1 N L ( y i , c ) f_0(x)=\arg\min\limits_c \sum_{i=1}^NL(y_i,c) f0(x)=argcmin∑i=1NL(yi,c),即初始化为一个让损失函数最小的常数;
- 对m=1,2,…,M,进行如下操作:
a. 对i=1,2,…,N,计算残差近似值:
r m i = − [ ∂ L ( y , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) r_{mi}=-\bigg[\frac{\partial L(y,f(x_i))}{\partial f(x_i)}\bigg]_{f(x)=f_{m-1}(x)} rmi=−[∂f(xi)∂L(y,f(xi))]f(x)=fm−1(x)
b. 对 r m i r_{mi} rmi拟合一个回归树,得到第m棵树的叶节点划分区域 R m j , j = 1 , 2 , . . . , J R_{mj},j=1,2,...,J Rmj,j=1,2,...,J
c. 对 j = 1 , 2 , . . . , J j=1,2,...,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\min\limits_c \sum_{x_i\in R_{mj}} L(y_i,f_{m-1}(x_i)+c) cmj=argcminxi∈Rmj∑L(yi,fm−1(xi)+c)
d. 更新 f m ( x ) = f m − 1 ( x ) + ∑ j = 1 J c m j I ( x ∈ R m j ) f_m(x)=f_{m-1}(x)+\sum_{j=1}^J c_{mj}I(x\in R_{mj}) fm(x)=fm−1(x)+∑j=1JcmjI(x∈Rmj) - 得到最终的GDBT: f ^ ( x ) = f M ( x ) = ∑ m = 1 M ∑ j = 1 J c m j I ( x ∈ R m j ) \hat{f}(x)=f_M(x)=\sum_{m=1}^M\sum_{j=1}^J c_{mj}I(x\in R_{mj}) f^(x)=fM(x)=∑m=1M∑j=1JcmjI(x∈Rmj)