XGBoost
xgboost也是使用提升树相同的前向分步算法。其区别在于:xgboost通过结构风险极小化来确定下一个决策参数 Θ m {\Theta}_{m} Θm
Θ ^ m = arg min Θ m ∑ i = 1 N L ( y ~ i , f m ( x → i ) ) + Ω ( h m ( x → ) ) \hat{\Theta}_{m}=\arg \min _{\Theta_{m}} \sum_{i=1}^{N} L\left(\tilde{y}_{i}, f_{m}\left(\overrightarrow{\mathbf{x}}_{i}\right)\right)+\Omega\left(h_{m}(\overrightarrow{\mathbf{x}})\right) Θ^m=argΘmmini=1∑NL(y~i,fm(xi))+Ω(hm(x))
其中
Ω
(
h
m
)
\Omega(h_{m})
Ω(hm)为第m个决策树的正则化项。这是xgboost和GBT的一个重要区别。
L
=
∑
i
=
1
N
L
(
y
~
i
,
f
m
(
x
→
i
)
)
+
Ω
(
h
m
(
x
→
)
)
\mathcal{L}=\sum_{i=1}^{N} L\left(\tilde{y}_{i}, f_{m}\left(\overrightarrow{\mathbf{x}}_{i}\right)\right)+\Omega\left(h_{m}(\overrightarrow{\mathbf{x}})\right)
L=∑i=1NL(y~i,fm(xi))+Ω(hm(x))为目标函数
泰勒展开式
定义:
y
^
i
<
m
−
1
>
=
f
m
−
1
(
x
→
i
)
,
g
i
=
∂
L
(
y
~
i
,
y
^
i
<
m
−
1
>
)
∂
y
^
i
<
m
−
1
>
,
h
i
=
∂
2
L
(
y
~
i
,
y
^
i
<
m
−
1
>
)
∂
2
y
^
i
<
m
−
1
>
\hat{y}_{i}^{<m-1>}=f_{m-1}\left(\overrightarrow{\mathbf{x}}_{i}\right), \quad g_{i}=\frac{\partial L\left(\tilde{y}_{i}, \hat{y}_{i}^{<m-1>}\right)}{\partial \hat{y}_{i}^{<m-1>}}, \quad h_{i}=\frac{\partial^{2} L\left(\tilde{y}_{i}, \hat{y}_{i}^{<m-1>}\right)}{\partial^{2} \hat{y}_{i}^{<m-1>}}
y^i<m−1>=fm−1(xi),gi=∂y^i<m−1>∂L(y~i,y^i<m−1>),hi=∂2y^i<m−1>∂2L(y~i,y^i<m−1>)
即:
g
i
g_i
gi为
L
(
y
~
i
,
y
^
i
<
m
−
1
>
)
L(\tilde{y}_{i}, \hat{y}_{i}^{<m-1>})
L(y~i,y^i<m−1>)在
y
^
i
<
m
−
1
>
\hat{y}_{i}^{<m-1>}
y^i<m−1>的一阶导数
h
i
h_i
hi为
L
(
y
~
i
,
y
^
i
<
m
−
1
>
)
L(\tilde{y}_{i}, \hat{y}_{i}^{<m-1>})
L(y~i,y^i<m−1>)在
y
^
i
<
m
−
1
>
\hat{y}_{i}^{<m-1>}
y^i<m−1>的二阶导数
对目标函数
L
\mathcal{L}
L执行二阶泰勒展开:
L
=
∑
i
=
1
N
L
(
y
~
i
,
f
m
(
x
→
i
)
)
+
Ω
(
h
m
(
x
→
)
)
=
∑
i
=
1
N
L
(
y
~
i
,
y
^
i
<
m
−
1
>
+
h
m
(
x
→
i
)
)
+
Ω
(
h
m
(
x
→
)
)
≃
∑
i
=
1
N
[
L
(
y
~
i
,
y
^
i
<
m
−
1
>
)
+
g
i
h
m
(
x
→
i
)
+
1
2
h
i
h
m
2
(
x
→
i
)
]
+
Ω
(
h
m
(
x
→
)
)
+
constant
\begin{aligned} \mathcal{L} &=\sum_{i=1}^{N} L\left(\tilde{y}_{i}, f_{m}\left(\overrightarrow{\mathbf{x}}_{i}\right)\right)+\Omega\left(h_{m}(\overrightarrow{\mathbf{x}})\right)=\sum_{i=1}^{N} L\left(\tilde{y}_{i}, \hat{y}_{i}^{<m-1>}+h_{m}\left(\overrightarrow{\mathbf{x}}_{i}\right)\right)+\Omega\left(h_{m}(\overrightarrow{\mathbf{x}})\right) \\ & \simeq \sum_{i=1}^{N}\left[L\left(\tilde{y}_{i}, \hat{y}_{i}^{<m-1>}\right)+g_{i} h_{m}\left(\overrightarrow{\mathbf{x}}_{i}\right)+\frac{1}{2} h_{i} h_{m}^{2}\left(\overrightarrow{\mathbf{x}}_{i}\right)\right]+\Omega\left(h_{m}(\overrightarrow{\mathbf{x}})\right)+\text { constant } \end{aligned}
L=i=1∑NL(y~i,fm(xi))+Ω(hm(x))=i=1∑NL(y~i,y^i<m−1>+hm(xi))+Ω(hm(x))≃i=1∑N[L(y~i,y^i<m−1>)+gihm(xi)+21hihm2(xi)]+Ω(hm(x))+ constant
决策树改写
对一个决策树
h
m
(
x
→
)
h_{m}(\overrightarrow{\mathbf{x}})
hm(x)假设不考虑复杂的推到过程,仅考虑决策树的效果
给定输入
x
→
\overrightarrow{\mathbf{x}}
x该决策树将该输入经过不断的划分,最终划分到某个叶结点上去。
给定一个叶节点,该叶节点有一个输出值
因此将决策树拆分成结构部分
q
(
)
q()
q(),和叶节点权重部分
w
→
=
(
w
1
,
w
2
,
.
.
.
w
T
)
\overrightarrow{w} = (w_1,w_2,...w_T)
w=(w1,w2,...wT),其中T为叶节点的数量
结构部分
q
(
x
→
)
q(\overrightarrow{x})
q(x)的输出是叶节点编号d。它的作用是将输入的
x
→
\overrightarrow{x}
x映射到编号为d的叶节点
叶节点权重部分就是每个叶节点的值。它的作用是输出编号为d的叶节点的值
w
d
w_d
wd
因此决策树改写为
h
m
(
x
→
)
=
w
q
(
x
→
)
h_m(\overrightarrow{x}) = w_{q(\overrightarrow{x})}
hm(x)=wq(x)
结构分
定义出具体的正则项
定义一个决策树的复杂度为
Ω
(
h
m
(
x
→
)
)
=
γ
T
+
1
2
λ
∑
j
=
1
T
w
j
2
\Omega\left(h_{m}(\overrightarrow{\mathrm{x}})\right)=\gamma T+\frac{1}{2} \lambda \sum_{j=1}^{T} w_{j}^{2}
Ω(hm(x))=γT+21λ∑j=1Twj2
其中:T为叶节点的个数,
w
j
w_j
wj为每个叶节点的输出值,
γ
,
λ
≥
0
\gamma,\lambda \geq 0
γ,λ≥0为系数,控制这两个部分的比重。
叶节点越多,则决策树越复杂
每个叶节点输出值的绝对值越大,则决策树越复杂。
L
≃
∑
i
=
1
N
[
g
i
w
q
(
x
→
i
)
+
1
2
h
i
w
q
(
x
→
i
)
2
]
+
γ
T
+
1
2
λ
∑
j
=
1
T
w
j
2
+
constant
\mathcal{L} \simeq \sum_{i=1}^{N}\left[g_{i} w_{q\left(\overrightarrow{\mathbf{x}}_{i}\right)}+\frac{1}{2} h_{i} w_{q\left(\overrightarrow{\mathbf{x}}_{i}\right)}^{2}\right]+\gamma T+\frac{1}{2} \lambda \sum_{j=1}^{T} w_{j}^{2}+\text { constant }
L≃i=1∑N[giwq(xi)+21hiwq(xi)2]+γT+21λj=1∑Twj2+ constant
对于每个样本
x
→
i
\overrightarrow{{x}}_i
xi,它必然被划分到树
h
m
h_m
hm的某个叶节点。定义划分到叶节点j的样本的集合为:
I
j
=
{
i
∣
q
(
x
→
i
)
=
j
}
\mathbb{I}_{j}=\left\{i | q\left(\overrightarrow{\mathbf{x}}_{i}\right)=j\right\}
Ij={i∣q(xi)=j},则有:
L
≃
∑
j
=
1
T
[
(
∑
i
∈
I
j
g
i
)
w
j
+
1
2
(
∑
i
∈
I
j
h
i
+
λ
)
w
j
2
]
+
γ
T
+
constant
\mathcal{L} \simeq \sum_{j=1}^{T}\left[\left(\sum_{i \in \mathbb{I}_{j}} g_{i}\right) w_{j}+\frac{1}{2}\left(\sum_{i \in \mathbb{I}_{j}} h_{i}+\lambda\right) w_{j}^{2}\right]+\gamma T+\text { constant }
L≃j=1∑T⎣⎡⎝⎛i∈Ij∑gi⎠⎞wj+21⎝⎛i∈Ij∑hi+λ⎠⎞wj2⎦⎤+γT+ constant
进一步化简
定义
G
j
=
∑
i
∈
I
j
g
i
,
H
j
=
∑
i
∈
I
j
h
i
\mathbf{G}_{j}=\sum_{i \in \mathbb{I}_{j}} g_{i}, \mathbf{H}_{j}=\sum_{i \in \mathbb{I}_{j}} h_{i}
Gj=∑i∈Ijgi,Hj=∑i∈Ijhi
G
j
G_j
Gj刻画了隶属于叶节点j的那些样本的一阶偏导数之和
H
j
H_j
Hj刻画了隶属于叶节点j的那些样本的二阶偏导数之和
L
≃
∑
j
=
1
T
[
(
∑
i
∈
I
j
g
i
)
w
j
+
1
2
(
∑
i
∈
I
j
h
i
+
λ
)
w
j
2
]
+
γ
T
+
constant
\mathcal{L} \simeq \sum_{j=1}^{T}\left[\left(\sum_{i \in \mathbb{I}_{j}} g_{i}\right) w_{j}+\frac{1}{2}\left(\sum_{i \in \mathbb{I}_{j}} h_{i}+\lambda\right) w_{j}^{2}\right]+\gamma T+\text { constant }
L≃j=1∑T⎣⎡⎝⎛i∈Ij∑gi⎠⎞wj+21⎝⎛i∈Ij∑hi+λ⎠⎞wj2⎦⎤+γT+ constant
转化为
L
≃
∑
j
=
1
T
[
G
j
w
j
+
1
2
(
H
j
+
λ
)
w
j
2
]
+
γ
T
+
constant
\mathcal{L} \simeq \sum_{j=1}^{T}\left[G_j w_{j}+\frac{1}{2}\left(H_j+\lambda\right) w_{j}^{2}\right]+\gamma T+\text { constant }
L≃j=1∑T[Gjwj+21(Hj+λ)wj2]+γT+ constant
此时如果
w
j
w_j
wj和T,
G
J
,
H
j
G_J,H_j
GJ,Hj都无关的话,那么损失函数实质上是一个关于
w
j
w_j
wj的一元二次方程
对于一元二次方程
a
x
2
+
b
x
+
c
=
0
ax^2+bx+c = 0
ax2+bx+c=0当x= -b/2a时去极值,因而有
w
j
∗
=
−
G
j
H
j
+
λ
w_{j}^{*}=-\frac{\mathbf{G}_{j}}{\mathbf{H}_{j}+\lambda}
wj∗=−Hj+λGj
带回原式可得
L
∗
=
−
1
2
∑
j
=
1
T
G
j
2
H
j
+
λ
+
γ
T
\mathcal{L}^{*}=-\frac{1}{2} \sum_{j=1}^{T} \frac{\mathbf{G}_{j}^{2}}{\mathbf{H}_{j}+\lambda}+\gamma T
L∗=−21j=1∑THj+λGj2+γT
上一步的简化, w j w_j wj和T, G j , H j G_j,H_j Gj,Hj都无关, w j w_j wj表示树的叶子节点,所以实质是在假设已知树的结构,而事实上损失函数与T是相关的,甚至和树的结构相关,所以定义L*为一种scoring function,来衡量已知树结构情况下目标函数的最小值。