1.推导思路
- 目标函数
- 目标函数泰勒展开
- 合并正则项(遍历样本到遍历页节点)
- 目标函数最小值(求导为0)得到参数的解
2.详细推导
2.1 目标函数
l t = ∑ i = 1 N l ( y t , y ) + γ T + λ ∑ j = 1 T w j = ∑ i = 1 N [ l ( y t − 1 , y ) + f ( x ) ] + γ T + λ ∑ j = 1 T w j l^{t}=\sum_{i=1}^{N}l(y^{t},y)+\gamma T + \lambda \sum_{j=1}^{T}w_{j} = \sum_{i=1}^{N}[l(y^{t-1},y)+f(x)]+\gamma T + \lambda \sum_{j=1}^{T}w_{j} lt=i=1∑Nl(yt,y)+γT+λj=1∑Twj=i=1∑N[l(yt−1,y)+f(x)]+γT+λj=1∑Twj
2.1 目标函数泰勒展开
-
泰勒公式二阶导数展开
f ( x + Δ x ) = f ( x ) + f ‘ ( x ) Δ x + 1 2 f ‘ ‘ ( x ) Δ x f(x+\Delta x) = f(x)+f‘(x)\Delta x+\frac {1}{2}f``(x)\Delta x f(x+Δx)=f(x)+f‘(x)Δx+21f‘‘(x)Δx -
目标函数泰勒展开
把 l ( y t − 1 , y ) l(y^{t-1},y) l(yt−1,y)作为 f ( x ) f(x) f(x),新增的树结构 f ( x ) f(x) f(x)作为 Δ x \Delta x Δx,这样2.1就可以转化为:
∑ i = 1 N [ l ( y t − 1 , y ) + f ( x ) ] + γ T + λ 1 2 ∑ j = 1 T w j 2 + c o n s t a n t \sum_{i=1}^{N}[l(y^{t-1},y)+f(x)]+\gamma T + \lambda \frac {1}{2}\sum_{j=1}^{T}w^2_{j}+constant i=1∑N[l(yt−1,y)+f(x)]+γT+λ21j=1∑Twj2+constant
= ∑ i = 1 N [ l ( y i t − 1 , y i ) + Δ l ( y i t − 1 , y i ) Δ x i f ( x ) + 1 2 Δ 2 l ( y i t − 1 , y i ) Δ 2 x i f 2 ( x ) ] + γ T + 1 2 λ ∑ j = 1 T w j 2 =\sum_{i=1}^{N}[l(y^{t-1}_{i},y_{i})+\frac {\Delta l(y^{t-1}_{i},y_{i})}{\Delta x_{i}}f(x)+\frac {1}{2}\frac {\Delta ^{2}l(y^{t-1}_{i},y_{i})}{\Delta ^{2}x_{i}}f^2(x)]+\gamma T + \frac {1}{2}\lambda \sum_{j=1}^{T}w^2_{j} =i=1∑N[l(yit−1,yi)+ΔxiΔl(yit−1,yi)f(x)+21Δ2xiΔ2l(yit−1,yi)f2(x)]+γT+21λj=1∑Twj2
= ∑ i = 1 N [ g ( x ) f ( x ) + 1 2 h ( x ) f 2 ( x ) ] + γ T + 1 2 λ ∑ j = 1 T w j 2 + c o n s t a n t =\sum_{i=1}^{N}[g(x)f(x)+\frac {1}{2}h(x)f^2(x)]+\gamma T + \frac {1}{2}\lambda \sum_{j=1}^{T}w^2_{j}+constant =i=1∑N[g(x)f(x)+21h(x)f2(x)]+γT+21λj=1∑Twj2+constant
= ∑ i = 1 N [ g ( x i ) w i ( x i ) + 1 2 h ( x i ) w i 2 ( x i ) ] + γ T + 1 2 λ ∑ j = 1 T w j 2 + c o n s t a n t =\sum_{i=1}^{N}[g(x_i)w_{i}(x_i)+\frac {1}{2}h(x_i)w^2_{i}(x_i)]+\gamma T + \frac {1}{2}\lambda \sum_{j=1}^{T}w^2_{j}+constant =i=1∑N[g(xi)wi(xi)+21h(xi)wi2(xi)]+γT+21λj=1∑Twj2+constant
其中 l ( y i t − 1 , y i ) l(y^{t-1}_{i},y_{i}) l(yit−1,yi)在前 t − 1 t-1 t−1颗树结构已知的情况下,是一个常量, Δ l ( y i t − 1 , y i ) Δ x i \frac {\Delta l(y^{t-1}_{i},y_{i})}{\Delta x_{i}} ΔxiΔl(yit−1,yi)为一阶导数,用 g ( x ) g(x) g(x)表示, Δ 2 l ( y i t − 1 , y i ) Δ 2 x i \frac {\Delta ^{2}l(y^{t-1}_{i},y_{i})}{\Delta ^{2}x_{i}} Δ2xiΔ2l(yit−1,yi)为二阶导数,用 h ( x ) h(x) h(x)表示。
2.2 合并正则项(遍历样本到遍历页节点)
上式中,
N
N
N代表样本个数,
T
T
T代表叶子节点的个数,一个叶子节点可能可以分配到多个样本:
I
j
=
(
i
∣
q
(
x
i
)
=
j
)
I_{j} = (i|q(x_i)=j)
Ij=(i∣q(xi)=j)
那么可以利用该公式将上式合并:
=
∑
i
=
1
N
[
g
(
x
i
)
w
i
(
x
i
)
+
1
2
h
(
x
i
)
w
i
2
(
x
i
)
]
+
γ
T
+
1
2
λ
∑
j
=
1
T
w
j
2
+
c
o
n
s
t
a
n
t
=\sum_{i=1}^{N}[g(x_i)w_{i}(x_i)+\frac {1}{2}h(x_i)w^2_{i}(x_i)]+\gamma T +\frac {1}{2}\lambda \sum_{j=1}^{T}w^2_{j}+constant
=i=1∑N[g(xi)wi(xi)+21h(xi)wi2(xi)]+γT+21λj=1∑Twj2+constant
=
∑
j
=
1
T
[
∑
x
i
⊂
I
j
g
(
x
i
)
w
j
+
1
2
∑
x
i
⊂
I
j
h
(
x
i
)
w
j
2
]
+
γ
T
+
1
2
λ
∑
j
=
1
T
w
j
+
c
o
n
s
t
a
n
t
=\sum_{j=1}^{T}[\sum_{x_i\subset I_j} g(x_i)w_{j}+\frac {1}{2}\sum_{x_i\subset I_j} h(x_i)w^2_{j}]+\gamma T + \frac {1}{2}\lambda \sum_{j=1}^{T}w_{j}+constant
=j=1∑T[xi⊂Ij∑g(xi)wj+21xi⊂Ij∑h(xi)wj2]+γT+21λj=1∑Twj+constant
=
∑
j
=
1
T
[
G
w
j
+
1
2
H
w
j
2
]
+
γ
T
+
1
2
λ
∑
j
=
1
T
w
j
2
+
c
o
n
s
t
a
n
t
=\sum_{j=1}^{T}[Gw_{j}+\frac {1}{2}Hw^2_{j}]+\gamma T + \frac {1}{2}\lambda \sum_{j=1}^{T}w^2_{j}+constant
=j=1∑T[Gwj+21Hwj2]+γT+21λj=1∑Twj2+constant
2.3 目标函数最小值(求导为0)得到参数的解
G
+
H
w
j
+
λ
w
j
=
0
G+Hw_j+\lambda w_j = 0
G+Hwj+λwj=0
w
j
=
−
G
H
+
λ
w_j = -\frac {G}{H+\lambda}
wj=−H+λG
3 工程实现
- 是一个点一个点分裂得到树的结构,每次分裂树需要进行下面工作:
#1 计算每个节点的obj
#2 选择最优节点分裂
#3 算法复杂度:O(k*d*n*log n),n为样本个数,d为特征,k为深度,n*logn是因为要排序,来选择最优节点,所以对于不需要排序的特征,例如类别特征,需要onehot编码,因为其不需要排序。
4 参数
4.1 随机性
- eta :学习率?learning rate?
- subsample 样本抽取比例
- colsample_bytree,列的抽取率
- max_delta_step:???
4.2 复杂度
- max_depth
- min_child_weight,节点权重小于该值,不继续分裂了
- gamma??
- alpha和lambda:目标函数中正则化系数
4.3 其他参数
- booster:gbtree,gbline,dart三种模式
- nthread 并行线程数,默认最大
- sketch_eps??
- scale_pos_weight二分类问题时,正负样本??
详细可以参考下面两个:
1.https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/
2.https://zhuanlan.zhihu.com/p/27111288
5 总结
- 作用
这样就得到了新增树的权重的解,这个解与每个叶子节点的一阶导和二阶导有关,这个在树结构确定的情况下是已知的,这样,每确定一次树的结构,可以算出一个似然函数的值,通过比较似然函数,可以得到最优的树结构。 - xgboost优点
很简单,就是将似然函数用泰勒公式展开,然后加了一个正则项,再求似然函数的最小值。
6 参考资料
1.https://www.zhihu.com/question/58883125/answer/206813653
2.wepon:http://wepon.me/files/gbdt.pdf