集成学习
提升方法通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能。
1 Adaboost算法
输入:训练数据集
T
T
T
输出:最终分类器
G
(
x
)
G(x)
G(x)
(1)初始化训练数据的权值分布
D
1
(
w
11
,
w
12
,
.
.
.
,
w
1
N
)
,
w
1
i
=
1
N
D_1(w_{11},w_{12},...,w_{1N}),w1i=\frac{1}{N}
D1(w11,w12,...,w1N),w1i=N1
(2)对
m
=
1
,
2
,
.
.
.
,
M
m=1,2,...,M
m=1,2,...,M
(a)使用具有权值分布的
D
m
D_m
Dm训练数据集学习,得到基本分类器
G
m
(
x
)
:
X
→
{
−
1
,
+
1
}
G_m(x):X \rightarrow\left\{-1,+1\right\}
Gm(x):X→{−1,+1}
&ensp(b)计算在
G
m
(
x
)
G_m(x)
Gm(x)训练数据集上的分类误差率
e
m
=
∑
i
=
1
N
P
(
G
m
(
x
)
≠
y
i
)
=
∑
i
=
1
N
w
m
i
I
(
G
m
(
x
)
≠
y
i
)
e_m=\sum_{i=1}^N P(G_m(x) \neq y_i)=\sum_{i=1}^N w_{mi}I(G_m(x) \neq y_i)
em=i=1∑NP(Gm(x)=yi)=i=1∑NwmiI(Gm(x)=yi)
©计算
G
m
(
x
)
G_m(x)
Gm(x)的系数
α
m
=
1
2
l
o
g
1
−
e
m
e
m
\alpha_m=\frac{1}{2}log\frac{1-e_m}{e_m}
αm=21logem1−em
(d)更新训练数据集的权值分布
D
m
+
1
=
(
w
m
+
1
,
1
,
.
.
.
,
w
m
+
1
,
N
)
D_{m+1}=(w_{m+1,1},...,w_{m+1,N})
Dm+1=(wm+1,1,...,wm+1,N)
w
m
+
1
,
i
=
w
m
i
Z
m
e
x
p
(
−
α
m
y
i
G
m
(
x
)
)
,
Z
m
为
规
范
因
子
w_{m+1,i}=\frac{w_{mi}}{Z_m}exp(-\alpha_my_iG_m(x)),Z_m为规范因子
wm+1,i=Zmwmiexp(−αmyiGm(x)),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_{mi}exp(-\alpha_my_iG_m(x_i))
Zm=i=1∑Nwmiexp(−αmyiGm(xi))
(3)构建基本分类器的线性组合
f
(
x
)
=
∑
m
=
1
M
α
m
G
m
(
x
)
f(x)=\sum_{m=1}^M \alpha_mG_m(x)
f(x)=m=1∑MαmGm(x)
G
(
x
)
=
s
i
g
n
(
f
(
x
)
)
=
s
i
g
n
(
∑
i
=
1
M
α
m
G
m
(
x
)
)
G(x)=sign(f(x))=sign(\sum_{i=1}^M \alpha_mG_m(x))
G(x)=sign(f(x))=sign(i=1∑MαmGm(x))
1.2 Adaoost算法的训练误差分析
Adaboost算法的误差界
1
N
∑
i
=
1
N
I
(
G
m
(
x
)
≠
y
i
)
≤
1
N
∑
i
e
x
p
(
−
y
i
f
(
x
i
)
)
=
Z
m
\frac1N \sum_{i=1}^N I(G_m(x) \neq y_i) \leq \frac 1N \sum_i exp(-y_if(x_i))=Z_m
N1i=1∑NI(Gm(x)=yi)≤N1i∑exp(−yif(xi))=Zm
二类分类问题Adaboost的训练误差界
∏
m
=
1
M
Z
m
=
∏
m
=
1
N
[
2
e
m
(
1
−
e
m
)
]
=
∏
m
=
1
M
1
=
4
γ
m
2
≤
e
x
p
(
−
1
∑
m
=
1
M
γ
m
2
)
γ
m
=
1
2
−
e
m
\prod_{m=1}^M Z_m=\prod_{m=1}^N[2\sqrt{e_m(1-e_m)}] \\=\prod_{m=1}^M \sqrt{1=4\gamma_m^2} \leq exp(-1\sum_{m=1}^M\gamma_m^2) \\\gamma_m=\frac12 -e_m
m=1∏MZm=m=1∏N[2em(1−em)]=m=1∏M1=4γm2≤exp(−1m=1∑Mγm2)γm=21−em
推论
1
N
∑
i
=
1
N
I
(
G
m
(
x
)
≠
y
i
)
≤
e
x
p
(
−
2
M
γ
2
)
\frac1N\sum_{i=1}^NI(G_m(x) \neq y_i) \leq exp(-2M\gamma^2)
N1i=1∑NI(Gm(x)=yi)≤exp(−2Mγ2)
1.3 Adaboost与前向分布算法
Adaboost算法的另一种解释,可以认为是一个加法模型,损失函数为指数函数,学习算法为二类分类学习算法。
前向分布算法
输入:训练集
T
T
T,损失函数
L
L
L,基函数集
{
b
(
x
;
γ
)
}
\left\{b(x;\gamma)\right\}
{b(x;γ)}
输出:加法模型
f
(
x
)
f(x)
f(x)
(1)初始化
f
0
(
x
)
=
0
f_0(x)=0
f0(x)=0;
(2)对m=1,2,3,…,M
(a)极小化损失函数
(
β
m
,
γ
m
)
=
a
r
g
m
i
n
β
,
γ
∑
i
=
1
N
L
(
y
i
,
f
m
−
1
(
x
i
)
+
β
(
x
i
,
γ
)
)
(\beta_m,\gamma_m)=argmin_{\beta,\gamma}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+\beta(x_i,\gamma))
(βm,γm)=argminβ,γi=1∑NL(yi,fm−1(xi)+β(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
)
=
∑
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=1∑Mβmb(x;γm)
2 提升树
2.1 提升树算法
提升树是以分类树或回归树为基本分类器的提升方法。提升树模型可以表示为决策树的加法模型:
f
M
(
x
)
=
∑
m
−
1
M
T
(
x
;
Θ
m
)
f_M(x)=\sum_{m-1}^MT(x;\Theta_m)
fM(x)=m−1∑MT(x;Θm)
其中,
T
(
x
;
Θ
m
)
T(x;\Theta_m)
T(x;Θm)为决策树,
Θ
m
\Theta_m
Θm为决策树的参数,
M
M
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)
通过经验风险最小化确定下一棵树的参数
Θ
m
\Theta_m
Θm:
Θ
m
^
=
a
r
g
m
i
n
Θ
m
∑
i
=
1
N
L
(
y
i
,
f
m
−
1
(
x
i
)
+
T
(
x
i
;
Θ
m
)
)
\hat{\Theta_m}=argmin_{\Theta_m}\sum_{i=1}^N L(y_i,f_{m-1}(x_i)+T(x_i;\Theta_m))
Θm^=argminΘmi=1∑NL(yi,fm−1(xi)+T(xi;Θm))
树可以表示为
T
(
x
;
Θ
m
)
=
∑
j
=
1
J
c
j
I
(
x
∈
R
j
)
T(x;\Theta_m)=\sum_{j=1}^J c_jI(x\in R_j)
T(x;Θm)=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)
回归问题的提升树算法
(a)计算参数:
r
m
i
=
y
i
−
f
m
−
1
(
x
i
)
r_{mi}=y_i-f_{m-1}(x_i)
rmi=yi−fm−1(xi)
(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)
2.2 梯度提升
当损失函数是平凡损失函数和指数函数时,每一步优化很简单。但是对一般损失函数而言,每一步优化都不容易。梯度提升利用最速下降法的近似方法。
梯度提升算法
(1)初始化
f
0
(
x
)
=
a
r
g
m
i
n
c
∑
i
=
1
N
L
(
y
i
,
c
)
f_0(x)=argmin_c \sum_{i=1}^N L(y_i,c)
f0(x)=argminc∑i=1NL(yi,c)
(2)对
m
=
1
,
2
,
.
.
.
,
M
m=1,2,...,M
m=1,2,...,M
(a)对
i
=
1
,
2
,
.
.
.
,
N
i=1,2,...,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}=-[\frac{\partial L(y_i,f(x_i))}{\partial f(x_i)}]_{f(x)=f_{m-1}(x)}
rmi=−[∂f(xi)∂L(yi,f(xi))]f(x)=fm−1(x)
(b)对
r
m
i
r_{mi}
rmi拟合一个回归树,得到第
m
m
m棵树的叶结点区域
R
m
j
R_{mj}
Rmj
(c)对
j
=
1
,
2
,
.
.
.
,
J
j=1,2,...,J
j=1,2,...,J
c
m
j
=
a
r
g
m
i
n
c
∑
x
i
∈
R
m
j
L
(
y
i
,
f
m
−
1
(
x
i
)
+
c
)
c_{mj}=argmin_{c} \sum_{x_i \in R_{mj}}L(y_i,f_{m-1}(x_i)+c)
cmj=argmincxi∈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)
(3)得到回归树
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=1∑Mj=1∑JcmjI(x∈Rmj)
负梯度作为残差的估计;平方损失函数,就是参残差;一般损失函数,就是残差的近似值。