提升方法
提升方法AdaBoost算法
给定一个二分类训练集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
n
=
N
)
)
}
T=\{(x_1, y_1), (x_2, y_2), ..., (x_N, y_n=N))\}
T={(x1,y1),(x2,y2),...,(xN,yn=N))},其中
X
∈
X
=
R
n
X\in \mathcal{X} =R^n
X∈X=Rn,
y
i
∈
Y
=
{
+
1
,
−
1
}
,
i
=
1
,
2
,
.
.
.
,
N
y_i\in \mathcal{Y}=\{+1,-1\},\;\;i=1,2,...,N
yi∈Y={+1,−1},i=1,2,...,N。AdaBoost利用以下算法,从训练数据中学习一系列弱分类器或基本分类器,并将这些弱分类器线性组合成为一个强分类器。
算法 AdaBoost
输入:训练集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
n
=
N
)
)
}
T=\{(x_1, y_1), (x_2, y_2), ..., (x_N, y_n=N))\}
T={(x1,y1),(x2,y2),...,(xN,yn=N))},其中
X
∈
X
=
R
n
X\in \mathcal{X} =R^n
X∈X=Rn,
y
i
∈
Y
=
{
+
1
,
−
1
}
,
i
=
1
,
2
,
.
.
.
,
N
y_i\in \mathcal{Y}=\{+1,-1\},\;\;i=1,2,...,N
yi∈Y={+1,−1},i=1,2,...,N,弱学习算法
输出:最终分类器
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}=\frac1N,\;\;\;\;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
- 使用具有权值分布
D
m
D_m
Dm的训练数据集学习,得到基本分类器
G m ( x ) : X → { − 1 , + 1 } G_m(x): \mathcal{X}\rightarrow\{-1,+1\} Gm(x):X→{−1,+1} - 计算
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 ) (1) e_m=P(G_m(x_i)\neq y_i)=\sum_{i=1}^Nw_{mi}I(G_m(x_i)\neq y_i) \tag1 em=P(Gm(xi)=yi)=i=1∑NwmiI(Gm(xi)=yi)(1) - 计算
G
m
(
x
)
G_m(x)
Gm(x)的系数
α m = 1 2 l o g 1 − e m e m (2) \alpha_m=\frac12log\frac{1-e_m}{e_m} \tag2 αm=21logem1−em(2)
这里的对数是自然对数 - 更新训练集的权值分布
D m + 1 = ( w m + 1 , 1 , . . . , w m + 1 , i , . . . , w m + 1 , N ) (3) D_{m+1}=(w_{m+1,1},...,w_{m+1,i},...,w_{m+1,N}) \tag3 Dm+1=(wm+1,1,...,wm+1,i,...,wm+1,N)(3)
w m + 1 , i = w m i Z m e x p ( − α m y i G m ( x i ) ) , i = 1 , 2 , . . . , N (4) w_{m+1,i} = \frac{w_{mi}}{Z_m}exp(-\alpha_my_iG_m(x_i)),\;\;\;\;i=1,2,...,N\tag4 wm+1,i=Zmwmiexp(−αmyiGm(xi)),i=1,2,...,N(4)
这里, Z m Z_m Zm是规范化因子
Z m = ∑ i = 1 N w m i e x p ( − α m y i G m ( x i ) ) (5) Z_m = \sum_{i=1}^Nw_{mi}exp(-\alpha_my_iG_m(x_i))\tag5 Zm=i=1∑Nwmiexp(−αmyiGm(xi))(5)
它使 D m + 1 D_{m+1} Dm+1成为一个概率分布
(3) 构建基本分类器的线性组合
f
(
x
)
=
∑
m
=
1
M
α
m
G
m
(
x
)
(6)
f(x)=\sum_{m=1}^M\alpha_mG_m(x) \tag6
f(x)=m=1∑MαmGm(x)(6)
得到最终分类器
G
(
x
)
=
s
i
g
n
(
f
(
x
)
)
=
s
i
g
n
(
∑
m
=
1
M
α
m
G
m
(
x
)
)
(7)
G(x)=sign(f(x)) = sign(\sum_{m=1}^M\alpha_mG_m(x)) \tag7
G(x)=sign(f(x))=sign(m=1∑MαmGm(x))(7)
对AdaBoost作如下说明:
步骤(1)中假设训练数据集具有均匀的权值分布,即每个训练样本在基本分类器的学习中作用相同,这一假设保证第一步能够在原始数据上学习基本分类器
G
1
(
x
)
G_1(x)
G1(x)。
步骤(2)AdaBoost反复学习基本分类器,在每一轮
m
=
1
,
2
,
.
.
.
,
M
m=1,2,...,M
m=1,2,...,M顺次地执行下列操作:
- 使用当前分布 D m D_m Dm加权的训练数据集学习,得到基本分类器 G m ( x ) G_m(x) Gm(x)
- 计算
G
m
(
x
)
G_m(x)
Gm(x)在训练数据集上的分类误差率
e m = P ( G m ( x i ) ≠ y i ) = ∑ G m ( x i ) ≠ y i w m i (8) e_m=P(G_m(x_i)\neq y_i)=\sum_{G_m(x_i)\neq y_i}w_{mi} \tag8 em=P(Gm(xi)=yi)=Gm(xi)=yi∑wmi(8)
G m ( x ) G_m(x) Gm(x)在加权的训练数据集上的分类误差率是被它误分类样本的权值之和,由此可见数据权值分布 D m D_m Dm与基本分类器 G m ( x ) G_m(x) Gm(x)的分类误差率的关系。 - 计算 G m ( x ) G_m(x) Gm(x)的系数 α m \alpha_m αm。 α m \alpha_m αm表示 G m ( x ) G_m(x) Gm(x)在最终分类器中的重要性。当 e m ≤ 1 2 e_m \leq \frac12 em≤21时, α m ≥ 0 \alpha_m\geq0 αm≥0,且 α m \alpha_m αm随着 e m e_m em的减小而增大,所以分类误差率越小的基本分类器在最终分类器中的作用越大。
- 更新训练数据的权值分布为下一轮作准备,式(4)可以写成
w m + 1 , 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 w_{m+1,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)\neq y_i \end{cases} wm+1,i={Zmwmie−αm,Zmwmieαm,Gm(xi)=yiGm(xi)=yi
由此可知,被基本分类器误分类样本的权值得以扩大,而被正确分类样本的权值得以缩小。因此,误分类样本在下一轮学习中起更大的作用。不改变训练数据,而不断改变训练数据的权值分布,使得训练数据在基本分类器的学习中起不同的作用,这是AdaBoost的一个特点。
步骤(3)线性组合 f ( x ) f(x) f(x)实现 M M M个基本分类器的加权表决。系数 α m \alpha_m αm表示基本分类器 G m ( x ) G_m(x) Gm(x)的重要性,这里,所有 α m \alpha_m αm之和并不等于1。 f ( x ) f(x) f(x)的符号决定实例 x x x的类, f ( x ) f(x) f(x)的绝对值表示分类的确信度,最终的分类器是利用基本分类器的线性组合。
AdaBoost算法的训练误差分析
定理1 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
(9)
\frac1N\sum_{i=1}^NI(G(x_i)\neq y_i) \leq \frac1N\sum_{i}exp(-y_if(x_i))=\prod_mZ_m \tag9
N1i=1∑NI(G(xi)=yi)≤N1i∑exp(−yif(xi))=m∏Zm(9)
z这里,
G
(
x
)
,
f
(
x
)
,
Z
m
G(x),f(x),Z_m
G(x),f(x),Zm分别由式(7)(6)(5)给出。这一定理说明,可以在每一轮选取适当的
G
m
G_m
Gm使得
Z
m
Z_m
Zm最小,从而使训练误差下降最快。对于二类分类问题,有如下结果:
定理2 二类分类问题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
)
(10)
\prod_{m=1}^MZ_m= \prod_{m=1}^M\left[2\sqrt{e_m(1-e_m)}\right] = \prod_{m=1}^M\sqrt{(1-4\gamma_m^2)}\leq exp\left(-2\sum_{m=1}^M\gamma_m^2\right)\tag{10}
m=1∏MZm=m=1∏M[2em(1−em)]=m=1∏M(1−4γm2)≤exp(−2m=1∑Mγm2)(10)
这里,
γ
m
=
1
2
−
e
m
\gamma_m=\frac12-e_m
γm=21−em
推论
如果存在
γ
>
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
)
(11)
\frac1N\sum_{i=1}^NI(G(x_i)\neq y_i) \leq exp(-2M\gamma^2) \tag{11}
N1i=1∑NI(G(xi)=yi)≤exp(−2Mγ2)(11)
在此条件下,AdaBoost的训练误差是以指数速率下降的。AdaBoost具有适应性,即它能适应弱分类器各自的训练误差率,这也是它名字的由来(Adaptive)。
AdaBoost算法的解释
AdaBoost算法可以认为是模型为加法模型、损失函数为指数函数、学习算法为前向分布算法时的二类分类学习方法。
前向分步算法
考虑加法模型
f
(
x
)
=
∑
m
=
1
M
β
m
b
(
x
;
γ
m
)
(13)
f(x)=\sum_{m=1}^M\beta_mb(x;\gamma_m) \tag{13}
f(x)=m=1∑Mβmb(x;γm)(13)
其中,
b
(
x
;
γ
m
)
b(x;\gamma_m)
b(x;γm)为基函数,
γ
m
\gamma_m
γm为基函数的参数,
β
m
\beta_m
βm为基函数的系数,式(6)就是一个加法模型。
在给定训练集及损失函数
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
)
)
(14)
\min_{\beta_m,\gamma_m}\sum_{i=1}^NL\left(y_i,\sum_{m=1}^M\beta_mb(x_i;\gamma_m)\right) \tag{14}
βm,γmmini=1∑NL(yi,m=1∑Mβmb(xi;γm))(14)
前向分布算法求解这一优化问题的想法是:因为学习的是加法模型,如果能够从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数式(14),那么就可以简化优化的复杂度。具体地,每步只需优化如下的损失函数:
min
β
,
γ
∑
i
=
1
N
L
(
y
i
,
β
b
(
x
i
;
γ
)
)
(15)
\min_{\beta,\gamma}\sum_{i=1}^NL\left(y_i,\beta b(x_i;\gamma)\right) \tag{15}
β,γmini=1∑NL(yi,βb(xi;γ))(15)
给定训练集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
n
=
N
)
)
}
T=\{(x_1, y_1), (x_2, y_2), ..., (x_N, y_n=N))\}
T={(x1,y1),(x2,y2),...,(xN,yn=N))},
X
∈
X
=
R
n
X\in \mathcal{X} =R^n
X∈X=Rn,
y
i
∈
Y
=
{
+
1
,
−
1
}
y_i\in \mathcal{Y}=\{+1,-1\}
yi∈Y={+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)的前向分步算法如下:
算法 前向分步算法
输入:训练集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
n
=
N
)
)
}
T=\{(x_1, y_1), (x_2, y_2), ..., (x_N, y_n=N))\}
T={(x1,y1),(x2,y2),...,(xN,yn=N))},
X
∈
X
=
R
n
X\in \mathcal{X} =R^n
X∈X=Rn,
y
i
∈
Y
=
{
+
1
,
−
1
}
y_i\in \mathcal{Y}=\{+1,-1\}
yi∈Y={+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)
(1)初始化
f
0
(
x
)
=
0
f_0(x)=0
f0(x)=0
(2)对
m
=
1
,
2
,
.
.
,
M
m=1,2,..,M
m=1,2,..,M
- 极小化损失函数
( β , γ ) = a r g min β , γ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β b ( x i ; γ ) ) (16) ({\beta,\gamma})=arg \min_{\beta,\gamma}\sum_{i=1}^NL\left(y_i,f_{m-1}(x_i)+\beta b(x_i;\gamma)\right) \tag{16} (β,γ)=argβ,γmini=1∑NL(yi,fm−1(xi)+βb(xi;γ))(16)
得到参数 β m , γ m \beta_m,\gamma_m βm,γm - 更新
f m ( x ) = f m − 1 ( x ) + β m b ( x ; γ m ) (17) f_m(x)=f_{m-1}(x)+\beta_mb(x;\gamma_m) \tag{17} fm(x)=fm−1(x)+βmb(x;γm)(17)
(3)得到加法模型
f
(
x
)
=
f
M
(
x
)
=
∑
m
=
1
M
β
m
b
(
x
;
γ
m
)
(18)
f(x)=f_M(x)=\sum_{m=1}^M\beta_mb(x;\gamma_m)\tag{18}
f(x)=fM(x)=m=1∑Mβmb(x;γm)(18)
这样,前向分步算法将同时求解从 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的优化问题。
前向分布算法与AdaBoost
由前向分步算法可以推导出AdaBoost。
定理
AdaBoost是前向分步加法算法的特例。这时,模型是由基本分类器组成的加法模型,损失函数是指数函数。
提升树
提升树模型
提升方法实际采用加法模型(基函数的线性组合)与前向分步算法。以决策树为基函数的提升方法成为提升树。对分类问题决策树是二叉分类树,对回归问题决策树是二叉回归树。提升树模型可以表示为决策树的加法模型:
f
M
(
x
)
=
∑
m
=
1
M
T
(
x
;
Θ
m
)
(19)
f_M(x)=\sum_{m=1}^MT(x;\Theta_m) \tag{19}
fM(x)=m=1∑MT(x;Θm)(19)
其中,
T
(
x
;
Θ
m
)
T(x;\Theta_m)
T(x;Θm)表示决策树;
Θ
m
\Theta_m
Θm为决策树的参数;
M
M
M为树的个数。
提升树算法
提升树算法采用前向分步算法。首先确定初始提升树
f
0
(
x
)
=
0
f_0(x)=0
f0(x)=0,第
m
m
m步的模型是:
f
m
(
x
)
=
f
m
−
1
(
x
)
+
T
(
x
;
Θ
m
)
(20)
f_m(x)=f_{m-1}(x)+T(x;\Theta_m) \tag{20}
fm(x)=fm−1(x)+T(x;Θm)(20)
其中,
f
m
−
1
(
x
)
f_{m-1}(x)
fm−1(x)为当前模型,通过经验风险极小化确定下一棵决策树的参数
Θ
m
\Theta_m
Θm,
Θ
^
m
=
a
r
g
min
Θ
m
∑
i
=
1
N
L
(
y
i
,
f
m
−
1
(
x
i
)
+
T
(
x
;
Θ
m
)
(21)
\hat{\Theta}_m=arg\min_{\Theta_m}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+T(x;\Theta_m)\tag{21}
Θ^m=argΘmmini=1∑NL(yi,fm−1(xi)+T(x;Θm)(21)
由于树的线性组合可以很好地拟合训练数据,所以提升树是一个高功能的学习算法。一般来说,回归问题用平方误差损失函数,分类问题用指数损失函数,决策问题用一般损失函数。
对于二分类问题,提升树算法只需要将AdaBoost算法中的基本分类器限制为二类分类树即可,可以说此时的提升树算法是AdaBoost算法的特殊情况,下面叙述回归提升树。
已知一个训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
n
=
N
)
)
}
T=\{(x_1, y_1), (x_2, y_2), ..., (x_N, y_n=N))\}
T={(x1,y1),(x2,y2),...,(xN,yn=N))},其中
X
∈
X
⊆
R
n
X\in \mathcal{X} \subseteq R^n
X∈X⊆Rn,
y
i
∈
Y
⊆
R
y_i\in \mathcal{Y}\subseteq R
yi∈Y⊆R,
Y
\mathcal{Y}
Y为输出空间。如果将输入空间
X
\mathcal{X}
X划分为
J
J
J个互不相交的区域
R
1
,
R
2
,
.
.
.
,
R
J
R_1,R_2,...,R_J
R1,R2,...,RJ,并且在每个区域上确定输出的常量
c
j
c_j
cj,那么树可以表示为:
T
(
x
;
Θ
m
)
=
∑
j
=
1
J
c
j
I
(
x
∈
R
j
)
(22)
T(x;\Theta_m)=\sum_{j=1}^Jc_jI(x\in R_j) \tag{22}
T(x;Θm)=j=1∑JcjI(x∈Rj)(22)
其中,参数
Θ
=
{
(
R
1
,
c
1
)
,
(
R
2
,
c
2
)
,
.
.
.
,
(
R
J
,
c
J
)
}
\Theta=\{(R_1,c_1),(R_2,c_2),...,(R_J,c_J)\}
Θ={(R1,c1),(R2,c2),...,(RJ,cJ)}表示树的区域划分和各区域上的常数。
J
J
J是回归树的复杂度即叶结点的个数。
回归问题提升树使用以下前向分布算法:
f
0
(
x
)
=
0
f_0(x)=0
f0(x)=0
f
m
(
x
)
=
f
m
−
1
(
x
)
+
T
(
x
;
Θ
m
)
,
m
=
1
,
2
,
.
.
.
,
M
f_m(x)=f_{m-1}(x)+T(x;\Theta_m),\;\;\;\;m=1,2,...,M
fm(x)=fm−1(x)+T(x;Θm),m=1,2,...,M
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)
在前向分步算法的第
m
m
m步,给定当前模型
f
m
−
1
(
x
)
f_{m-1}(x)
fm−1(x),需求解
Θ
^
m
=
a
r
g
min
Θ
m
∑
i
=
1
N
L
(
y
i
,
f
m
−
1
(
x
i
)
+
T
(
x
;
Θ
m
)
\hat{\Theta}_m=arg\min_{\Theta_m}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+T(x;\Theta_m)
Θ^m=argΘmmini=1∑NL(yi,fm−1(xi)+T(x;Θm)
得到
Θ
^
m
\hat{\Theta}_m
Θ^m,即第
m
m
m棵树的参数。
当采用平方误差损失函数时,
L
(
y
,
f
(
x
)
)
=
(
y
−
f
(
x
)
)
2
L(y,f(x))=(y-f(x))^2
L(y,f(x))=(y−f(x))2
其损失变为
L
(
y
,
f
(
x
)
)
+
T
(
x
;
Θ
m
)
)
=
[
r
−
T
(
x
;
Θ
m
)
]
2
L(y,f(x))+T(x;\Theta_m))=[r-T(x;\Theta_m)]^2
L(y,f(x))+T(x;Θm))=[r−T(x;Θm)]2
这里
r
=
y
−
f
m
−
1
(
x
)
(23)
r=y-f_{m-1}(x) \tag{23}
r=y−fm−1(x)(23)
是当前模型拟合数据的残差。所以对回归问题的提升树算法来说,只需要简单地拟合当前模型的残差。
算法 回归问题的提升树算法
输入:训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
n
=
N
)
)
}
T=\{(x_1, y_1), (x_2, y_2), ..., (x_N, y_n=N))\}
T={(x1,y1),(x2,y2),...,(xN,yn=N))},
X
∈
X
⊆
R
n
X\in \mathcal{X} \subseteq R^n
X∈X⊆Rn,
y
i
∈
Y
⊆
R
y_i\in \mathcal{Y}\subseteq R
yi∈Y⊆R
输出:提升树
f
M
(
x
)
f_M(x)
fM(x)
(1)初始化
f
0
(
x
)
=
0
f_0(x)=0
f0(x)=0
(2)对
m
=
1
,
2
,
.
.
.
,
M
m=1,2,...,M
m=1,2,...,M
- 按式(23)计算残差
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 - 拟合残差 r m i r_{mi} rmi学习一个回归树,得到 T ( x ; Θ m ) T(x;\Theta_m) T(x;Θ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)
(3)得到回归问题的提升树
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
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
n
=
N
)
)
}
T=\{(x_1, y_1), (x_2, y_2), ..., (x_N, y_n=N))\}
T={(x1,y1),(x2,y2),...,(xN,yn=N))},
X
∈
X
⊆
R
n
X\in \mathcal{X} \subseteq R^n
X∈X⊆Rn,
y
i
∈
Y
⊆
R
y_i\in \mathcal{Y}\subseteq R
yi∈Y⊆R,损失函数
L
(
y
,
f
(
x
)
)
L(y,f(x))
L(y,f(x))
输出:回归树
f
^
(
x
)
\hat{f}(x)
f^(x)
(1)初始化
f
0
(
x
)
=
a
r
g
min
c
∑
i
=
1
N
L
(
y
i
,
c
)
f_0(x)=arg\min_c\sum_{i=1}^NL(y_i,c)
f0(x)=argcmini=1∑NL(yi,c)
(2)对
m
=
1
,
2
,
.
.
.
,
M
m=1,2,...,M
m=1,2,...,M
- 对
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}=-\left[\frac{\partial L(y_i,f(x_i))}{\partial f(x_i)}\right]_{f(x)=f_{m-1}(x)} 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,...,J Rmj,j=1,2,...,J
- 对
j
=
1
,
2
,
.
.
.
,
J
j=1,2,...,J
j=1,2,...,J计算
c m j = a r g min c ∑ x i ∈ R m j L ( y i , f m − 1 ( x i ) + c ) c_{mj}=arg\min_{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) - 更新 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\limits_{j=1}^Jc_{mj}I(x\in R_{mj}) fm(x)=fm−1(x)+j=1∑JcmjI(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}^Jc_{mj}I(x\in R_{mj})
f^(x)=fM(x)=m=1∑Mj=1∑JcmjI(x∈Rmj)
算法第1步初始化,估计使损失函数极小化的常数值,它是只有一个根结点的树。2(a)步计算损失函数的负梯度在当前模型的值,将它作为残差的估计。对于平方损失函数,就是残差;对于一般损失函数,就是残差的近似值。2(b)步估计回归树叶结点区域,以拟合残差的近似值。2©步利用线性搜索估计叶结点区域的值,使损失函数极小化。2(d)步更新回归树。第3步得到最终的模型 f ^ ( x ) \hat{f}(x) f^(x)。