文章目录
提升方法内容较多,方便阅读,分成2个部分
下接:08_提升方法Boosting2_统计学习方法,主要讲解GBDT
一、Boosting和集成学习介绍
提升(Boosting)方法是一种常用的统计学习方法,应用广泛且有效。在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能。如果把这个思想再拓展下,也就是约束的条件更少些的话,将引出集成学习思想,训练若干个体学习器,通过一定的结合策略,最终形成一个强学习器。在详细讲解boosting之前,介绍下集成学习。集成学习模型如下图:
强可学习:在概率近似正确(probably approximately correct,PAC)学习的框架中,一个概念(一个类),如果存在一个多项式的学习算法能够学习它,并且正确率很高,那么称这个概念是强可学习的。
弱可学习:一个概念,如果存在一个多项式的学习算法能够学习它,学习的正确率仅比随机猜测略好,那么称这个概念是弱可学习的。
强可学习和弱可学习:Schapire证明了强可学习与弱可学习是等价的,也就是说,在PAC学习的框架下,一个概念是强可学习的充要条件是这个概念是弱可学习的。
弱学习到强学习:将“弱学习”提升为“强学习”,弱学习算法通常比强学习算法容易得多。具体如何实施提升,便是集成学习要解决的问题。
Boosting是一种基学习器同质,串行生成个体学习器的集成学习方法。Boosting就是从弱学习算法出发,反复学习,得到一系列弱分类器(又称为基学习器),然后组合这些弱学习器,构成一个强学习器。大多数的Boosting都是改变训练数据的概率分布(训练数据的权重分布),针对不同的训练数据分布,调用弱学习算法学习一系列弱学习器。这里就有两个问题。
- (1)在每一轮如何改变训练数据的权值或概率分布?
- (2)如何将弱学习器组合成一个强学习器?
下面以具体算法对Boosting进行具体说明。
二、AdaBoost
1、AdaBoost算法
关于第1个问题,AdaBoost的做法是,提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。这样一来,那些没有得到正确分类的数据,由于其权值的加大而受到后一轮弱分类器的更大关注。于是,分类问题被一系列的弱分类器“分而治之”。
关于第2个问题,即弱分类器的组合,AdaBoost采取的是加权投票法,即线性组合构建最终的分类器。具体地,加大分类误差率小的弱分类器的权值,使其在投票中起较大的作用,减小分类误差率大的弱分类器的权值,使其在投票中起较小的作用。
(1)AdaBoost算法的三要素
- 模型:加法模型,最终的强分类器是若干个弱分类器加权平均而得到的,基学习器类别不定。
- 策略:极小化加法模型的指数损失。
- 算法:前向分步学习算法,我们的算法是通过一轮轮的弱分类器学习,每一轮选择加权训练数据分类误差率最小的弱分类器,利用前一个弱分类器的结果来更新后一个弱分类器的训练集权重。
(2)AdaBoost模型定义
根据AdaBoost的模型,我们可以定义AdaBoost的最终分类器为:
G
(
x
)
=
s
i
g
n
(
f
(
x
)
)
=
s
i
g
n
(
∑
m
=
1
M
α
m
G
m
(
x
)
)
(1)
G(x) = sign(f(x)) = sign\left( \sum_{m=1}^M \alpha_m G_m(x)\right) \tag{1}
G(x)=sign(f(x))=sign(m=1∑MαmGm(x))(1)
- G m ( x ) G_m(x) Gm(x)为第m个弱分类器, m = 1 , 2 , ⋯ , M m = 1,2,\cdots , M m=1,2,⋯,M
- α m \alpha_m αm为第m个弱分类器的权重系数
下图显示通过将弱学习器加权组合就能生成具有复杂边界的强学习器
(3)AdaBoost损失函数定义
根据分类器的定义,可以得到第
m
−
1
m-1
m−1轮的强分类器为:
f
m
−
1
(
x
)
=
∑
i
=
1
m
−
1
α
i
G
i
(
x
)
f_{m-1}(x) = \sum_{i=1}^{m-1} \alpha_i G_i(x)
fm−1(x)=i=1∑m−1αiGi(x)
后一轮的权重系数是根据上一轮的强分类器学习情况得出的,则能得到第
m
m
m轮权重系数
α
m
\alpha_m
αm。
在第
m
m
m轮的弱分类器为
G
m
(
x
)
G_m(x)
Gm(x),则强分类器为:
f
m
(
x
)
=
f
m
−
1
(
x
)
+
α
m
G
m
(
x
)
(2)
f_m(x) = f_{m-1}(x) + \alpha_m G_m(x) \tag{2}
fm(x)=fm−1(x)+αmGm(x)(2)
则有第
m
m
m轮的强分类器
f
m
(
x
)
f_m(x)
fm(x)在训练数据集
T
T
T上的指数损失函数为:
a
r
g
min
∑
i
=
1
N
e
x
p
[
−
y
i
f
m
(
x
i
)
]
=
min
∑
i
=
1
N
e
x
p
[
−
y
i
(
f
m
−
1
(
x
i
)
+
α
m
G
m
(
x
i
)
)
]
(
3
)
=
min
α
,
G
∑
i
=
1
N
w
ˉ
m
,
i
e
x
p
[
−
α
m
y
i
G
m
(
x
i
)
)
]
(
4
)
\begin{aligned} arg \space & \min \sum_{i=1}^N exp[-y_i f_m(x_i)]\\ = & \min \sum_{i=1}^N exp[-y_i (f_{m-1}(x_i) + \alpha_m G_m(x_i))] &\space\space (3)\\ = & \min_{\alpha,G} \sum_{i=1}^N \bar w_{m,i}\space exp[ -\alpha_m y_i G_m(x_i))] &\space\space (4)\\ \end{aligned}
arg ==mini=1∑Nexp[−yifm(xi)]mini=1∑Nexp[−yi(fm−1(xi)+αmGm(xi))]α,Gmini=1∑Nwˉm,i exp[−αmyiGm(xi))] (3) (4)
- w ˉ m , i = e x p [ − y i f m − 1 ( x i ) ] \bar w_{m,i} = exp[-y_i\space f_{m-1}(x_i)] wˉm,i=exp[−yi fm−1(xi)]
- 因为 w ˉ m , i \bar w_{m,i} wˉm,i既不依赖 α m \alpha_m αm也不依赖于 G m ( x ) G_m(x) Gm(x),所以在第 m m m轮求最小化时可以当作固定值看待。这也解释了为什么可以使用前向分步算法作为优化求解算法。
- w ˉ m , i \bar w_{m,i} wˉm,i依赖于 f m − 1 ( x i ) f_{m-1}(x_i) fm−1(xi),随着每一轮迭代而发生变化。
(4)AdaBoost采用指数损失的原因
这部分内容来自博客集成学习之Boosting —— AdaBoost原理。
若将指数损失表示为期望值的形式:
E
(
e
−
y
f
(
x
)
∣
x
)
=
P
(
y
=
1
∣
x
)
e
−
f
(
x
)
+
P
(
y
=
−
1
∣
x
)
e
f
(
x
)
E(e^{-yf(x)}|x) = P(y=1|x)e^{-f(x)} + P(y=-1|x)e^{f(x)}
E(e−yf(x)∣x)=P(y=1∣x)e−f(x)+P(y=−1∣x)ef(x)
由于是最小化指数损失,则将上式求导并令其为0:
∂
E
(
e
−
y
f
(
x
)
∣
x
)
∂
f
(
x
)
=
−
P
(
y
=
1
∣
x
)
e
−
f
(
x
)
+
P
(
y
=
−
1
∣
x
)
e
f
(
x
)
=
0
\dfrac{\partial E(e^{-yf(x)}|x)}{\partial f(x)} = -P(y=1|x)e^{-f(x)} + P(y=-1|x)e^{f(x)} = 0
∂f(x)∂E(e−yf(x)∣x)=−P(y=1∣x)e−f(x)+P(y=−1∣x)ef(x)=0
f
(
x
)
=
1
2
l
n
P
(
y
=
1
∣
x
)
P
(
y
=
−
1
∣
x
)
f(x) = \dfrac{1}{2}ln\dfrac{P(y=1|x)}{P(y=-1|x)}
f(x)=21lnP(y=−1∣x)P(y=1∣x),或写成
P
(
y
=
1
∣
x
)
=
1
1
+
e
−
2
f
(
x
)
P(y=1|x) = \dfrac{1}{1+e^{-2f(x)}}
P(y=1∣x)=1+e−2f(x)1
仔细看,这不就是logistic regression吗?二者只差系数
1
2
\dfrac{1}{2}
21,因此每一轮最小化指数损失其实就是在训练一个logistic regression模型,以逼近对数几率 (log odds)。
于是:
s
i
g
n
(
f
(
x
)
)
=
s
i
g
n
(
1
2
l
n
P
(
y
=
1
∣
x
)
P
(
y
=
−
1
∣
x
)
)
=
{
1
,
P
(
y
=
1
∣
x
)
>
P
(
y
=
−
1
∣
x
)
−
1
,
P
(
y
=
1
∣
x
)
<
P
(
y
=
−
1
∣
x
)
\begin{aligned} sign(f(x)) & = sign(\dfrac{1}{2}ln\dfrac{P(y=1|x)}{P(y=-1|x)}) \\ & = \begin{cases} 1, & P(y = 1|x) > P(y= -1|x) \\[2ex] -1, & P(y = 1|x) < P(y= -1|x) \end{cases} \end{aligned}
sign(f(x))=sign(21lnP(y=−1∣x)P(y=1∣x))=⎩⎨⎧1,−1,P(y=1∣x)>P(y=−1∣x)P(y=1∣x)<P(y=−1∣x)
所以最小化
E
(
e
−
y
f
(
x
)
∣
x
)
E(e^{-yf(x)}|x)
E(e−yf(x)∣x)就相当于
a
r
g
max
y
∈
{
−
1
,
+
1
}
P
(
y
∣
x
)
arg\space \max_{y\in \{-1,+1\}} P(y|x)
arg maxy∈{−1,+1}P(y∣x),表明指数化损失函数也是能正确代替0-1损失函数作为优化目标。
这意味着 s i g n ( f ( x ) ) sign(f(x)) sign(f(x))达到了贝叶斯最优错误率,即对于每个样本 x x x都选择后验概率最大的类别。若指数损失最小化,则分类错误率也将最小化。这说明指数损失函数是分类任务原本0-1损失函数的一致性替代函数。由于这个替代函数是单调连续可微函数,具有更好的数学性质,因此用它代替0-1损失函数作为优化目标。
(5)第m轮的最优求解
1)求最优G_m
α m \alpha_m αm为第m个弱分类器的权重系数,这个参数的选择遵循的原则是,基分类器的学习效果越好权重占比会越大。第 m m m个基分类器 G m ( x ) G_m(x) Gm(x)的最优选择是跟第 m − 1 m-1 m−1轮学习完更新后的权值的训练数据有关。所以可以先计算 G m ∗ ( x ) G_m^*(x) Gm∗(x),并且任意 α m > 0 , w ˉ m , i > 0 \alpha_m > 0,\bar w_{m,i}>0 αm>0,wˉm,i>0,对于实际操作中若出现 α m ≤ 0 \alpha_m \leq 0 αm≤0的弱分类器则需要舍去。至于为什么舍去,把 α m \alpha_m αm计算出来意义就明了了。
G m ∗ ( x ) ≡ a r g min G ∑ i = 1 N w ˉ m , i e x p [ − α m y i 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 ( ∑ y i = G m ( x i ) w ˉ m , i + ∑ y i ≠ G m ( x i ) w ˉ m , i e 2 α m ) = e − α m ( ∑ i = 1 N w ˉ m , i − ∑ y i ≠ G m ( x i ) w ˉ m , i + ∑ y i ≠ G m ( x i ) w ˉ m , i e 2 α m ) = e − α m ( ∑ y i ≠ G m ( x i ) w ˉ m , i ( e 2 α m − 1 ) + ∑ i = 1 N w ˉ m , i ) ( 5 ) \begin{aligned} G_m^*(x) & \equiv arg\space \min_{G} \sum_{i=1}^N \bar w_{m,i} exp[ -\alpha_m y_i G_m(x_i))]\\ & = \sum_{y_i = G_m(x_i)} \bar w_{m,i} e^{-\alpha_m} + \sum_{y_i \not= G_m(x_i)} \bar w_{m,i} e^{\alpha_m} \\ & = e^{-\alpha_m} \left(\sum_{y_i = G_m(x_i)} \bar w_{m,i} + \sum_{y_i \not= G_m(x_i)}\bar w_{m,i} e^{2 \alpha_m} \right) \\ & = e^{-\alpha_m} \left(\sum_{i=1}^N \bar w_{m,i} - \sum_{y_i \not= G_m(x_i)} \bar w_{m,i} + \sum_{y_i \not= G_m(x_i)}\bar w_{m,i} e^{2 \alpha_m} \right) \\ & = e^{-\alpha_m} \left(\sum_{y_i \not= G_m(x_i)}\bar w_{m,i} (e^{2 \alpha_m}-1) + \sum_{i=1}^N \bar w_{m,i}\right) &\space\space (5) \end{aligned} Gm∗(x)≡arg Gmini=1∑Nwˉm,iexp[−αmyiGm(xi))]=yi=Gm(xi)∑wˉm,ie−αm+yi=Gm(xi)∑wˉm,ieαm=e−αm⎝⎛yi=Gm(xi)∑wˉm,i+yi=Gm(xi)∑wˉm,ie2αm⎠⎞=e−αm⎝⎛i=1∑Nwˉm,i−yi=Gm(xi)∑wˉm,i+yi=Gm(xi)∑wˉm,ie2αm⎠⎞=e−αm⎝⎛yi=Gm(xi)∑wˉm,i(e2αm−1)+i=1∑Nwˉm,i⎠⎞ (5)
因为
α
m
>
0
\alpha_m > 0
αm>0,所以:
e
−
α
m
>
0
,
e
2
α
m
>
1
e^{-\alpha_m} > 0,e^{2\alpha_m} >1
e−αm>0,e2αm>1
固定 α m \alpha_m αm,可得式(5)等价于:
G m ∗ ( x ) = a r g min G ∑ i = 1 N w ˉ m , i I ( y i ≠ G m ( x i ) ) (6) G_m^*(x) = arg\space \min_{G} \sum_{i=1}^N \bar w_{m,i}\space I( y_i \not= G_m(x_i)) \tag{6} Gm∗(x)=arg Gmini=1∑Nwˉm,i I(yi=Gm(xi))(6)
此分类器 G m ∗ ( x ) G_m^*(x) Gm∗(x)即为AdaBoost算法的第 m m m轮基分类器,因为它是使第 m m m轮加权训练数据分类误差率最小的基本分类器。
2)求最优α_m
α m ∗ ≡ a r g min α m ∑ i = 1 N w ˉ m , i e x p [ − α m y i G m ∗ ( x i ) ) ] = ∑ y i = G m ∗ ( x i ) w ˉ m , i e x p ( − α m ) + ∑ y i ≠ G m ∗ ( x i ) w ˉ m , i e x p ( α m ) = ( e α m − e − α m ) ∑ i = 1 N w ˉ m , i I ( y i ≠ G m ∗ ( x i ) ) + e − α m ∑ i = 1 N w ˉ m , i (7) \begin{aligned} \alpha_m^* & \equiv arg\space \min_{\alpha_m} \sum_{i=1}^N \bar w_{m,i}\space exp[ -\alpha_m y_i G_m^*(x_i))] \\ & = \sum_{y_i = G_m^*(x_i)} \bar w_{m,i}\space exp( -\alpha_m ) + \sum_{y_i \not= G_m^*(x_i)} \bar w_{m,i}\space exp( \alpha_m ) \\ & = (e^{\alpha_m } - e^{-\alpha_m })\sum_{i=1}^N \bar w_{m,i} I(y_i \not= G_m^*(x_i)) + e^{-\alpha_m}\space \sum_{i=1}^N \bar w_{m,i} \tag{7} \end{aligned} αm∗≡arg αmmini=1∑Nwˉm,i exp[−αmyiGm∗(xi))]=yi=Gm∗(xi)∑wˉm,i exp(−αm)+yi=Gm∗(xi)∑wˉm,i exp(αm)=(eαm−e−αm)i=1∑Nwˉm,iI(yi=Gm∗(xi))+e−αm i=1∑Nwˉm,i(7)
上式对
α
m
\alpha_m
αm求导并使导数为0,即得到最优的
α
m
∗
\alpha_m^*
αm∗:
α
m
∗
=
1
2
l
n
∑
y
i
=
G
m
∗
(
x
i
)
w
ˉ
m
,
i
∑
y
i
≠
G
m
∗
(
x
i
)
w
ˉ
m
,
i
=
1
2
l
n
∑
y
i
=
G
m
∗
(
x
i
)
w
m
,
i
∑
y
i
≠
G
m
∗
(
x
i
)
w
m
,
i
=
1
2
l
n
1
−
e
m
e
m
(8)
\alpha_m^* = \dfrac{1}{2}ln\dfrac{\sum_{y_i = G_m^*(x_i)} \bar w_{m,i}}{\sum_{y_i \not= G_m^*(x_i)} \bar w_{m,i}} = \dfrac{1}{2}ln\dfrac{\sum_{y_i = G_m^*(x_i)} w_{m,i}}{\sum_{y_i \not= G_m^*(x_i)} w_{m,i}} =\dfrac{1}{2}ln\dfrac{1-e_m}{e_m} \tag{8}
αm∗=21ln∑yi=Gm∗(xi)wˉm,i∑yi=Gm∗(xi)wˉm,i=21ln∑yi=Gm∗(xi)wm,i∑yi=Gm∗(xi)wm,i=21lnem1−em(8)
其中
e
m
e_m
em:
e
m
=
∑
i
=
1
N
w
ˉ
m
,
i
I
(
y
i
≠
G
m
∗
(
x
i
)
)
∑
i
=
1
N
w
ˉ
m
,
i
=
∑
i
=
1
N
w
m
,
i
I
(
y
i
≠
G
m
∗
(
x
i
)
)
(9)
e_m = \dfrac{\sum_{i=1}^N \bar w_{m,i} I(y_i \not= G_m^*(x_i))}{\sum_{i=1}^N \bar w_{m,i}} = \sum_{i=1}^N w_{m,i} I(y_i \not= G_m^*(x_i)) \tag{9}
em=∑i=1Nwˉm,i∑i=1Nwˉm,iI(yi=Gm∗(xi))=i=1∑Nwm,iI(yi=Gm∗(xi))(9)
- 规一化 w m , i = w ˉ m , i ∑ i = 1 N w ˉ m , i w_{m,i} = \dfrac {\bar w_{m,i}}{\sum_{i=1}^N \bar w_{m,i}} wm,i=∑i=1Nwˉm,iwˉm,i
- e m e_m em为第 m m m轮基分类器的分类误差率
- α m ∗ \alpha_m^* αm∗为第 m m m轮基分类器的权重系数
- 根据式(8)现在解释下为什么不能 α m ≤ 0 \alpha_m \leq 0 αm≤0,因为此时 e m ≥ 0.5 e_m \geq 0.5 em≥0.5,如果误差率大于等于0.5,则表示这个基分类器还不如随机预测的结果(二分类),如果加入到最终分类器中会严重影响分类器的性能,所以必须抛弃该弱分类器。
3)更新训练数据集的权值分布
所以可以求得第 m + 1 m+1 m+1轮的训练数据集的权值分布 w ˉ m + 1 , i \bar w_{m+1,i} wˉm+1,i:
w ˉ m + 1 , i = e x p [ − y i f m ( x i ) ] = e x p [ − y i ( f m − 1 ( x i ) + α m ∗ G m ∗ ( x ) ) ] = w ˉ m , i e x p [ − α m ∗ y i G m ∗ ( x i ) ] \bar w_{m+1,i} = exp[-y_i\space f_{m}(x_i)] = exp[-y_i\space (f_{m-1}(x_i) + \alpha_m^* G_m^*(x) )] = \bar w_{m,i}\space exp[-\alpha_m^* y_i G_m^*(x_i)] wˉm+1,i=exp[−yi fm(xi)]=exp[−yi (fm−1(xi)+αm∗Gm∗(x))]=wˉm,i exp[−αm∗yiGm∗(xi)]
在实际使用的时候会对 w ˉ m + 1 , i \bar w_{m+1,i} wˉm+1,i规范化,也就是归一化:
w
m
+
1
,
i
=
w
ˉ
m
+
1
,
i
∑
i
=
1
N
w
ˉ
m
+
1
,
i
=
w
ˉ
m
,
i
e
x
p
[
−
α
m
∗
y
i
G
m
∗
(
x
i
)
]
∑
i
=
1
N
w
ˉ
m
,
i
e
x
p
[
−
α
m
∗
y
i
G
m
∗
(
x
i
)
]
=
w
m
,
i
(
∑
i
=
1
N
w
ˉ
m
,
i
)
e
x
p
[
−
α
m
∗
y
i
G
m
∗
(
x
i
)
]
∑
i
=
1
N
w
m
,
i
(
∑
i
=
1
N
w
ˉ
m
,
i
)
e
x
p
[
−
α
m
∗
y
i
G
m
∗
(
x
i
)
]
=
w
m
,
i
e
x
p
[
−
α
m
∗
y
i
G
m
∗
(
x
i
)
]
∑
i
=
1
N
w
m
,
i
e
x
p
[
−
α
m
∗
y
i
G
m
∗
(
x
i
)
]
=
w
m
,
i
Z
m
e
x
p
[
−
α
m
∗
y
i
G
m
∗
(
x
i
)
]
=
{
w
m
,
i
Z
m
e
−
α
m
∗
,
y
i
=
G
m
∗
(
x
i
)
w
m
,
i
Z
m
e
α
m
∗
,
y
i
≠
G
m
∗
(
x
i
)
(10)
\begin{aligned}w_{m+1,i} & = \dfrac{\bar w_{m+1,i}}{\sum_{i=1}^N \bar w_{m+1,i}} = \dfrac{\bar w_{m,i}\space exp[-\alpha_m^* y_i G_m^*(x_i)]}{\sum_{i=1}^N \bar w_{m,i}\space exp[-\alpha_m^* y_i G_m^*(x_i)]} = \dfrac{w_{m,i}\left(\sum_{i=1}^N \bar w_{m,i}\right)exp[-\alpha_m^* y_i G_m^*(x_i)]}{\sum_{i=1}^N w_{m,i}\left(\sum_{i=1}^N \bar w_{m,i}\right)exp[-\alpha_m^* y_i G_m^*(x_i)]}\\ & = \dfrac{w_{m,i}\space exp[-\alpha_m^* y_i G_m^*(x_i)]}{\sum_{i=1}^N w_{m,i}\space exp[-\alpha_m^* y_i G_m^*(x_i)]}= \dfrac{w_{m,i}}{Z_m}exp[-\alpha_m^* y_i G_m^*(x_i)]\\ & = \begin{cases} \dfrac{w_{m,i}}{Z_m}e^{-\alpha_m^*}, & y_i = G_m^*(x_i) \\[2ex] \dfrac{w_{m,i}}{Z_m}e^{\alpha_m^*}, & y_i \not= G_m^*(x_i) \end{cases} \tag{10} \end{aligned}
wm+1,i=∑i=1Nwˉm+1,iwˉm+1,i=∑i=1Nwˉm,i exp[−αm∗yiGm∗(xi)]wˉm,i exp[−αm∗yiGm∗(xi)]=∑i=1Nwm,i(∑i=1Nwˉm,i)exp[−αm∗yiGm∗(xi)]wm,i(∑i=1Nwˉm,i)exp[−αm∗yiGm∗(xi)]=∑i=1Nwm,i exp[−αm∗yiGm∗(xi)]wm,i exp[−αm∗yiGm∗(xi)]=Zmwm,iexp[−αm∗yiGm∗(xi)]=⎩⎪⎨⎪⎧Zmwm,ie−αm∗,Zmwm,ieαm∗,yi=Gm∗(xi)yi=Gm∗(xi)(10)
这里,
Z
m
Z_m
Zm是规范因子
Z
m
=
∑
i
=
1
N
w
m
,
i
e
x
p
[
−
α
m
∗
y
i
G
m
∗
(
x
i
)
]
(11)
Z_m = \sum_{i=1}^N w_{m,i}\space exp[-\alpha_m^* y_i G_m^*(x_i)] \tag{11}
Zm=i=1∑Nwm,i exp[−αm∗yiGm∗(xi)](11)
- 初始化时 w 1 , i = 1 N w_{1,i} = \dfrac{1}{N} w1,i=N1,即每个样本同等重要,N为样本数量。
- 根据式(10)可以看出对于某个样本如果第 m m m轮分类正确,第 m + 1 m+1 m+1轮的w相比于本轮缩小 e α m ∗ e^{\alpha_m^*}\space eαm∗ 倍;如果分类错误,第 m + 1 m+1 m+1轮的w相比于第 m m m轮放大 e α m ∗ e^{\alpha_m^*}\space eαm∗ 倍。由于 w ˉ m , i = e x p [ − y i f m − 1 ( x i ) ] \bar w_{m,i} = exp[-y_i\space f_{m-1}(x_i)] wˉm,i=exp[−yi fm−1(xi)],损失函数 min ∑ i = 1 N e x p [ − y i f m ( x i ) ] = min ∑ i = 1 N w ˉ m , i e x p [ − α m y i G m ( x i ) ) ] \min \sum_{i=1}^N exp[-y_i f_m(x_i)] = \min \sum_{i=1}^N \bar w_{m,i}\space exp[ -\alpha_m y_i G_m(x_i))] min∑i=1Nexp[−yifm(xi)]=min∑i=1Nwˉm,i exp[−αmyiGm(xi))],也就是说第 m − 1 m-1 m−1轮某个样本的强分类器损失值就是第 m m m轮中该样本的占训练数据的权值。损失值越大,下一轮优化的时候占有的权重越大。
(6)AdaBoost正则化 (Regularization)
1)Shrinkage
为了防止AdaBoost过拟合,我们通常也会加入正则化项,这个正则化项我们通常称为步长(learning rate)。定义为
ν
\nu
ν,对于前面的弱学习器的迭代:
f
m
(
x
)
=
f
m
−
1
(
x
)
+
α
m
G
m
(
x
)
f_m(x) = f_{m-1}(x) + \alpha_m G_m(x)
fm(x)=fm−1(x)+αmGm(x)
如果加上正则化项,则有
f
m
(
x
)
=
f
m
−
1
(
x
)
+
ν
α
m
G
m
(
x
)
f_m(x) = f_{m-1}(x) + \nu\alpha_m G_m(x)
fm(x)=fm−1(x)+ναmGm(x)
ν
\nu
ν的取值范围为
0
<
ν
≤
1
0<\nu \leq 1
0<ν≤1。对于同样的训练集学习效果,较小的
ν
\nu
ν意味着需要更多的弱学习器的迭代次数。通常用步长和迭代最大次数一起来决定算法的拟合效果。
2)Early stopping
将数据集划分为训练集和测试集,在训练过程中不断检查在测试集上的表现,如果测试集上的准确率下降到一定阈值之下,则停止训练,选用当前的迭代次数M,这同样是防止过拟合的手段。
2、AdaBoost二分类问题算法流程
输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x N , y N ) } T = \{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\} T={(x1,y1),(x2,y2),⋯,(xN,yN)},其中 x i ∈ R n , y i ∈ { − 1 , + 1 } x_i \in {\bf R}^n,\space y_i \in \{-1,+1\} xi∈Rn, yi∈{−1,+1};弱学习算法;
输出:最终分类器 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
(12)
D_1 = (w_{11},\cdots ,w_{1i},\cdots ,w_{1N}),\space w_{1i} = \dfrac{1}{N},\space i = 1,2,\cdots ,N \tag{12}
D1=(w11,⋯,w1i,⋯,w1N), w1i=N1, i=1,2,⋯,N(12)
初始化时假设训练数据具有均匀的权值分布,即每个训练样本在基本分类器的学习中作用相同。
(2)对 m = 1 , 2 , ⋯ , M m = 1,2,\cdots,M m=1,2,⋯,M
- (a)使用具有权值分布 D m D_m Dm的训练数据集学习,得到基本分类器
G m ( x ) : X ⟶ { − 1 , + 1 } G_m(x):{\bf X}\longrightarrow \{-1,+1\} Gm(x):X⟶{−1,+1}- (b)计算 G m ( x ) G_m(x) Gm(x)在训练数据集上的分类误差率
e m = P ( G m ( x i ) ≠ y i ) = ∑ i = 1 N w m , i I ( G m ( x i ) ≠ y i ) (13) e_m = P(G_m(x_i) \not= y_i) = \sum_{i=1}^N w_{m,i} I(G_m(x_i) \not= y_i) \tag{13} em=P(Gm(xi)=yi)=i=1∑Nwm,iI(Gm(xi)=yi)(13)
其中 w m , i w_{m,i} wm,i就是根据上一轮分类预测情况更新后的训练数据权重。- (c) 计算 G m ( x ) G_m(x) Gm(x)的系数
α m = 1 2 l n 1 − e m e m (14) \alpha_m = \dfrac{1}{2}ln\dfrac{1-e_m}{e_m} \tag{14} αm=21lnem1−em(14)- (d)更新训练数据集的权值分布
D m + 1 = ( w m + 1 , 1 , ⋯ , w m + 1 , i , ⋯ , w m + 1 , N ) (15) D_{m+1} = (w_{m+1,1},\cdots,w_{m+1,i},\cdots,w_{m+1,N}) \tag{15} Dm+1=(wm+1,1,⋯,wm+1,i,⋯,wm+1,N)(15)
w m + 1 , i = w m , i Z m e x p ( − α m y i G m ( x i ) ) (16) w_{m+1,i} = \dfrac{w_{m,i}}{Z_m}exp(-\alpha_m y_i G_m(x_i)) \tag{16} wm+1,i=Zmwm,iexp(−αmyiGm(xi))(16)
这里, Z m Z_m Zm是规范因子
Z m = ∑ i = 1 N w m , i e x p ( − α m y i G m ( x i ) ) (17) Z_m = \sum_{i=1}^N w_{m,i} exp(-\alpha_m y_i G_m(x_i)) \tag{17} Zm=i=1∑Nwm,iexp(−αmyiGm(xi))(17)
它使 D m + 1 D_{m+1} Dm+1成为一个概率分布。
(3)构建基本分类器的线性组合
f
(
x
)
=
∑
m
=
1
M
α
m
G
m
(
x
)
(18)
f(x) = \sum_{m=1}^M \alpha_m G_m(x) \tag{18}
f(x)=m=1∑MαmGm(x)(18)
得到最终分类器
G
(
x
)
=
s
i
g
n
(
f
(
x
)
)
=
s
i
g
n
(
∑
m
=
1
M
α
m
G
m
(
x
)
)
(19)
G(x) = sign(f(x)) = sign\left( \sum_{m=1}^M \alpha_m G_m(x)\right) \tag{19}
G(x)=sign(f(x))=sign(m=1∑MαmGm(x))(19)
在学习AdaBoost的时候如果按教材的顺序一开始直接上AdaBoost算法流程,会有以下四个疑问:
- 1)分类误差率 e m e_m em为什么是这样计算?
- 2)弱学习器权重系数 α m \alpha_m αm为什么是这样计算?
- 3)训练数据集的权值分布 D m + 1 D_{m+1} Dm+1为什么是这样计算?
- 4)基本分类器为什么采用加权投票法结合策略?
后来看到第3节发现有对AdaBoost算法的解释,所以颠倒了下顺序。对于一个不熟悉的算法,从算法的三要素去了解就能知其大概。
AdaBoost算法的优缺点
主要优点:
- 1)Adaboost作为分类器时,分类精度很高
- 2)在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活。
- 3)作为简单的二元分类器时,构造简单,结构可理解。
- 4)不容易发生过拟合
主要缺点:
- 1)对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性
3、前向分步算法
一种求解损失函数的最优化方法,化整体为个体,简化求解过程。
考虑加法模型
f
(
x
)
=
∑
i
=
1
M
β
m
b
(
x
;
γ
m
)
f(x) = \sum_{i=1}^M \beta_m b(x;\gamma_m)
f(x)=i=1∑Mβ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))的条件下,学习加法模型 f ( x ) f(x) f(x)成为经验风险极小化即损失函数极小化问题:
min β m , γ m ∑ i = 1 N L ( y i , ∑ m = 1 M β m b ( x i ; γ m ) ) (20) \min_{\beta_m,\gamma_m} \sum_{i=1}^N L\left(y_i,\sum_{m=1}^M \beta_m b(x_i;\gamma_m) \right) \tag{20} βm,γmmini=1∑NL(yi,m=1∑Mβmb(xi;γm))(20)
通常这是一个复杂的优化问题。前向分步算法求解这一优化问题的思想是:因为学习的是加法模型,如果能够从前往后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数式(20),那么就可以简化优化的复杂度。具体地,每步只需优化如下损失函数:
min β , γ ∑ i = 1 N L ( y i , β b ( x i ; γ ) ) (21) \min_{\beta,\gamma} \sum_{i=1}^N L(y_i,\beta b(x_i;\gamma)) \tag{21} β,γmini=1∑NL(yi,βb(xi;γ))(21)
前向分步算法流程
输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x N , y N ) T = \{(x_1,y_1),(x_2,y_2),\cdots ,(x_N,y_N) T={(x1,y1),(x2,y2),⋯,(xN,yN);损失函数 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)。
(1)初始化 f 0 ( x ) = 0 f_0(x) = 0 f0(x)=0
(2)对 m = 1 , 2 , ⋯ , M m=1,2,\cdots ,M m=1,2,⋯,M
- (a)极小化损失函数
( β m , γ m ) = a r g min β , γ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β b ( x i . γ ) ) (\beta_m,\gamma_m) = arg\space \min_{\beta,\gamma}\sum_{i=1}^N L(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_m b(x;\gamma_m) fm(x)=fm−1(x)+βmb(x;γm)
(3)得到加法模型
f
(
x
)
=
f
M
(
x
)
=
∑
i
=
1
M
β
m
b
(
x
;
γ
m
)
f(x) = f_M(x)=\sum_{i=1}^M \beta_m b(x;\gamma_m)
f(x)=fM(x)=i=1∑Mβmb(x;γm)
这样,前向分步算法将同时求解从
m
=
1
m=1
m=1到
M
M
M所有参数
β
m
,
γ
m
\beta_m,\gamma_m
βm,γm的优化问题简化为逐次求解各个
β
m
,
γ
m
\beta_m,\gamma_m
βm,γm的优化问题。
4、AdaBoost算法的训练误差分析
AdaBoost最基本的性质是它能在学习过程中不断减少训练误差,即在训练数据集上的分类误差率。关于这个问题有下面的定理:
定理一(AdaBoost的训练误差界)AdaBoost算法最终分类器的训练误差界为:
1
N
∑
i
=
1
N
I
(
G
(
x
i
)
≠
y
i
)
≤
1
N
∑
i
e
x
p
(
−
y
i
f
(
x
i
)
)
=
∏
m
Z
m
(22)
\dfrac{1}{N}\sum_{i=1}^N I(G(x_i)\not= y_i) \leq \dfrac{1}{N}\sum_{i} exp(-y_i f(x_i)) = \prod_m Z_m \tag{22}
N1i=1∑NI(G(xi)=yi)≤N1i∑exp(−yif(xi))=m∏Zm(22)
证明:当 G ( x i ) ≠ y i G(x_i)\not= y_i G(xi)=yi时, − y i f ( x i ) > 0 -y_i f(x_i)>0 −yif(xi)>0,因而 e x p ( − y i f ( x i ) ) ≥ 1 exp(-y_i f(x_i)) \geq 1 exp(−yif(xi))≥1。由此直接推导出前半部分。
后半部分的推导要用到
Z
m
Z_m
Zm的定义:
w
m
,
i
e
x
p
(
−
α
m
y
i
G
m
(
x
i
)
)
=
Z
m
w
m
+
1
,
i
w_{m,i}\space exp(-\alpha_m y_i G_m(x_i)) = Z_m w_{m+1,i}
wm,i exp(−αmyiGm(xi))=Zmwm+1,i
具体的推导过程就不写出,有兴趣可以参见李航统计学习方法本节内容。
定理二(二分类问题AdaBoost的训练误差界):
∏
m
=
1
M
Z
m
=
∏
m
=
1
M
[
2
e
m
(
1
−
e
m
)
]
=
∏
m
=
1
M
1
−
4
γ
m
2
≤
e
x
p
(
−
2
∑
m
=
1
M
γ
m
2
)
(23)
\prod_{m=1}^M Z_m = \prod_{m=1}^M[2\sqrt{e_m(1-e_m)}\space ] = \prod_{m=1}^M \sqrt{1-4\gamma_m^2} \leq exp\left( -2\sum_{m=1}^M \gamma_m^2 \right) \tag{23}
m=1∏MZm=m=1∏M[2em(1−em) ]=m=1∏M1−4γm2≤exp(−2m=1∑Mγm2)(23)
这里,
γ
m
=
1
2
−
e
m
\gamma_m = \dfrac{1}{2} - e_m
γm=21−em
前半部分的推导要用到
Z
m
Z_m
Zm的定义:
Z
m
=
∑
i
=
1
N
w
m
,
i
e
x
p
(
−
α
m
y
i
G
m
(
x
i
)
)
Z_m = \sum_{i=1}^N w_{m,i}\space exp(-\alpha_m y_i G_m(x_i))
Zm=i=1∑Nwm,i exp(−αmyiGm(xi))
至于不等式
∏
m
=
1
M
1
−
4
γ
m
2
≤
e
x
p
(
−
2
∑
m
=
1
M
γ
m
2
)
\prod_{m=1}^M \sqrt{1-4\gamma_m^2} \leq exp\left( -2\sum_{m=1}^M \gamma_m^2 \right)
m=1∏M1−4γm2≤exp(−2m=1∑Mγm2)
则可先由
e
x
e^x
ex和
1
−
x
\sqrt{1-x}
1−x在点
x
=
0
x=0
x=0的泰勒展开式推出不等式
1
−
4
γ
m
2
≤
e
x
p
(
−
2
γ
m
2
)
\sqrt{1-4\gamma_m^2} \leq exp(-2\gamma_m^2)
1−4γm2≤exp(−2γm2),进而得到。
泰勒公式:
f
(
x
)
f(x)
f(x)在
a
a
a点的泰勒展开
f
(
x
)
=
∑
i
=
1
n
+
1
f
(
i
−
1
)
(
a
)
(
i
−
1
)
!
(
x
−
a
)
(
i
−
1
)
+
R
n
(
x
)
f(x) = \sum_{i=1}^{n+1} \dfrac{f^{(i-1)}(a)}{(i-1)!}(x-a)^{(i-1)} + R_n(x)
f(x)=i=1∑n+1(i−1)!f(i−1)(a)(x−a)(i−1)+Rn(x)
其中
f
(
i
−
1
)
(
a
)
f^{(i-1)}(a)
f(i−1)(a)为函数
f
(
x
)
f(x)
f(x)在a点的第
(
i
−
1
)
(i-1)
(i−1)阶导数,
f
(
0
)
(
a
)
=
f
(
a
)
f^{(0)}(a) = f(a)
f(0)(a)=f(a)。
推论1 如果存在
γ
>
0
\gamma >0
γ>0,对所有
m
m
m有
γ
m
≥
γ
\gamma_m \geq \gamma
γm≥γ,则
1
N
∑
i
=
1
N
I
(
G
(
x
i
)
≠
y
i
)
≤
e
x
p
(
−
2
M
γ
2
)
(24)
\dfrac{1}{N}\sum_{i=1}^N I(G(x_i)\not= y_i) \leq exp(-2M\gamma^2) \tag{24}
N1i=1∑NI(G(xi)=yi)≤exp(−2Mγ2)(24)
这表明在此条件下AdaBoost的训练误差是以指数速率下降的。这一性质非常具有吸引力。
注意,AdaBoost算法不需要知道下界 γ \gamma γ。
5、Adaboost回归问题的算法流程
回归问题与分类问题算法的不同点在于误差率计算的方式不同,分类问题一般都采用0/1损失函数,而回归问题一般都是平方损失函数或者是线性损失函数。
这一部分内容来自博客
AdaBoost回归算法变种很多,下面的算法为Adaboost R2回归算法过程。
输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x N , y N ) } T = \{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\} T={(x1,y1),(x2,y2),⋯,(xN,yN)},其中 x i ∈ R n , y i ∈ { − 1 , + 1 } x_i \in {\bf R}^n,\space y_i \in \{-1,+1\} xi∈Rn, yi∈{−1,+1};弱学习算法,弱学习器迭代次数M;
输出:最终分类器 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},\cdots ,w_{1i},\cdots ,w_{1N}),\space w_{1i} = \dfrac{1}{N},\space i = 1,2,\cdots ,N
D1=(w11,⋯,w1i,⋯,w1N), w1i=N1, i=1,2,⋯,N
初始化时假设训练数据具有均匀的权值分布,即每个训练样本在基本分类器的学习中作用相同。
(2)对 m = 1 , 2 , ⋯ , M m = 1,2,\cdots,M m=1,2,⋯,M
- (a)使用具有权值分布 D m D_m Dm的训练数据集学习,得到基本分类器
G m ( x ) : X ⟶ { − 1 , + 1 } G_m(x):{\bf X}\longrightarrow \{-1,+1\} Gm(x):X⟶{−1,+1}- (b)计算 G m ( x ) G_m(x) Gm(x)在训练数据集上的最大误差
E m = max ∣ y i − G m ( x i ) ∣ , i = 1 , 2 , ⋯ , N E_m = \max|y_i - G_m(x_i)|,i=1,2,\cdots , N Em=max∣yi−Gm(xi)∣,i=1,2,⋯,N- (c) 计算每个样本的相对误差:
如果是线性误差,则 e m , i = ∣ y i − G m ( x i ) ∣ E m e_{m,i} = \dfrac{|y_i - G_m(x_i)|}{E_m} em,i=Em∣yi−Gm(xi)∣;
如果是平方误差,则 e m , i = ( y i − G m ( x i ) ) 2 E m 2 e_{m,i} = \dfrac{(y_i - G_m(x_i))^2}{E_m^2} em,i=Em2(yi−Gm(xi))2;
如果是指数误差,则 e m , i = 1 − e x p ( − ∣ y i − G m ( x i ) ∣ E m ) e_{m,i} = 1- exp(\dfrac{-|y_i - G_m(x_i)|}{E_m}) em,i=1−exp(Em−∣yi−Gm(xi)∣)
- (d)计算回归误差率
e m = ∑ i = 1 N w m , i e m , i e_m = \sum_{i=1}^N w_{m,i} \space e_{m,i} em=∑i=1Nwm,i em,i- (e)计算弱学习器的系数
α m = e m 1 − e m \alpha_m = \dfrac{e_m}{1-e_m} αm=1−emem- (f)更新样本集的权重分布
w m + 1 , i = w m , i Z m α m 1 − e m , i w_{m+1,i} = \dfrac{w_{m,i}}{Z_m}\alpha_m^{1-e_{m,i}} wm+1,i=Zmwm,iαm1−em,i
这里 Z k Z_k Zk是规范化因子 Z m = ∑ i = 1 N w m , i α m 1 − e m , i Z_m = \sum_{i=1}^N w_{m,i}\alpha_m^{1-e_{m,i}} Zm=∑i=1Nwm,iαm1−em,i
(3)构建基学习器的线性组合
∑
i
=
1
M
α
m
G
m
(
x
)
\sum_{i=1}^M \alpha_m G_m(x)
∑i=1MαmGm(x),得到最终的强学习器:
G
(
x
)
=
∑
i
=
1
M
(
l
n
1
α
m
)
h
(
x
)
G(x) = \sum_{i=1}^M(ln\dfrac{1}{\alpha_m})h(x)
G(x)=i=1∑M(lnαm1)h(x)
其中,
h
(
x
)
h(x)
h(x)是所有
α
m
G
m
(
x
)
,
m
=
1
,
2
,
⋯
,
M
\alpha_m G_m(x),m=1,2,\cdots ,M
αmGm(x),m=1,2,⋯,M的中位数。
三、GBDT算法
参考资料:
- 统计学习方法——李航
- 刘建平Pinard集成学习原理小结
- 刘建平Pinard梯度提升树(GBDT)原理小结
- 统计学习方法–提升方法adaBoost算法(集成学习)
- 第八章Boosting提升方法