前言
集成学习大致可分为两种:并行的集成学习方法Bagging和串行的集成学习方法Boosting。并行的集成学习方法,如随机森林,各个基学习器的构建是独立的,没有先后顺序。串行的集成方法,各个基学习器之间有强烈的依赖关系,如Adaboost, GBDT, Xgboost,LightGBM等。
一、GBDT
GBDT算法实现步骤如下:
给定数据集
T
=
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
T={(x_1,y_1),(x_2,y_2),...,(x_N,y_N)}
T=(x1,y1),(x2,y2),...,(xN,yN),损失函数定义为
L
(
y
,
f
(
x
)
)
L(y,f(x))
L(y,f(x)),这里损失函数必须一阶可导,基学习器定义为
f
(
x
;
γ
)
f(x;\gamma)
f(x;γ),最终总模型为
F
(
x
)
F(x)
F(x)。
- 初始化第一个模型为常数,令:
f 0 ( x ) = arg min γ ∑ i = 1 N L ( y i , γ ) (1) f_0(x)=\arg \min_{\gamma} \sum^N_{i=1}L(y_i,\gamma) \tag {1} f0(x)=argγmini=1∑NL(yi,γ)(1)
初始的CART决策树只有一个根结点,预测结果为一个常数,当损失函数为平方损失时,该常数为 y y y的均值,当损失函数为绝对值损失时,该常数为 y y y的中位数。
平方损失: L ( y , f ( x ) ) = ∑ i = 1 N ( f ( x i ) − y i ) 2 L(y,f(x))=\sum^N_{i=1}(f(x_i)-y_i)^2 L(y,f(x))=∑i=1N(f(xi)−yi)2
绝对值损失: L ( y , f ( x ) ) = ∣ y − f ( x ) ∣ L(y,f(x))=|y-f(x)| L(y,f(x))=∣y−f(x)∣
- 给定M个基学习器,并依次训练这M个基学习器。首先求总损失函数在 F m − 1 ( x ) F_{m-1}(x) Fm−1(x)上的负梯度值,构造训练第m个基学习器 f m ( x ) f_m(x) fm(x)所需的训练集。
g m ( x ) = − [ ∂ L ( y , F ( x ) ) ∂ F ( x ) ] F ( x ) = F m − 1 ( x ) (2) g_m(x)=-[\frac {\partial L(y,F(x))}{\partial F(x)}]_{F(x)=F_{m-1}(x)} \tag {2} gm(x)=−[∂F(x)∂L(y,F(x))]F(x)=Fm−1(x)(2)
训练集构造如下:
{
(
x
1
,
g
m
(
x
1
)
)
,
(
x
2
,
g
m
(
x
2
)
)
,
.
.
.
,
(
x
N
,
g
m
(
x
N
)
)
}
(3)
\{(x_1,g_m(x_1)),(x_2,g_m(x_2)),...,(x_N,g_m(x_N))\} \tag {3}
{(x1,gm(x1)),(x2,gm(x2)),...,(xN,gm(xN))}(3)
在上述训练集上训练决策树,得到空间划分
R
m
R_m
Rm与节点值
α
m
\alpha_m
αm,假设最终得到
J
J
J个叶子结点,则第
m
m
m个决策树
f
m
(
x
)
f_m(x)
fm(x)表示为:
f
m
(
x
)
=
∑
j
=
1
J
α
m
j
I
(
x
∈
R
m
j
)
(4)
f_m(x)=\sum^J_{j=1}\alpha_{mj}I(x\in R_{mj}) \tag {4}
fm(x)=j=1∑JαmjI(x∈Rmj)(4)
其中,
I
(
x
∈
R
m
j
)
I(x\in R_{mj})
I(x∈Rmj)是指示函数,
x
x
x属于区间
R
m
j
R_{mj}
Rmj,则
I
(
x
)
=
1
I(x)=1
I(x)=1, 反之
I
(
x
)
=
0
I(x)=0
I(x)=0。
采用线性搜索的方式得到
ρ
m
\rho_m
ρm:
ρ
m
=
arg
min
ρ
∑
i
=
1
N
L
(
y
,
F
m
−
1
+
ρ
f
m
(
x
;
α
m
)
)
(5)
\rho_m=\arg \min_{\rho}\sum^N_{i=1}L(y,F_{m-1}+\rho f_m(x;\alpha_m)) \tag {5}
ρm=argρmini=1∑NL(y,Fm−1+ρfm(x;αm))(5)
可以得到
F
m
(
x
)
=
F
m
−
1
(
x
)
+
ρ
m
f
m
(
x
)
F_m(x)=F_{m-1}(x)+\rho_mf_m(x)
Fm(x)=Fm−1(x)+ρmfm(x)。
- 进行M次优化得到最终的总模型为:
F ( x ) = ∑ m = 1 M ρ m f ( x ; α m ) (6) F(x)=\sum^M_{m=1}\rho_mf(x;\alpha_m) \tag {6} F(x)=m=1∑Mρmf(x;αm)(6)
小结:
梯度提升是Boosting框架的一种改进,它试图在上一次集成模型的负梯度方向训练新的基学习器,而梯度提升树,则是梯度提升框架的一种特殊实现,采用CART树作为基学习器,损失函数只要存在一阶导数即可。同时采用决策树作为基学习器,具备以下优点:可以处理缺失值,对异常值不敏感,决策树是不稳定的分类器。总之,GBDT模型具有以下特点:样本扰动,属性扰动,模型扰动,输出扰动。
二、Xgboost
与GBDT的损失函数不同,Xgboost的损失函数包含了正则项,其中权重
w
w
w表示样本通过规则集合
q
q
q,映射到叶子结点的决策结果。其损失函数(目标函数)表示如下:
L
(
t
)
=
∑
i
=
1
n
l
(
y
i
,
F
t
−
1
(
x
i
)
+
f
t
(
x
i
)
)
+
∑
i
=
1
t
Ω
(
f
i
)
(1)
L^{(t)}=\sum^n_{i=1}l(y_i,F_{t-1}(x_i)+f_t(x_i))+\sum^t_{i=1}\Omega(f_i) \tag{1}
L(t)=i=1∑nl(yi,Ft−1(xi)+ft(xi))+i=1∑tΩ(fi)(1)
泰勒公式如下:
f
(
x
+
δ
x
)
≃
f
(
x
)
+
f
′
(
x
)
δ
x
+
1
2
f
′
′
(
x
)
δ
x
2
(2)
f(x+\delta x)\simeq f(x)+f'(x)\delta x+\frac{1}{2}f''(x)\delta x^2 \tag{2}
f(x+δx)≃f(x)+f′(x)δx+21f′′(x)δx2(2)
将
F
t
−
1
(
x
i
)
F_{t-1}(x_i)
Ft−1(xi)看作泰勒公式中的
x
x
x,
f
t
(
x
i
)
)
f_t(x_i))
ft(xi))看作
δ
x
\delta x
δx,代入目标函数得:
L
(
t
)
≃
∑
i
=
1
n
[
l
(
y
i
,
F
t
−
1
(
x
i
)
)
+
g
i
f
t
(
x
i
)
+
1
2
h
i
f
t
2
(
x
i
)
]
+
∑
i
=
1
t
Ω
(
f
i
)
(3)
L^{(t)}\simeq \sum^n_{i=1}[l(y_i,F_{t-1}(x_i))+g_if_t(x_i)+\frac{1}{2}h_if_t^2(x_i)]+\sum^t_{i=1}\Omega(f_i) \tag{3}
L(t)≃i=1∑n[l(yi,Ft−1(xi))+gift(xi)+21hift2(xi)]+i=1∑tΩ(fi)(3)
其中,
g
i
=
[
∂
l
(
y
i
,
F
(
x
)
∂
F
(
x
)
]
F
(
x
)
=
F
t
−
1
(
x
)
g_i=[\frac{\partial l(y_i,F(x)}{\partial F(x)}]_{F(x)=F_{t-1}(x)}
gi=[∂F(x)∂l(yi,F(x)]F(x)=Ft−1(x)为一阶导数;
h i = [ ∂ l 2 ( y i , F ( x ) ∂ F ( x ) ] F ( x ) = F t − 1 ( x ) h_i=[\frac{\partial l^2(y_i,F(x)}{\partial F(x)}]_{F(x)=F_{t-1}(x)} hi=[∂F(x)∂l2(yi,F(x)]F(x)=Ft−1(x)为二阶导数。
而决策树可以表示为规则与权重的函数,将决策树
f
(
x
)
=
w
q
(
x
)
f(x)=w_q(x)
f(x)=wq(x)代入损失函数有:
L
(
t
)
≃
∑
i
=
1
n
[
l
(
y
i
,
F
t
−
1
(
x
i
)
)
+
g
i
f
t
(
x
i
)
+
1
2
h
i
f
t
2
(
x
i
)
]
+
∑
i
=
1
t
Ω
(
f
i
)
=
∑
i
=
1
n
[
l
(
y
i
,
F
t
−
1
(
x
i
)
)
+
g
i
w
q
(
x
i
)
+
1
2
h
i
w
q
(
x
i
)
2
]
+
∑
i
=
1
t
Ω
(
f
i
)
(4)
\begin{aligned} L^{(t)}&\simeq \sum^n_{i=1}[l(y_i,F_{t-1}(x_i))+g_if_t(x_i)+\frac{1}{2}h_if_t^2(x_i)]+\sum^t_{i=1}\Omega(f_i) \\ &=\sum^n_{i=1}[l(y_i,F_{t-1}(x_i))+g_iw_{q(x_i)}+\frac{1}{2}h_iw^2_{q(x_i)}]+\sum^t_{i=1}\Omega(f_i) \tag {4} \end{aligned}
L(t)≃i=1∑n[l(yi,Ft−1(xi))+gift(xi)+21hift2(xi)]+i=1∑tΩ(fi)=i=1∑n[l(yi,Ft−1(xi))+giwq(xi)+21hiwq(xi)2]+i=1∑tΩ(fi)(4)
其中,
l
(
y
i
,
F
t
−
1
(
x
i
)
)
l(y_i,F_{t-1}(x_i))
l(yi,Ft−1(xi))为前
t
−
1
t-1
t−1个模型集成的总模型与
y
y
y的损失函数,其结果为一个常数。因此,损失函数只与第t棵决策树的权重和正则项有关。
正则项包括叶子结点数T和叶节点权重值的L2正则项,形式如下:
Ω
(
f
t
)
=
γ
T
+
1
2
λ
∑
j
=
1
T
w
j
2
(5)
\Omega(f_t)=\gamma T+\frac{1}{2}\lambda \sum^T_{j=1}w^2_j \tag{5}
Ω(ft)=γT+21λj=1∑Twj2(5)
其中,
γ
\gamma
γ和
λ
\lambda
λ为超参数。将(5)代入(4)得:
L
(
t
)
≃
∑
i
=
1
n
[
l
(
y
i
,
F
t
−
1
(
x
i
)
)
+
g
i
w
q
(
x
i
)
+
1
2
h
i
w
q
(
x
i
)
2
]
+
∑
i
=
1
t
Ω
(
f
i
)
=
∑
i
=
1
n
[
l
(
y
i
,
F
t
−
1
(
x
i
)
)
+
g
i
w
q
(
x
i
)
+
1
2
h
i
w
q
(
x
i
)
2
]
+
∑
i
=
1
t
−
1
Ω
(
f
i
)
+
γ
T
+
1
2
λ
∑
j
=
1
T
w
j
2
(6)
\begin{aligned} L^{(t)}&\simeq \sum^n_{i=1}[l(y_i,F_{t-1}(x_i))+g_iw_{q(x_i)}+\frac{1}{2}h_iw^2_{q(x_i)}]+\sum^t_{i=1}\Omega(f_i) \\ &=\sum^n_{i=1}[l(y_i,F_{t-1}(x_i))+g_iw_{q(x_i)}+\frac{1}{2}h_iw^2_{q(x_i)}]+\sum^{t-1}_{i=1}\Omega(f_i)+\gamma T+\frac{1}{2}\lambda \sum^T_{j=1}w^2_j \tag {6} \end{aligned}
L(t)≃i=1∑n[l(yi,Ft−1(xi))+giwq(xi)+21hiwq(xi)2]+i=1∑tΩ(fi)=i=1∑n[l(yi,Ft−1(xi))+giwq(xi)+21hiwq(xi)2]+i=1∑t−1Ω(fi)+γT+21λj=1∑Twj2(6)
其中
l
(
y
i
,
F
t
−
1
(
x
i
)
)
l(y_i,F_{t-1}(x_i))
l(yi,Ft−1(xi))和
∑
i
=
1
t
−
1
Ω
(
f
i
)
\sum^{t-1}_{i=1}\Omega(f_i)
∑i=1t−1Ω(fi)分别为前
t
−
1
t-1
t−1个模型总集成模型的损失函数与正则项,在第t棵决策树建立时,二者均为常数,可以记为
c
o
n
s
t
a
n
t
constant
constant,而损失函数优化与常数项无关,优化时可以忽略掉,则损失函数可简写为以下形式:
L
(
t
)
≃
∑
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
(7)
L^{(t)}\simeq \sum^n_{i=1}[g_iw_{q(x_i)}+\frac{1}{2}h_iw^2_{q(x_i)}]+\gamma T+\frac{1}{2}\lambda \sum^T_{j=1}w^2_j \tag{7}
L(t)≃i=1∑n[giwq(xi)+21hiwq(xi)2]+γT+21λj=1∑Twj2(7)
假设已经知道决策树的结构部分
q
(
x
)
q(x)
q(x),则每个样本都会由
q
(
x
)
q(x)
q(x)给予不同路径,最终落到T个叶子结点的某一个上。则属于第
i
i
i个叶子结点的样本均被预测为
w
i
w_i
wi, 则上述损失函数可写成不同叶子结点加和的形式:
L
(
t
)
≃
∑
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
=
∑
j
=
1
T
[
(
∑
x
i
⊂
I
j
g
i
)
w
j
+
1
2
(
∑
x
i
⊂
I
j
h
i
)
w
j
2
]
+
γ
T
+
1
2
λ
∑
j
=
1
T
w
j
2
=
∑
j
=
1
T
[
(
∑
x
i
⊂
I
j
g
i
)
w
j
+
1
2
(
∑
x
i
⊂
I
j
h
i
+
λ
)
w
j
2
]
+
γ
T
(8)
\begin{aligned} L^{(t)}&\simeq \sum^n_{i=1}[g_iw_{q(x_i)}+\frac{1}{2}h_iw^2_{q(x_i)}]+\gamma T+\frac{1}{2}\lambda \sum^T_{j=1}w^2_j \\ &=\sum^T_{j=1}[(\sum_{x_i\subset I_j }g_i)w_j+\frac1 2 (\sum_{x_i\subset I_j }h_i)w_j^2]+\gamma T+\frac{1}{2}\lambda \sum^T_{j=1}w^2_j \\ &=\sum^T_{j=1}[(\sum_{x_i\subset I_j }g_i)w_j+\frac1 2 (\sum_{x_i\subset I_j }h_i+\lambda)w_j^2]+\gamma T \tag{8} \end{aligned}
L(t)≃i=1∑n[giwq(xi)+21hiwq(xi)2]+γT+21λj=1∑Twj2=j=1∑T[(xi⊂Ij∑gi)wj+21(xi⊂Ij∑hi)wj2]+γT+21λj=1∑Twj2=j=1∑T[(xi⊂Ij∑gi)wj+21(xi⊂Ij∑hi+λ)wj2]+γT(8)
其中,
I
j
I_j
Ij为第
j
j
j个叶子结点的样本集合,
x
i
⊂
I
j
x_i \subset I_j
xi⊂Ij表示经过结构部分
q
(
x
)
q(x)
q(x)映射落入第
j
j
j个叶子结点的样本。将每个叶子结点中关于
g
i
g_i
gi和
h
i
h_i
hi的部分表示如下:
G
j
=
∑
x
i
⊂
I
j
g
i
H
j
=
∑
x
i
⊂
I
j
h
i
(9)
G_j=\sum_{x_i \subset I_j}g_i \\ H_j=\sum_{x_i \subset I_j}h_i \tag{9}
Gj=xi⊂Ij∑giHj=xi⊂Ij∑hi(9)
将公式9代入8得损失函数形式如下:
L
(
t
)
≃
∑
j
=
1
T
[
(
∑
x
i
⊂
I
j
g
i
)
w
j
+
1
2
(
∑
x
i
⊂
I
j
h
i
+
λ
)
w
j
2
]
+
γ
T
=
∑
j
=
1
T
[
G
j
w
j
+
1
2
(
H
j
+
λ
)
w
j
2
]
+
γ
T
(10)
\begin{aligned} L^{(t)}&\simeq \sum^T_{j=1}[(\sum_{x_i\subset I_j }g_i)w_j+\frac1 2 (\sum_{x_i\subset I_j }h_i+\lambda)w_j^2]+\gamma T \\ &=\sum^T_{j=1}[G_j w_j+\frac1 2 (H_j+\lambda)w_j^2]+\gamma T \tag{10} \end{aligned}
L(t)≃j=1∑T[(xi⊂Ij∑gi)wj+21(xi⊂Ij∑hi+λ)wj2]+γT=j=1∑T[Gjwj+21(Hj+λ)wj2]+γT(10)
损失函数对w求偏导,令结果等于0,求得最优权重表达式:
w
j
∗
=
−
G
j
H
j
+
λ
,
j
=
1
,
2
,
.
.
.
,
T
(11)
w^*_j=-\frac{G_j}{H_j+\lambda},j=1,2,...,T \tag{11}
wj∗=−Hj+λGj,j=1,2,...,T(11)
将公式(11)代入公式(10),求得最优参数下的损失函数表达形式:
L
(
t
)
≃
∑
j
=
1
T
[
G
j
w
j
+
1
2
(
H
j
+
λ
)
w
j
2
]
+
γ
T
=
∑
j
=
1
T
[
−
G
j
G
j
H
j
+
λ
+
1
2
(
H
j
+
λ
)
⋅
(
−
G
j
H
j
+
λ
)
2
]
+
γ
T
=
−
1
2
∑
j
=
1
T
G
j
2
H
j
+
λ
+
γ
T
(12)
\begin{aligned} L^{(t)}&\simeq \sum^T_{j=1}[G_j w_j+\frac1 2 (H_j+\lambda)w_j^2]+\gamma T \\ &=\sum^T_{j=1}[-G_j\frac{G_j}{H_j+\lambda} +\frac1 2 (H_j+\lambda)·(\frac{-G_j}{H_j+\lambda} )^2]+\gamma T \\ &=-\frac1 2 \sum^T_{j=1}\frac{G_j^2}{H_j+\lambda}+\gamma T \tag{12} \end{aligned}
L(t)≃j=1∑T[Gjwj+21(Hj+λ)wj2]+γT=j=1∑T[−GjHj+λGj+21(Hj+λ)⋅(Hj+λ−Gj)2]+γT=−21j=1∑THj+λGj2+γT(12)
上述损失函数是在假设树的结构集合
q
(
x
)
q(x)
q(x)已经确定的基础上给出的,即任意给定一个树结构集合
q
(
x
)
q(x)
q(x),就可以用上述公式计算该结构的优劣,并评估当前决策树是不是最优结构。
有了评估指标之后,接下来就可以通过该指标,选择最优属性和最优切分点构造树,生成过程类似使用信息熵计算信息增益,每次切分如果指标值Loss下降,说明树结构可以继续优化。
Xgboost具备以下特点:数据扰动,属性扰动,输出扰动,算法扰动。
Xgb和Lgb对比
对比 | Xgb | Lgb | |
---|---|---|---|
切分策略 | level-wise,可并行加速,但会冗余分裂 | leaf-wise精度高,但容易过拟合 | |
并行方式 | 特征预排序,占用内存高 | 直方图算法,将连续数据离散化为直方图形式,牺牲一定的切分精度,但节省内存 | |
类别特征支持方式 | 类别特征oneHot编码 | 直接支持类别特征 | |
直方图差加速 | 计算某一节点的叶节点的直方图可以通过将该节点的直方图与另一子节点的直方图做差得到 | ||
特征并行,寻找最佳特征切分,并行化 | 数据列采样,不同机器保留不同的特征子集,各个机器上的worker根据所分配的特征子集寻找到局部最优切分点,互相通信寻找全局最佳切分特征,传输切分结果 | 每个机器保留整个完整的数据集,各个机器上的worker根据所分配的特征子集寻找到局部的最优切分点,互相通信来从局部最佳切分点里得到最佳切分点,减少了传输切分结果的步骤 | |
数据并行 | 行采样,对数据进行横向切分,worker使用分配到的局部数据构建局部的直方图,合并局部直方图得到全局的直方图,对全局直方图寻找最优切分点,然后进行切分,通信代价过高 | LightGBM通过Reduce Scatter方法来合并不同worker的无交叉的不同特征的直方图,这样找到该直方图的局部最优切分点,最后同步到全局最优切分点 | |
GBDT和Xgb对比
Xgb | GBDT | ||
---|---|---|---|
正则化 | 带正则项 | 无显式正则化 | |
目标函数 | 二阶泰勒展开 | 一阶泰勒展开 | |
预排序实现特征并行,提高训练效率 | |||
支持分布式计算 |