文章目录
参考
https://www.cnblogs.com/massquantity/p/9174746.html
1. 梯度提升(Gradient Boosting)的思想
Gradient Boosting和Adaptive Boosting都属于boosting类集成学习算法,也即通过多轮迭代得到多个基学习器,然后将多个基学习器加权求和。
f
m
(
x
)
=
f
m
−
1
(
x
)
+
ρ
m
h
m
(
x
)
(1-1)
f_m(x)=f_{m-1}(x)+\rho_mh_m(x)\tag{1-1}
fm(x)=fm−1(x)+ρmhm(x)(1-1)
不同之处在于,Adaptive Boosting在某次迭代过程中训练该轮基学习器时,会增大上一轮犯错样本的权重;而Gradient Boosting在某次迭代时,会拟合上一轮基学习器的负梯度。
为什么拟合上一轮的负梯度能work?我们知道机器学习中最小化损失函数
L
(
θ
)
L(\theta)
L(θ)时,往往会利用梯度下降法来更新
θ
\theta
θ:
θ
=
θ
−
α
⋅
∂
L
(
θ
)
∂
θ
(1-2)
\theta=\theta-\alpha\cdot \frac{\partial L(\theta)}{\partial \theta}\tag{1-2}
θ=θ−α⋅∂θ∂L(θ)(1-2)
如果把
θ
\theta
θ换成基学习器
f
m
(
x
)
f_m(x)
fm(x),上述表达式也是可以用来更新基学习器的(具体的严格证明需要用到泛函分析的理论):
f
m
(
x
)
=
f
m
−
1
(
x
)
−
ρ
m
⋅
∂
L
(
y
,
f
m
−
1
(
x
)
)
∂
f
m
−
1
(
x
)
(1-3)
f_m(x)=f_{m-1}(x)-\rho_m\cdot \frac{\partial L(y,f_{m-1}(x))}{\partial f_{m-1}(x)}\tag{1-3}
fm(x)=fm−1(x)−ρm⋅∂fm−1(x)∂L(y,fm−1(x))(1-3)
其中
L
(
y
,
f
m
−
1
(
x
)
)
=
∑
i
=
1
N
L
(
y
i
,
f
m
−
1
(
x
i
)
)
L(y,f_{m-1}(x))=\sum_{i=1}^NL(y_i,f_{m-1}(x_i))
L(y,fm−1(x))=∑i=1NL(yi,fm−1(xi))
{
1
−
3
}
\{1-3\}
{1−3}意味着,我们是用第m轮的基学习器
h
m
(
x
)
h_m(x)
hm(x)去拟合上一轮损失函数关于
f
m
−
1
(
x
)
f_{m-1}(x)
fm−1(x)的负梯度,从而达到通过梯度下降法最小化
L
(
f
)
L(f)
L(f).该方法也叫函数空间的梯度下降法。
2. gradient boosting的通用算法流程
这里我们暂时不关心基学习器的具体表达式,把GBDT的通用算法流程列下来:
- 初始化: f 0 ( x ) = arg min γ ∑ i = 1 N L ( y i , γ ) f_0(x)=\arg \min\limits_{\gamma}\sum_{i=1}^NL(y_i,\gamma) f0(x)=argγmin∑i=1NL(yi,γ)
- for m=1 to M:
(a)计算函数空间负梯度: y i ~ = ∂ L ( y i , f m − 1 ( x i ) ) ∂ f m − 1 ( x i ) , i = 1 , ⋯ , N \tilde{y_i}=\frac{\partial L(y_i,f_{m-1}(x_i))}{\partial f_{m-1}(x_i)}, i=1,\cdots,N yi~=∂fm−1(xi)∂L(yi,fm−1(xi)),i=1,⋯,N
(b)通过最小化平方误差,来得到 h m ( x ) h_m(x) hm(x): w m = arg min w ∑ i = 1 N ( y i ~ − h m ( x i ; w ) ) 2 w_m=\arg\min\limits_{w}\sum_{i=1}{N}(\tilde{y_i}-h_m(x_i;w))^2 wm=argwmin∑i=1N(yi~−hm(xi;w))2
©使用line search确定系数 ρ m \rho_m ρm: ρ m = arg min ρ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + ρ h m ( x i ; w m ) ) \rho_m=\arg\min\limits{\rho}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+\rho h_m(x_i;w_m)) ρm=argminρ∑i=1NL(yi,fm−1(xi)+ρhm(xi;wm))
(d)更新基学习器: f m ( x ) = f m − 1 + ρ m h m ( x ; w m ) f_m(x)=f_{m-1}+\rho_m h_m(x;w_m) fm(x)=fm−1+ρmhm(x;wm) - 输出最终的 f M ( x ) f_M(x) fM(x)
3. 将回归树作为基学习器,得到GBDT算法
3.1. 回归树介绍
在GBDT中,基学习器是决策树。因为基学习器要拟合的是负梯度,可以认为是个回归问题,因此我们来介绍一些回归树的基本概念。
决策树本质上可以看做一个分段函数,把特征空间分为多个互相独立的子区域:
图片来源https://www.cnblogs.com/massquantity/p/9174746.html
因此单棵决策树在数学上可以表示为
h
(
x
;
{
R
j
,
b
j
}
1
J
=
∑
j
=
1
J
b
j
I
(
x
∈
R
j
)
(3-1)
h(x;\{R_j,b_j\}_1^J=\sum_{j=1}^Jb_jI(x\in R_j)\tag{3-1}
h(x;{Rj,bj}1J=j=1∑JbjI(x∈Rj)(3-1)
其中
{
R
j
}
1
J
\{R_j\}_1^J
{Rj}1J代表决策树划分出的
J
J
J个子空间(每个子空间对应一个叶结点),
{
b
j
}
1
J
\{b_j\}_1^J
{bj}1J代表各个子空间输出的值。
3.2. 将回归树应用到gradient boosting中
因此第2章里面的2.(b)可以写成:
{
R
j
m
}
1
J
=
arg
min
{
R
j
m
}
1
J
∑
i
=
1
N
(
y
i
~
−
h
m
(
x
i
;
{
R
j
m
,
b
j
m
}
1
J
)
)
2
(3-2)
\{R_{jm}\}_1^J=\arg\min\limits_{\{R_{jm}\}_1^J}\sum_{i=1}{N}(\tilde{y_i}-h_m(x_i;\{R_{jm},b_{jm}\}_1^J))^2\tag{3-2}
{Rjm}1J=arg{Rjm}1Jmini=1∑N(yi~−hm(xi;{Rjm,bjm}1J))2(3-2)
对应的
b
j
m
=
m
e
a
n
x
∈
R
j
m
y
i
~
b_{jm}=\mathop{mean}\limits_{x\in R_{jm}}\ \tilde{y_i}
bjm=x∈Rjmmean yi~是该区域的平均值。(之所以可以先划分区域再求b,是因为不论怎么划分区域,b取该区域内所有值的平均值,总能最小化均方误差,因此可以先后求)
注意到2.©中求出的
ρ
m
\rho_m
ρm对于所有子区域是一样的,这样不一定是最优的,因此可以采用如下方式优化求取最优的
γ
j
m
=
ρ
j
m
b
j
m
\gamma_{jm}=\rho_{jm}b_{jm}
γjm=ρjmbjm:
γ
j
m
=
arg
min
γ
∑
x
i
∈
R
j
m
L
(
y
i
,
f
m
−
1
(
x
i
)
+
γ
)
(3-3)
\gamma_{jm}=\arg\min\limits_{\gamma}\sum_{x_i\in R_{jm}}L(y_i,f_{m-1}(x_i)+\gamma) \tag{3-3}
γjm=argγminxi∈Rjm∑L(yi,fm−1(xi)+γ)(3-3)
3.3. GBDT算法流程
最终得到GBDT的算法流程:
- 初始化: f 0 ( x ) = arg min γ ∑ i = 1 N L ( y i , γ ) f_0(x)=\arg \min\limits_{\gamma}\sum_{i=1}^NL(y_i,\gamma) f0(x)=argγmin∑i=1NL(yi,γ)
- for m=1 to M:
(a)计算函数空间负梯度: y i ~ = ∂ L ( y i , f m − 1 ( x i ) ) ∂ f m − 1 ( x i ) , i = 1 , ⋯ , N \tilde{y_i}=\frac{\partial L(y_i,f_{m-1}(x_i))}{\partial f_{m-1}(x_i)}, i=1,\cdots,N yi~=∂fm−1(xi)∂L(yi,fm−1(xi)),i=1,⋯,N
(b)通过最小化平方误差,来得到子区域划分方式(也即得到最终的决策树): { R j m } 1 J = arg min { R j m } 1 J ∑ i = 1 N ( y i ~ − h m ( x i ; { R j m , b j m } 1 J ) ) 2 \{R_{jm}\}_1^J=\arg\min\limits_{\{R_{jm}\}_1^J}\sum_{i=1}{N}(\tilde{y_i}-h_m(x_i;\{R_{jm},b_{jm}\}_1^J))^2 {Rjm}1J=arg{Rjm}1Jmin∑i=1N(yi~−hm(xi;{Rjm,bjm}1J))2
©使用line search确定子区域最终输出: γ j m = arg min γ ∑ x i ∈ R j m L ( y i , f m − 1 ( x i ) + γ ) \gamma_{jm}=\arg\min\limits_{\gamma}\sum_{x_i\in R_{jm}}L(y_i,f_{m-1}(x_i)+\gamma) γjm=argγmin∑xi∈RjmL(yi,fm−1(xi)+γ)
(d)更新基学习器: f m ( x ) = f m − 1 + ∑ j = 1 J γ j m I ( x ∈ R j m ) f_m(x)=f_{m-1}+\sum_{j=1}^J\gamma_{jm}I(x\in R_{jm}) fm(x)=fm−1+∑j=1JγjmI(x∈Rjm) - 输出最终的 f M ( x ) f_M(x) fM(x)