1. 文章
《XGBoost: A Scalable Tree Boosting System》
《LightGBM: A Highly Efficient Gradient Boosting Decision Tree》
2. Bagging
Bagging
通过 集成 的方式来 提高模型的稳定性。好比买股票倾向多买几只不同的股票来降低风险。
2.1 随机森林
随机森林 是 Bagging 最经典的一个模型种类。随机森林通过多棵决策树共同做决策。
2.2 Bagging vs Boosting
Bagging:Leverages unstable base learners that are weak because of overfitting.
Boosting:Leverages stable base learners that are weak because of underfitting.
2.3 提升树
给定一个预测问题,已经在此数据上训练出了一个模型- Model1,但效果不好,误差比较大。问题:如果只能接受去使用这个模型-Model1,但不能做任何改变,接下来如何去做?
基于残差的训练
3. Boosting
XGBoost 优点:
- 算法可以并行,训练效率高
- 比起其他的算法,实际效果好
- 由于可控参数多,可以灵活调整
学习路径
3.1 目标函数构建
假设已经训练好了 K 棵树,则对于第
i
i
i 个样本的(最终)预测值为:
y
^
i
=
∑
k
=
1
K
f
k
(
x
i
)
,
f
k
∈
F
\widehat{y}_{i}=\sum_{k=1}^{K} f_{k}\left(x_{i}\right), f_{k} \in \mathcal{F}
y
i=k=1∑Kfk(xi),fk∈F
目标函数
y
i
y_i
yi:真实值,
y
i
^
\hat{y_i}
yi^:预测值;
Ω
(
)
\Omega()
Ω():相当于惩罚项,正则化。
3.1.1 叠加式训练 Additive Training
给定一个样本
x
i
x_i
xi,假定第0 棵树的预测值
y
i
^
(
0
)
{\hat{y_i}}^{(0)}
yi^(0),作为 Default case,
y
i
^
(
0
)
=
0
{\hat{y_i}}^{(0)}=0
yi^(0)=0,有
y ^ i ( 0 ) = 0 ← Default case y ^ i ( 1 ) = f 1 ( x i ) = y ^ i ( 0 ) + f 1 ( x i ) y ^ i ( 2 ) = f 1 ( x i ) + f 2 ( x i ) = y ^ i ( 1 ) + f 2 ( x i ) ⋮ y ^ i ( k ) = f 1 ( x i ) + f 2 ( x i ) ⋯ + f k ( x i ) = ∑ i = 1 K f k ( x i ) = y ^ i ( k − 1 ) + f k ( x i ) (1) \begin{aligned} &\hat{y}_{i}^{(0)}=0 \leftarrow \text { Default case} \\ &\hat{y}_{i}^{(1)}=f_{1}\left(x_{i}\right)=\hat{y}_{i}^{(0)}+f_{1}\left(x_{i}\right) \\ &\hat{y}_{i}^{(2)}=f_{1}\left(x_{i}\right)+f_{2}\left(x_{i}\right)=\hat{y}_{i}^{(1)}+f_{2}\left(x_{i}\right) \\ &\qquad \vdots \\ &\hat{y}_{i}^{(k)}=f_{1}\left(x_{i}\right)+f_{2}\left(x_{i}\right)\cdots+f_{k}\left(x_{i}\right)=\sum_{i=1}^Kf_k(x_i)=\hat{y}_{i}^{(k-1)}+f_{k}\left(x_{i}\right) \tag{1} \end{aligned} y^i(0)=0← Default casey^i(1)=f1(xi)=y^i(0)+f1(xi)y^i(2)=f1(xi)+f2(xi)=y^i(1)+f2(xi)⋮y^i(k)=f1(xi)+f2(xi)⋯+fk(xi)=i=1∑Kfk(xi)=y^i(k−1)+fk(xi)(1)
已知前 k − 1 k-1 k−1 棵树的预测值 y ^ i ( k − 1 ) \hat{y}_{i}^{(k-1)} y^i(k−1),训练第 k k k 棵树。
损失函数记为 l ( y , y i ^ ) l(y,\hat{y_i}) l(y,yi^),共有 n n n 个样本 ( x i , i = 1... n ) (x_i, i=1...n) (xi,i=1...n),共 K K K棵树。
O b j = ∑ i = 1 n l ( y i , y ^ i ( k ) ) + ∑ k = 1 K Ω ( f k ) = ∑ i = 1 n l ( y i , y ^ i ( k − 1 ) + f k ( x i ) ) + ∑ k = 1 K Ω ( f k ) + Ω ( f k ) = ∑ i = 1 n l ( y i , y ^ i ( k − 1 ) + f k ( x i ) ) + Ω ( f k ) (2) \begin{aligned} O b j &=\sum_{i=1}^{n} l\left(y_{i}, \hat{y}_{i}^{(k)}\right)+\sum_{k=1}^{K} \Omega\left(f_{k}\right) \\ &=\sum_{i=1}^{n} l\left(y_{i}, \hat{y}_{i}^{(k-1)}+f_{k}(x_i)\right)+\sum_{k=1}^{K} \Omega\left(f_{k}\right)+\Omega(f_k) \\ &=\sum_{i=1}^{n} l\left(y_{i}, \hat{y}_{i}^{(k-1)}+f_{k}(x_i)\right)+\Omega(f_k) \tag{2} \end{aligned} Obj=i=1∑nl(yi,y^i(k))+k=1∑KΩ(fk)=i=1∑nl(yi,y^i(k−1)+fk(xi))+k=1∑KΩ(fk)+Ω(fk)=i=1∑nl(yi,y^i(k−1)+fk(xi))+Ω(fk)(2)
当训练第 k k k 棵树时,前 k − 1 k-1 k−1 棵树已经训练好了, ∑ k = 1 K Ω ( f k ) \sum_{k=1}^{K} \Omega\left(f_{k}\right) ∑k=1KΩ(fk)可看成常数项(省略), y ^ i ( k − 1 ) \hat{y}_{i}^{(k-1)} y^i(k−1)也可看成常数项,但保留。 y i y_i yi为真实值, f k ( x i ) f_k(x_i) fk(xi)为第 k k k棵树的预测值, Ω ( f k ) \Omega(f_k) Ω(fk)为第 k k k棵树的复杂度,目标是对 o b j obj obj 进行 最小化 。
3.2 使用泰勒级数近似目标函数
如果
f
(
x
)
f(x)
f(x) 在点
x
=
x
0
x=x_0
x=x0 具有任意阶导数,则幂级数
∑
n
=
0
∞
f
(
n
)
(
x
0
)
n
!
(
x
−
x
0
)
n
=
f
(
x
0
)
+
f
′
(
x
0
)
(
x
−
x
0
)
+
f
′
′
(
x
0
)
2
!
(
x
−
x
0
)
2
+
⋯
+
f
(
n
)
(
x
0
)
n
!
(
x
−
x
0
)
n
+
⋯
\sum_{n=0}^{\infty} \frac{f^{(n)}\left(x_{0}\right)}{n !}\left(x-x_{0}\right)^{n}=f\left(x_{0}\right)+f^{\prime}\left(x_{0}\right)\left(x-x_{0}\right)+\frac{f^{\prime \prime}\left(x_{0}\right)}{2 !}\left(x-x_{0}\right)^{2}+\cdots+\frac{f^{(n)}\left(x_{0}\right)}{n !}\left(x-x_{0}\right)^{n}+\cdots
n=0∑∞n!f(n)(x0)(x−x0)n=f(x0)+f′(x0)(x−x0)+2!f′′(x0)(x−x0)2+⋯+n!f(n)(x0)(x−x0)n+⋯
称为 f ( x ) f(x) f(x)在点 x 0 x_0 x0处的 泰勒级数。
目标函数:
o
b
j
k
=
∑
i
=
1
n
l
(
y
i
,
y
^
i
(
k
−
1
)
+
f
k
(
x
i
)
)
+
Ω
(
f
k
)
⇒
f
(
x
+
Δ
x
)
≈
f
(
x
)
+
f
′
(
x
)
⋅
Δ
x
+
1
2
f
′
′
(
x
)
⋅
Δ
x
2
T
a
y
l
o
r
E
x
p
a
n
s
i
o
n
⇒
令
x
=
y
^
i
(
k
−
1
)
,
Δ
x
=
f
k
(
x
i
)
f
(
x
)
=
l
(
y
i
,
y
^
i
(
k
−
1
)
)
,
f
(
x
+
Δ
x
)
=
l
(
y
i
,
y
^
i
(
k
−
1
)
+
f
k
(
x
i
)
)
(3)
\begin{aligned} &o b j_{k}=\sum_{i=1}^{n} l\left(y_{i}, \hat{y}_{i}^{(k-1)}+f_{k}\left(x_{i}\right)\right)+\Omega\left(f_{k}\right) \\ &\quad\Rightarrow f(x+\Delta x) \approx f(x)+f^{\prime}(x) \cdot \Delta x+\frac{1}{2} f^{\prime \prime}(x) \cdot \Delta x^{2} \quad Taylor Expansion \\ &\quad\Rightarrow 令 \quad x = \hat{y}_{i}^{(k-1)}, \qquad\Delta x = f_{k}(x_i) \\ &f(x)=l\left(y_{i}, \hat{y}_{i}^{(k-1)}\right), \qquad f(x+\Delta x)=l\left(y_{i}, \hat{y}_{i}^{(k-1)}+f_{k}(x_i)\right) \tag{3} \end{aligned}
objk=i=1∑nl(yi,y^i(k−1)+fk(xi))+Ω(fk)⇒f(x+Δx)≈f(x)+f′(x)⋅Δx+21f′′(x)⋅Δx2TaylorExpansion⇒令x=y^i(k−1),Δx=fk(xi)f(x)=l(yi,y^i(k−1)),f(x+Δx)=l(yi,y^i(k−1)+fk(xi))(3)
o b j k = ∑ i = 1 n l ( y i , y ^ i ( k − 1 ) + f k ( x i ) ) + Ω ( f k ) = ∑ i = 1 n [ l ( y i , y i ^ ( k − 1 ) ) ‾ + ∂ y i ^ ( x − 1 ) l ( y i , y i ^ ( x − 1 ) ) ‾ ⋅ f k ( x i ) + 1 2 ∂ y ^ i ( x − 1 ) 2 l ( y i , y ^ i ( x − 1 ) ) ‾ ⋅ f k 2 ( x i ) ] + Ω ( f k ) = ∑ i = 1 n [ l ( y i , y i ^ ( k − 1 ) ) ‾ + g i ‾ ⋅ f k ( x i ) + 1 2 h i ‾ ⋅ f k 2 ( x i ) ] + Ω ( f k ) (4) \begin{aligned} o b j_{k}&=\sum_{i=1}^{n} l\left(y_{i}, \hat{y}_{i}^{(k-1)}+f_{k}\left(x_{i}\right)\right)+\Omega\left(f_{k}\right) \\ &=\sum_{i=1}^{n}\left[ \underline{l\left(y_i, \hat{y_i}^{(k-1)}\right)} + \underline{\partial_{\hat{y_{i}}^{(x-1)}} l\left(y_{i}, \hat{y_{i}}^{(x-1)}\right)} \cdot f_{k}(x_i) + \frac{1}{2} \underline{ \partial_{\hat{y}_{i}^{(x-1)}}^{2} l\left(y_{i}, \hat{y}_{i}^{(x-1)}\right)} \cdot f_{k}^{2}\left(x_i\right) \right] +\Omega\ (f_{k}) \\ &=\sum_{i=1}^{n} \left[ \underline{l\left(y_i, \hat{y_i}^{(k-1)}\right)} + \underline{ g_i} \cdot f_{k}(x_i) + \frac{1}{2} \underline{h_i} \cdot f_{k}^{2}\left(x_i\right) \right] +\Omega\ (f_{k}) \\ \tag{4} \end{aligned} objk=i=1∑nl(yi,y^i(k−1)+fk(xi))+Ω(fk)=i=1∑n[l(yi,yi^(k−1))+∂yi^(x−1)l(yi,yi^(x−1))⋅fk(xi)+21∂y^i(x−1)2l(yi,y^i(x−1))⋅fk2(xi)]+Ω (fk)=i=1∑n[l(yi,yi^(k−1))+gi⋅fk(xi)+21hi⋅fk2(xi)]+Ω (fk)(4)
当训练第 k k k 棵树时,目标函数 m i n ( ∑ i = 1 n [ g i ⋅ f k ( x i ) + 1 2 h i ⋅ f k 2 ( x i ) ] + Ω ( f k ) ) min\left(\sum_{i=1}^{n} \left[ g_i \cdot f_{k}(x_i) + \frac{1}{2} h_i \cdot f_{k}^{2}\left(x_i\right) \right] +\Omega\ (f_{k}) \right) min(∑i=1n[gi⋅fk(xi)+21hi⋅fk2(xi)]+Ω (fk)), h i , g i {h_i, g_i} hi,gi 是已知的, l ( y i , y i ^ ( k − 1 ) ) l\left(y_i, \hat{y_i}^{(k-1)}\right) l(yi,yi^(k−1))为常数,省略。
3.3 树结构的参数化
对上面树结构进行简要的变换,
g
i
⋅
f
k
(
x
i
)
=
g
i
⋅
w
q
(
x
i
)
=
g
1
⋅
w
q
(
x
1
)
+
g
3
⋅
w
q
(
x
3
)
+
g
4
⋅
w
q
(
x
4
)
+
g
2
⋅
w
q
(
x
2
)
+
g
5
⋅
w
q
(
x
5
)
=
(
g
1
+
g
3
)
⋅
w
1
+
g
4
⋅
w
2
+
(
g
2
+
g
5
)
⋅
w
3
=
∑
i
∈
I
1
g
i
⋅
w
1
+
∑
i
∈
I
2
g
i
⋅
w
2
+
∑
i
∈
I
3
g
i
⋅
w
3
(5)
\begin{aligned} g_i \cdot f_{k}(x_i)&=g_i \cdot w_{q}(x_i) \\ &=g_1\cdot w_{q}(x_1) +g_3\cdot w_{q}(x_3)+g_4\cdot w_{q}(x_4)+g_2\cdot w_{q}(x_2)+g_5\cdot w_{q}(x_5) \\ &=(g_1+g_3) \cdot w_1+g_4\cdot w_2+(g_2+g_5)\cdot w_3 \\ &=\sum_{i \in {I_1}}g_i \cdot w_1 + \sum_{i \in {I_2}}g_i \cdot w_2 + \sum_{i \in {I_3}}g_i \cdot w_3 \tag{5} \end{aligned}
gi⋅fk(xi)=gi⋅wq(xi)=g1⋅wq(x1)+g3⋅wq(x3)+g4⋅wq(x4)+g2⋅wq(x2)+g5⋅wq(x5)=(g1+g3)⋅w1+g4⋅w2+(g2+g5)⋅w3=i∈I1∑gi⋅w1+i∈I2∑gi⋅w2+i∈I3∑gi⋅w3(5)
新的目标函数:
∑
i
=
1
n
[
g
i
⋅
f
k
(
x
i
)
+
1
2
h
i
⋅
f
k
2
(
x
i
)
]
+
Ω
(
f
k
)
=
∑
i
=
1
n
[
g
i
⋅
f
k
(
x
i
)
+
1
2
h
i
⋅
f
k
2
(
x
i
)
]
+
γ
T
+
1
2
λ
∑
j
=
1
T
w
j
2
=
∑
j
=
1
T
[
∑
i
∈
I
j
g
i
‾
⋅
w
j
+
1
2
(
∑
i
∈
I
j
h
i
‾
+
λ
)
⋅
w
j
2
]
+
γ
T
常
数
替
换
‾
=
∑
j
=
1
T
[
G
j
⋅
w
j
+
1
2
(
H
j
+
λ
)
⋅
w
j
2
]
+
γ
T
⇒
∼
b
w
j
+
1
2
a
w
j
2
+
c
∼
a
x
2
+
b
x
+
c
⇒
x
=
−
b
2
a
取
最
值
⇒
w
j
=
−
G
j
H
j
+
λ
代
入
=
∑
j
=
1
T
(
−
G
j
2
H
j
+
λ
+
1
2
G
j
2
H
j
+
λ
)
+
γ
T
=
−
1
2
∑
j
=
1
T
(
G
j
2
H
j
+
λ
)
+
γ
T
(6)
\begin{aligned} &\sum_{i=1}^{n} \left[ g_i \cdot f_{k}(x_i) + \frac{1}{2} h_i \cdot f_{k}^{2}\left(x_i\right) \right] +\Omega\ (f_{k}) \\ =&\sum_{i=1}^{n} \left[ g_i \cdot f_{k}(x_i) + \frac{1}{2} h_i \cdot f_{k}^{2}\left(x_i\right) \right] +\gamma T+\frac{1}{2}\lambda \sum_{j=1}^T w_j^2 \\ =&\sum_{j=1}^{T} \left[ \underline{\sum_{i \in {I_j}}g_i }\cdot w_j + \frac{1}{2} \left( \underline{\sum_{i \in {I_j}} h_i}+\lambda \right) \cdot w_j^2 \right] +\gamma T \qquad \underline{常数替换} \\ =&\sum_{j=1}^{T} \left[ G_j\cdot w_j + \frac{1}{2} (H_j +\lambda) \cdot w_j^2 \right] +\gamma T \\ \Rightarrow& \quad \sim \quad bw_j+\frac{1}{2} aw_j^2+c \quad \sim \quad ax^2+bx+c \quad\Rightarrow x=-\frac{b}{2a}取最值 \\ \Rightarrow& \quad w_j = -\frac{G_j}{H_j+\lambda} \qquad 代入 \\ =&\sum_{j=1}^{T}\left(-\frac{G_{j}^{2}}{H_{j}+\lambda}+\frac{1}{2} \frac{G_{j}^{2}}{H_{j}+\lambda}\right)+\gamma T \\ =& -\frac{1}{2} \sum_{j=1}^{T}\left(\frac{G_{j}^{2}}{H_{j}+\lambda}\right)+\gamma T \tag{6} \end{aligned}
===⇒⇒==i=1∑n[gi⋅fk(xi)+21hi⋅fk2(xi)]+Ω (fk)i=1∑n[gi⋅fk(xi)+21hi⋅fk2(xi)]+γT+21λj=1∑Twj2j=1∑T⎣⎡i∈Ij∑gi⋅wj+21⎝⎛i∈Ij∑hi+λ⎠⎞⋅wj2⎦⎤+γT常数替换j=1∑T[Gj⋅wj+21(Hj+λ)⋅wj2]+γT∼bwj+21awj2+c∼ax2+bx+c⇒x=−2ab取最值wj=−Hj+λGj代入j=1∑T(−Hj+λGj2+21Hj+λGj2)+γT−21j=1∑T(Hj+λGj2)+γT(6)
计算目标函数例子
o
b
j
=
−
1
2
∑
j
=
1
T
(
G
j
2
H
j
+
λ
)
+
γ
T
o
b
j
o
l
d
=
−
1
2
[
(
g
1
+
g
3
+
g
4
)
2
h
1
+
h
3
+
h
4
+
λ
+
(
g
2
+
g
5
)
2
h
2
+
h
5
+
λ
]
+
γ
⋅
2
o
b
j
n
e
w
=
−
1
2
[
(
g
1
+
g
3
)
2
h
1
+
h
3
+
λ
+
g
4
2
h
4
+
λ
+
(
g
2
+
g
5
)
2
h
2
+
h
5
+
λ
]
+
γ
⋅
3
m
a
x
(
o
b
j
o
l
d
−
o
b
j
n
e
w
)
=
1
2
[
G
L
2
H
L
+
λ
+
G
R
2
H
R
+
λ
−
(
G
L
+
G
R
)
2
H
L
+
H
R
+
λ
]
−
γ
⇒
G
L
=
g
1
+
g
3
,
G
R
=
g
4
,
H
L
=
h
1
+
h
3
,
H
R
=
h
4
(7)
\begin{aligned} &obj = -\frac{1}{2} \sum_{j=1}^{T}\left(\frac{G_{j}^{2}}{H_{j}+\lambda}\right)+\gamma T \\ &obj_{old} = -\frac{1}{2} \left[ \frac{(g_1+g_3+g_4)^2}{h_1+h_3+h_4+\lambda} + \frac{(g_2+g_5)^2}{h_2+h_5+\lambda}\right] +\gamma \cdot 2 \\ &obj_{new} = -\frac{1}{2} \left[ \frac{(g_1+g_3)^2}{h_1+h_3+\lambda} +\frac{g_4^2}{h_4+\lambda} + \frac{(g_2+g_5)^2}{h_2+h_5+\lambda}\right] +\gamma \cdot 3 \\ &max(obj_{old}-obj_{new}) =\frac{1}{2}\left[\frac{G_{L}^{2}}{H_{L}+\lambda}+\frac{G_{R}^{2}}{H_{R}+\lambda}-\frac{\left(G_{L}+G_{R}\right)^{2}}{H_{L}+H_{R}+\lambda}\right]-\gamma \\ &\Rightarrow \quad G_L=g_1+g_3, \quad G_R=g_4, \quad H_L=h_1+h_3,\quad H_R=h_4 \tag{7} \end{aligned}
obj=−21j=1∑T(Hj+λGj2)+γTobjold=−21[h1+h3+h4+λ(g1+g3+g4)2+h2+h5+λ(g2+g5)2]+γ⋅2objnew=−21[h1+h3+λ(g1+g3)2+h4+λg42+h2+h5+λ(g2+g5)2]+γ⋅3max(objold−objnew)=21[HL+λGL2+HR+λGR2−HL+HR+λ(GL+GR)2]−γ⇒GL=g1+g3,GR=g4,HL=h1+h3,HR=h4(7)
3.3.1 学习策略-确定树结构
采用贪心算法,每次尝试分裂一个叶节点,计算分裂后的增益,选择增益最大的。类似于在ID3
中的信息增益,和CART
树中的基尼指数,XGBoost
中损失函数如上图中obj
所示。
其中红色部分衡量了叶子节点对总体损失的贡献,目标函数越小越好,则红色部分越大越好,在XGBoost
中增益计算方式如上图中Gain
所示,Gain
值越大,说明分裂后能使目标函数减小的越多,也就是越好。
4. LightGBM
参考链接 - 网易云课堂 - 唐国梁Tommy - 最牛机器学习算法 lightGBM
4.1 XGBoost
核心思想: 1️⃣首先对所有都按照特征的数值进行预排序,2️⃣ 其次在遍历分割点的时候用O(#Data)
的代价找到一个特征上的最好分割点,3️⃣ 最后在找到一个特征的最好分割点后,将数据分裂成左右子节点。
优缺点:优点:能精确的找到分割点。缺点: 空间消耗大;1️⃣算法需要保存数据的特征值,还保存了特征排序的结果,2️⃣ 在遍历每一个分割点的时候,都需要进行分裂增益的计算,消耗的代价大。
4.2 lightGBM 算法核心
4.2.1 基于Histogram的决策树算法
原理:将连续的浮点特征离散成 k 个整数,并构造宽度为 k 的 Histogram
,然后遍历训练数据,统计每个离散值在直方图中的累计统计量。在进行特征选择时,只需要根据直方图的离散值,遍历寻找最优的分割点。
优点: 1️⃣占用内存更低,数据分隔的复杂度更低, 2️⃣ 用8位整型存储,内存消耗为原来的
1
8
\frac{1}{8}
81,3️⃣ 时间上的开销由原来的O(data * #features)
降到O(k * #features)
。
4.2.2 直方图做差加速
原理:1️⃣一个叶子节点的Histogram
可以直接由父节点的Histogram
和兄弟节点的Histogram
做差得到。
2️⃣ 通常构造直方图,需要遍历该叶子上的所有数据,但直方图做差仅需遍历直方图的K
个桶。
4.2.3 带深度限制的 Leaf-wise 的叶子生长策略
原理:每次从当前所有叶子中找到分裂增益最大(一般也是数据量最大)的一个叶子,然后分裂、如此循环。
优缺点:优点:同level-wise
相比,在分裂次数相同的情况下,leaf-wise
可以降低更多的误差,得到更好的精度。缺点: 可能会长出比较深的决策树,产生过拟合。
4.2.4 单边梯度采样 Gradient-based One-Side Sampling(GOSS)
原理:GOSS
算法从减少样本的角度出发,排除大部分小梯度的样本,仅用剩下的样本计算信息增益,它是一种在减少数据量和保证精度上平衡的算法。
算法流程:1️⃣GOSS
首先将要进行 分裂的特征 的所有取值按照 绝对值大小降序排序(XGBoost
一样也进行了排序,但是lightGBM
不用保存排序后的结果),选取绝对值最大的
a
∗
100
%
a * 100\%
a∗100%个数据。
2️⃣ 然后在剩下的较小梯度数据中随机选择 b ∗ 100 % b * 100\% b∗100%个数据。
3️⃣ 接着将这 b ∗ 100 % b * 100\% b∗100%个数据乘以一个常数 1 − a b \frac{1-a}{b} b1−a,这样算法就会更关注训练不足的样本,而不会过多改变原数据集的分布。
4️⃣ 最后使用这 ( a + b ) ∗ 100 % (a+b)*100\% (a+b)∗100% 个数据来计算信息增益。
4.2.5 互斥特征捆绑 Exclusive Feature Bunding (EFB)
背景:高纬度的数据往往是稀疏的,这种稀疏性启发我们设计一种无损 的方法来减少特征的维度。
算法步骤:① 将特征按照非零值的个数进行排序,② 计算不同特征之间的冲突比率,③ 遍历每个特征并尝试合并特征、使冲突比率最小化。
时间复杂度:直方图时间复杂度从O(data * #features)
降到O(k * #bundle)
,由于
#
b
u
d
d
l
e
<
<
#
f
e
a
t
u
r
e
\#buddle << \#feature
#buddle<<#feature,能够极大地加速 GBDT
的训练过程而且未损失精度。
优点:EFB
算法能够将许多互斥 的特征变为低维稠密 的特征,就能够有效的避免不必要 0 值特征的计算。
4.2.6 支持类别特征 (Categorical Feature)
原理:lightGBM
采用了many vs many
的切分方法,实现了类别特征的最优切分。
算法流程:1️⃣在枚举分割点之前,先把直方图按每个类别的label
均值进行排序,2️⃣ 按照排序的结果依次枚举最优分割点。
4.2.7 多线程优化
lightGBM
原生支持并行学习,目前支持 特征并行、数据并行、投票并行。
特征并行,原理:不同机器在不同特征集合上分别寻找最优的分割点,然后在机器间同步最优的分割点。
3台机器,6个特征;1和2特征→1号机器… 分别找最优特征,再进行整合。
lightGBM
不进行数据垂直划分,而是在每台机器上保持全部的训练数据,在得到最佳划分方案后可在本地执行划分而减少了不必要的通信。
数据并行: lightGBM
在数据并行中使用分散规约(Reduce scatter) 把直方图合并的任务分摊到不同的机器,降低通信和计算,并利用直方图做差,进一步减少了一半的通信量。
投票并行:基于投票的数据并行则进一步优化数据并行中的通信代价,使通信代价变成常数级。
算法流程:1️⃣本地找出top K 特征,并基于投票筛选出可能是最优分割点的特征;2️⃣ 合并时至合并每个机器选出来的特征。
4.3 lightGBM 优缺点
优点:速度快
1️⃣lightGBM
采用了histogram
算法将遍历样本转为遍历直方图,极大的降低了时间复杂度;
2️⃣lightGBM
在训练过程中采用单边梯度算法过滤掉梯度小的样本,减少了大量的计算;
3️⃣lightGBM
采用了基于leaf-wise
算法的增长策略构建树,减少了很多不必要的计算量
4️⃣lightGBM
采用优化后的 特征并行、数据并行方法加速计算,当数据量非常大的时候还可以采用投票并行的策略。
5️⃣lightGBM
对缓存也进行了优化,增加了缓存命中率。
优点:内存更小
1️⃣XGBoost
使用 预排序 后需要记录特征值及其对应样本的统计值的索引,而 lightGBM
使用了直方图算法将特征值变为bin
值,而不需要记录特征到样本的索引,将空间复杂度从
O
(
2
∗
#
d
a
t
a
)
O(2* \#data)
O(2∗#data)降低为
O
(
#
b
i
n
)
O(\#bin)
O(#bin),极大的减少了内存消耗;
2️⃣ lightGBM
在训练过程中采用互斥特征捆绑算法减少了特征数量,降低了内存消耗。
缺点
1️⃣ 可能会长出比较深的决策树,产生过拟合。因此lightGBM
在leaf-wise
之上增加了一个最大深度限制,在保证高效率的同时防止过拟合。
2️⃣ Boosting
是迭代算法,每一次迭代都根据上一次迭代的预测结果对样本进行权重调整,所以随着迭代不断进行,误差会越来越小,模型的偏差(bias)会不断降低。由于 lightGBM 是基于偏差的算法,所以对噪声点较为敏感;
3️⃣ 在寻找最优解时,依据的是最优切分变量,没有将最优解时全部特征的综合这一理念考虑进去。
参考链接 - 黄海广 - 机器学习课程-温州大学-08集成学习
参考链接 - 贪心科技
参考链接 - 贪心学院 - XGBoost的技术剖析
参考链接 - 微信公众号 - Abela的后花园 - 集成学习详解(XGBoost & lightBGM)
参考链接 - 网易云课堂 - 唐国梁Tommy - 最牛机器学习算法 lightGBM
参考链接 - 知乎 - Microstrong - 深入理解LightGBM