X G B O O S T XGBOOST XGBOOST
ID3:
信息增益(information gain)
G
a
i
n
(
D
,
a
)
=
E
n
t
(
D
)
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
E
n
t
(
D
v
)
(
1
)
Gain(D,a)=Ent(D)-\sum_{v=1}^V\dfrac{|D^v|}{|D|}{Ent(D^v)}\quad\quad(1)
Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)(1)
其中:
E
n
t
(
D
)
=
−
∑
k
=
1
y
P
k
l
o
g
2
P
k
Ent(D)=-\sum_{k=1}^y{P_klog_2P_k}
Ent(D)=−∑k=1yPklog2Pk也称为熵。
\quad\quad
决策树的本质是训练数据集中归纳出一组分类规则,我们需要的是一个训练数据矛盾较小的决策树,同时具有很好的泛化能力。
E
n
t
(
D
)
Ent(D)
Ent(D)的值越小,则
D
D
D的训读就越高,熵表示随机变量不确定性的度量。
表
一
:
贷
款
申
请
样
本
数
据
表
表一:贷款申请样本数据表
表一:贷款申请样本数据表
ID | 年龄 | 有工作 | 有自己房子 | 信贷情况 | 类别 |
---|---|---|---|---|---|
1 | 青年 | 否 | 否 | 一般 | 否 |
2 | 青年 | 否 | 否 | 好 | 否 |
3 | 青年 | 是 | 否 | 好 | 是 |
4 | 青年 | 是 | 是 | 一般 | 是 |
5 | 青年 | 否 | 否 | 一般 | 否 |
6 | 中年 | 否 | 否 | 一般 | 否 |
7 | 中年 | 否 | 否 | 好 | 否 |
8 | 中年 | 是 | 是 | 好 | 是 |
9 | 中年 | 否 | 是 | 非常好 | 是 |
10 | 中年 | 否 | 是 | 非常好 | 是 |
11 | 老年 | 否 | 是 | 非常好 | 是 |
12 | 老年 | 否 | 是 | 好 | 是 |
13 | 老年 | 是 | 否 | 好 | 是 |
14 | 老年 | 是 | 否 | 非常好 | 是 |
15 | 老年 | 否 | 否 | 一般 | 否 |
例题一:计算上述个样本的信息增益
①
H
(
D
)
=
−
9
15
l
o
g
2
9
15
−
6
15
l
o
g
2
6
15
=
0.971
H(D)=-\dfrac{9}{15}log_2\dfrac{9}{15}-\dfrac{6}{15}log_2\dfrac{6}{15}=0.971
H(D)=−159log2159−156log2156=0.971
g ( D , A 1 ) = H ( D ) − [ 5 15 H ( D 1 ) + 5 15 H ( D 2 ) + 5 15 H ( D 3 ) ] g(D,A_1)=H(D)-[\dfrac{5}{15}H(D_1)+\dfrac{5}{15}H(D_2)+\dfrac{5}{15}H(D_3)] g(D,A1)=H(D)−[155H(D1)+155H(D2)+155H(D3)]
\quad\quad\quad\quad = 0.971 − [ 5 15 ( − 2 5 l o g 2 2 5 ) − 3 5 l o g 2 3 5 ) =0.971-[\dfrac{5}{15}(-\dfrac{2}{5}log_2\dfrac{2}{5})-\dfrac{3}{5}log_2\dfrac{3}{5}) =0.971−[155(−52log252)−53log253)
\quad\quad\quad\quad\quad\quad\quad\quad + 5 15 ( − 3 5 l o g 2 3 5 ) − 2 5 l o g 2 2 5 ) +\dfrac{5}{15}(-\dfrac{3}{5}log_2\dfrac{3}{5})-\dfrac{2}{5}log_2\dfrac{2}{5}) +155(−53log253)−52log252)
\quad\quad\quad\quad\quad\quad\quad\quad + 5 15 ( − 4 5 l o g 2 4 5 ) − 1 5 l o g 2 1 5 ) ] +\dfrac{5}{15}(-\dfrac{4}{5}log_2\dfrac{4}{5})-\dfrac{1}{5}log_2\dfrac{1}{5})] +155(−54log254)−51log251)]
\quad\quad\quad\quad
=
0.971
−
0.888
=0.971-0.888
=0.971−0.888
\quad\quad\quad\quad
=
0.083
=0.083
=0.083
②
g
(
D
,
A
2
)
=
H
(
D
)
−
[
5
15
H
(
D
1
)
+
10
15
H
(
D
2
)
]
g(D,A_2)=H(D)-[\dfrac{5}{15}H(D_1)+\dfrac{10}{15}H(D_2)]
g(D,A2)=H(D)−[155H(D1)+1510H(D2)]
\quad\quad\quad\quad\quad
=
0.971
−
0.647
=0.971-0.647
=0.971−0.647
\quad\quad\quad\quad\quad
=
0.324
=0.324
=0.324
③
g
(
D
,
A
3
)
=
H
(
D
)
−
[
6
15
H
(
D
1
)
+
9
15
H
(
D
2
)
]
g(D,A_3)=H(D)-[\dfrac{6}{15}H(D_1)+\dfrac{9}{15}H(D_2)]
g(D,A3)=H(D)−[156H(D1)+159H(D2)]
\quad\quad\quad\quad\quad
=
0.971
−
0.551
=0.971-0.551
=0.971−0.551
\quad\quad\quad\quad\quad
=
0.420
=0.420
=0.420
④
g
(
D
,
A
4
)
=
H
(
D
)
−
[
4
15
H
(
D
1
)
+
6
15
H
(
D
2
)
+
5
15
H
(
D
3
)
]
g(D,A_4)=H(D)-[\dfrac{4}{15}H(D_1)+\dfrac{6}{15}H(D_2)+\dfrac{5}{15}H(D_3)]
g(D,A4)=H(D)−[154H(D1)+156H(D2)+155H(D3)]
\quad\quad\quad\quad\quad
=
0.971
−
0.608
=0.971-0.608
=0.971−0.608
\quad\quad\quad\quad\quad
=
0.363
=0.363
=0.363
C4.5:
\qquad
特征A对训练数据集D的信息增益比
g
R
(
D
,
A
)
g_R(D,A)
gR(D,A)定义为其信息增益
g
(
D
,
A
)
g(D,A)
g(D,A)与训练数据集D关于特征A的值的熵
H
A
(
D
)
H_A(D)
HA(D)之比即:
g
a
i
n
R
a
t
i
o
(
D
,
A
)
=
g
(
D
,
A
)
H
A
(
D
)
(
2
)
gainRatio(D,A)=\frac{g(D,A)}{H_A(D)}\quad\quad(2)
gainRatio(D,A)=HA(D)g(D,A)(2)
其中:
H
A
(
D
)
=
∑
i
=
1
n
∣
D
i
∣
∣
D
∣
l
o
g
2
∣
D
i
∣
∣
D
∣
H_A(D)=\sum_{i=1}^n\frac{|D_i|}{|D|}log_2\frac{|D_i|}{|D|}
HA(D)=∑i=1n∣D∣∣Di∣log2∣D∣∣Di∣
例如:对年龄求
H
A
(
D
)
H_A(D)
HA(D)
则
H
A
1
(
D
)
=
−
5
15
(
−
2
5
l
o
g
2
5
−
3
5
l
o
g
3
5
)
H_{A_1}(D)=-\dfrac{5}{15}(-\dfrac{2}{5}log\dfrac{2}{5}-\dfrac{3}{5}log\dfrac{3}{5})
HA1(D)=−155(−52log52−53log53)
= − 5 15 ( − 3 5 l o g 3 5 − 2 5 l o g 2 5 ) \quad\quad\quad\quad=-\dfrac{5}{15}(-\dfrac{3}{5}log\dfrac{3}{5}-\dfrac{2}{5}log\dfrac{2}{5}) =−155(−53log53−52log52)
= − 5 15 ( − 4 5 l o g 4 5 − 1 5 l o g 1 5 ) \quad\quad\quad\quad=-\dfrac{5}{15}(-\dfrac{4}{5}log\dfrac{4}{5}-\dfrac{1}{5}log\dfrac{1}{5}) =−155(−54log54−51log51)
=
0.888
\quad\quad\quad\quad=0.888
=0.888
则
g
a
i
n
R
a
t
i
o
(
D
,
A
1
)
=
g
(
D
,
A
1
)
H
A
1
(
D
)
=
0.083
0.888
=
0.093
gainRatio(D,A_1)=\dfrac{g(D,A_1)}{H_{A1}(D)}=\dfrac{0.083}{0.888}=0.093
gainRatio(D,A1)=HA1(D)g(D,A1)=0.8880.083=0.093
同理: g a i n R a t i o ( D , A 2 ) = 0.324 0.647 = 0.501 gainRatio(D,A_2)=\dfrac{0.324}{0.647}=0.501 gainRatio(D,A2)=0.6470.324=0.501
g a i n R a t i o ( D , A 3 ) = 0.420 0.551 = 0.762 \quad\quad gainRatio(D,A_3)=\dfrac{0.420}{0.551}=0.762 gainRatio(D,A3)=0.5510.420=0.762
g
a
i
n
R
a
t
i
o
(
D
,
A
4
)
=
0.363
0.608
=
0.597
\quad\quad gainRatio(D,A_4)=\dfrac{0.363}{0.608}=0.597
gainRatio(D,A4)=0.6080.363=0.597
\quad
增益率准则对可取值数目较少的属性有所偏好,因此C4.5算法并不是直接选取增益率最大的候选划分属性,而是使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益最高的。
剪枝
\quad
预剪枝:在决策树生成过程过程中,在每个节点上划分之前先进行估计,若当前节点的划分不能带来决策树的泛化性能提升,则停止划分并将当前节点标记为叶节点。
\quad
后剪枝:是先从训练集中生成一棵完整的决策树,然后自底向上对非叶节点进行考察,若将该节点对应的子树替换为叶节点能带来决策树泛化性能的提升,则将该子树替换为叶节点。
\quad
决策树的剪枝,往往是通过极小化决策树整体的损失函数或代价函数来实现,决策树学习的损失函数可以定义为:
C
α
(
T
)
=
∑
t
=
1
∣
T
∣
N
t
H
t
(
T
)
+
α
∣
T
∣
(
3
)
C_\alpha(T)=\sum_{t=1}^{|T|}N_tH_t(T)+\alpha|T|\quad\quad(3)
Cα(T)=t=1∑∣T∣NtHt(T)+α∣T∣(3)
其中:
∣
T
∣
|T|
∣T∣为叶子节点个数,
t
t
t是树
∣
T
∣
|T|
∣T∣的叶节点,该叶节点有
N
t
N_t
Nt个样本点,其中
k
k
k类的样本点有
N
t
k
N_{tk}
Ntk个。
H
t
(
T
)
=
−
∑
k
N
t
k
N
t
l
o
g
2
N
t
k
N
t
(
4
)
H_t(T)=-\sum_{k}\dfrac{N_{tk}}{N_t}log_2\dfrac{N_{tk}}{N_t}\quad\quad(4)
Ht(T)=−k∑NtNtklog2NtNtk(4)
在损失函数中
C
(
T
)
=
∑
t
=
1
∣
T
∣
N
t
H
t
(
T
)
=
−
∑
t
=
1
∣
T
∣
∑
k
=
1
K
N
t
k
l
o
g
2
N
t
k
N
t
(
5
)
C(T)=\sum_{t=1}^{|T|}N_tH_t(T)=-\sum_{t=1}^{|T|}\sum_{k=1}^{K}N_{tk}log_2\dfrac{N_{tk}}{N_t}\quad\quad(5)
C(T)=t=1∑∣T∣NtHt(T)=−t=1∑∣T∣k=1∑KNtklog2NtNtk(5)
则
C
α
(
T
)
=
C
(
T
)
+
α
∣
T
∣
C_\alpha(T)=C(T)+\alpha{|T|}
Cα(T)=C(T)+α∣T∣
例: ∣ T ∣ {|T|} ∣T∣其实就是模型的复杂度。
颜色 | 测试人员 | 结果 |
---|---|---|
yellow | adult | 1 |
yellow | child | 0 |
1
°
1^°
1°局部剪枝前,该节点的损失为:
C
α
(
T
)
=
C
(
T
)
+
α
∣
T
∣
=
0
+
2
α
=
2
α
C_\alpha(T)=C(T)+\alpha{|T|}=0+2\alpha=2\alpha
Cα(T)=C(T)+α∣T∣=0+2α=2α
2
°
2^°
2°局部剪枝后,该节点的损失为:
C
α
(
T
)
=
C
(
t
)
+
α
∣
t
∣
=
C
(
t
)
+
α
C_\alpha(T)=C(t)+\alpha{|t|}=C(t)+\alpha
Cα(T)=C(t)+α∣t∣=C(t)+α
其中: C ( t ) = N t H t = 2 ( − 1 2 l o g 1 2 − 1 2 l o g 1 2 ) = 2 C(t)=N_tH_t=2(-\dfrac{1}{2}log\dfrac{1}{2}-\dfrac{1}{2}log\dfrac{1}{2})=2 C(t)=NtHt=2(−21log21−21log21)=2
故: C α ( T ) = 2 + α C_\alpha(T)=2+\alpha Cα(T)=2+α,定义 α = 特 征 个 数 2 \alpha=\frac{特征个数}{2} α=2特征个数
CART
\quad
CART同样是由特征选择树的生成及剪枝组成,既可用于分类也可用于回归,常用Gini系数度量。
\quad
CART由两步组成,①决策树的生成基于训练数据生成决策树,生成的树尽量大。②决策树的剪枝,用验证数据集对已经生成的树进行剪枝,并选择最优子树,此时用损失函数最小作为剪枝的标准。
**例:**还以前面表格为例
A
1
,
A
2
,
A
3
,
A
4
\quad A_1,A_2,A_3,A_4
A1,A2,A3,A4分别表示年龄、有工作、有自己房子和信贷情况这四个特征并以1、2、3表示青中老年,以1、2表示有工作和有自己房子的值为是和否,以1、2、3表示信贷情况的值为非常好、好、一般,求特征A的基尼指数。
G
a
i
n
(
D
,
A
1
=
1
)
=
5
15
[
2
×
2
5
×
(
1
−
2
5
)
+
10
15
[
2
×
7
10
×
(
1
−
7
10
)
]
=
0.44
Gain(D,A_1=1)=\frac{5}{15}[2×\frac{2}{5}×(1-\frac{2}{5})+\frac{10}{15}[2×\frac{7}{10}×(1-\frac{7}{10})]=0.44
Gain(D,A1=1)=155[2×52×(1−52)+1510[2×107×(1−107)]=0.44
G a i n ( D , A 1 = 2 ) = 5 15 [ 2 × 3 5 × ( 1 − 3 5 ) + 10 15 [ 2 × 6 10 × ( 1 − 6 10 ) ] = 0.48 Gain(D,A_1=2)=\frac{5}{15}[2×\frac{3}{5}×(1-\frac{3}{5})+\frac{10}{15}[2×\frac{6}{10}×(1-\frac{6}{10})]=0.48 Gain(D,A1=2)=155[2×53×(1−53)+1510[2×106×(1−106)]=0.48
G
a
i
n
(
D
,
A
1
=
3
)
=
5
15
[
2
×
4
5
×
(
1
−
4
5
)
+
10
15
[
2
×
5
10
×
(
1
−
5
10
)
]
=
0.44
Gain(D,A_1=3)=\frac{5}{15}[2×\frac{4}{5}×(1-\frac{4}{5})+\frac{10}{15}[2×\frac{5}{10}×(1-\frac{5}{10})]=0.44
Gain(D,A1=3)=155[2×54×(1−54)+1510[2×105×(1−105)]=0.44
即:
A
1
、
A
3
A_1、A_3
A1、A3都可以,选
A
1
A_1
A1青年一类,(中、老年)为一类。
有工作和有自己的房子都是二份,可以不用切分,则信贷情况
A
4
A_4
A4:
G
a
i
n
(
D
,
A
4
=
1
)
=
4
15
×
0
+
11
15
[
2
×
5
11
×
(
1
−
5
11
)
]
=
0.36
Gain(D,A_4=1)=\dfrac{4}{15}×0+\dfrac{11}{15}[2×\dfrac{5}{11}×(1-\dfrac{5}{11})]=0.36
Gain(D,A4=1)=154×0+1511[2×115×(1−115)]=0.36
G a i n ( D , A 4 = 2 ) = 0.47 Gain(D,A_4=2)=0.47 Gain(D,A4=2)=0.47
G
a
i
n
(
D
,
A
4
=
3
)
=
0.32
Gain(D,A_4=3)=0.32
Gain(D,A4=3)=0.32
则:
G
a
i
n
(
D
,
A
4
=
3
)
Gain(D,A_4=3)
Gain(D,A4=3)最小,故选为最优切分点。
{
G
a
i
n
(
D
,
A
1
=
3
)
=
0.44
G
a
i
n
(
D
,
A
2
=
1
)
=
0.32
=
5
15
×
(
1
×
0
×
2
)
+
10
15
×
(
4
10
×
6
10
×
2
)
=
0.32
G
a
i
n
(
D
,
A
3
=
1
)
=
0.27
=
6
15
×
(
1
×
0
×
2
)
+
9
15
×
(
3
9
×
6
9
×
2
)
=
0.27
G
a
i
n
(
D
,
A
4
=
3
)
=
0.32
\begin{cases} Gain(D,A_1=3)=0.44\\&&&&\\ Gain(D,A_2=1)=0.32=\frac{5}{15}×(1×0×2)+\frac{10}{15}×(\frac{4}{10}×\frac{6}{10}×2)=0.32\\&&&&\\ Gain(D,A_3=1)=0.27=\frac{6}{15}×(1×0×2)+\frac{9}{15}×(\frac{3}{9}×\frac{6}{9}×2)=0.27\\&&&&\\ Gain(D,A_4=3)=0.32 \end{cases}
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧Gain(D,A1=3)=0.44Gain(D,A2=1)=0.32=155×(1×0×2)+1510×(104×106×2)=0.32Gain(D,A3=1)=0.27=156×(1×0×2)+159×(93×96×2)=0.27Gain(D,A4=3)=0.32
由小到大,
A
3
A_3
A3为最优切分点,依次
A
1
、
A
2
、
A
4
A_1、A_2、A_4
A1、A2、A4,故选择
A
2
A_2
A2为最优切分点。
CART分类树的生成算法
i
n
p
u
t
input
input:训练数据集D
o
u
t
p
u
t
output
output:CART分类决策树
\quad
构建训练数据集从根节点开始,递归对每个节点进行以下操作。
1
°
1^°
1°设节点的训练集从根节点开始为
D
D
D,计算现有特征的
G
i
n
i
Gini
Gini指数,此时对每一个特征
A
A
A,对其可能取的值
a
a
a,根据样本点对
A
=
a
A=a
A=a的测试为“是”或“否”将
D
D
D分割成
D
1
D_1
D1和
D
2
D_2
D2两部分,则计算
A
=
a
A=a
A=a时的基尼指数。
2
°
2^°
2°在所有特征
A
A
A,以及他们所有可能的切分点中选择基尼指数最小的特征及其对应的切分点作为最优特征和最优切分点,依据最优特征及最优切分点,将现节点生成两个子节点,将训练数据依据特征分配到两个子节点中。
3
°
3^°
3°对两个子节点递归调用步骤
1
°
1^°
1°、
2
°
2^°
2°直到满足停止条件。
4
°
4^°
4°生成CART二叉决策树。
注:算法停止计算条件是节点中的样本个数小于预定阈值,或样本的基尼指数小于预定阈值,或没有更多特征。
XGBOOST全称(Extreme Gradient Boosting)
1、CART
\quad
CART(回归树)是xgboost最基本的组成部分,其根据训练特征及训练数据构建分类树,判定每条数据的预测结果,其中构建树使用gain指数计算增益,即构建树的特征选取。
\quad\quad
gini指数公式:
G
i
n
i
(
D
)
=
∑
k
=
1
K
P
k
(
1
−
P
k
)
(
6
)
Gini(D)=\sum_{k=1}^{K}P_k(1-P_k)\quad\quad(6)
Gini(D)=∑k=1KPk(1−Pk)(6)
P
k
P_k
Pk:表示数据
D
D
D中类别K的概率,
K
K
K表示类别个数。
\quad\quad
gini指数增益公式:
G
i
n
i
(
D
,
A
)
=
−
∣
D
1
∣
∣
D
∣
G
i
n
i
(
D
1
)
+
∣
D
2
∣
∣
D
∣
G
i
n
i
(
D
2
)
(
7
)
Gini(D,A)=-\dfrac{|D_1|}{|D|}Gini(D_1)+\dfrac{|D_2|}{|D|}Gini(D_2)\quad\quad(7)
Gini(D,A)=−∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)(7)
D
D
D:表示整个数据集,
D
1
D_1
D1和
D
2
D_2
D2分别表示数据集中特征为
A
A
A的数据集合特征为非
A
A
A的数据集,
G
i
n
i
(
D
1
)
Gini(D_1)
Gini(D1)表示特征为
A
A
A的数据集的
g
i
n
i
gini
gini指数。
2、CART回归树的生成
\quad
对回归树用平方误差最小化准则,对分类树用基尼指数最小化。
1 ° \quad1^° 1°给定训练集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } ( 8 ) D=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}\quad\quad(8) D={(x1,y1),(x2,y2),...,(xN,yN)}(8)
2 ° \quad2^° 2°将输入空间划分为 M M M个单元 R 1 , R 2 , . . . , R M R_1,R_2,...,R_M R1,R2,...,RM,并在每个单元 R m R_m Rm上有一个固定的输出值 C m → C_m\to Cm→回归树模型 f ( x ) = ∑ m = 1 M C m I ( x ∈ R m ) ( 9 ) f(x)=\sum_{m=1}^{M}C_mI(x\in R_m)\quad\quad(9) f(x)=∑m=1MCmI(x∈Rm)(9)
3 ° \quad3^° 3°可以用平方误差 ∑ x i ∈ R m ( y i − f ( x i ) ) 2 \sum_{x_i\in R_m}(y_i-f(x_i))^2 ∑xi∈Rm(yi−f(xi))2来表示回归树对于训练数据的预测误差则最优 C ^ m = a v e ( y i ∣ x i ∈ R m ) ( 10 ) {\widehat C_m}=ave(y_i|x_i\in R_m)\quad\quad(10) C m=ave(yi∣xi∈Rm)(10)
4 ° \quad4^° 4°这里采用启发式方法选择第 j j j个变量 x ( i ) x^{(i)} x(i)和它的取值 S S S作为切分变量和切分点,则两个区域 R 1 ( j , s ) = { x ∣ x ( j ) ≤ s } R_1(j,s)=\{x|x^{(j)}\le s\} R1(j,s)={x∣x(j)≤s}和 R 2 ( j , s ) = { x ∣ x ( j ) > s } ( 11 ) R_2(j,s)=\{x|x^{(j)}\gt s\}\quad\quad(11) R2(j,s)={x∣x(j)>s}(11)
5 ° \quad5^° 5°寻找最优点 j j j和 s s s,求解 min j , s [ min c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − C c 1 ) 2 + min c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] ( 12 ) \min\limits_{j,s}[\min\limits_{c_1}\sum_{x_i\in R_1(j,s)}(y_i-Cc_1)^2+\min\limits_{c_2}\sum_{x_i\in R_2(j,s)}(y_i-c_2)^2]\quad\quad(12) j,smin[c1min∑xi∈R1(j,s)(yi−Cc1)2+c2min∑xi∈R2(j,s)(yi−c2)2](12)
6 ° \quad6^° 6°对固定的输入变量 j j j可以找到最优切分点 s s s: C ^ 1 = a v e ( y i ∣ x i ∈ R 1 ( j , s ) ) \widehat C_1=ave(y_i|x_i\in R_1(j,s)) C 1=ave(yi∣xi∈R1(j,s))和 C ^ 2 = a v e ( y i ∣ x i ∈ R 2 ( j , s ) ) ( 13 ) \widehat C_2=ave(y_i|x_i\in R_2(j,s))\quad\quad(13) C 2=ave(yi∣xi∈R2(j,s))(13)
7
°
\quad7^°
7°遍历所有的输入变量,找到最优且分变量
j
j
j,构成一个对
(
j
,
s
)
(j,s)
(j,s),知道满足停止条件。
例:
表
二
:
C
A
R
T
例
题
表
表二:CART例题表
表二:CART例题表
x | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
y | 5.56 | 5.7 | 5.91 | 6.4 | 6.8 | 7.05 | 8.9 | 8.7 | 9 | 9.05 |
1
°
\quad1^°
1°在本数据集中,只有一个变量,则最优切分点就是
x
x
x。
2
°
\quad2^°
2°则
x
x
x有9个切分点
[
1.5
,
2.5
,
3.5
,
4.5
,
5.5
,
6.5
,
7.5
,
8.5
,
9.5
]
[1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5]
[1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5]
3
°
\quad3^°
3°损失函数定义为平方损失函数,
L
o
s
s
(
y
,
f
(
x
)
)
=
(
f
(
x
)
−
y
)
2
Loss(y,f(x))=(f(x)-y)^2
Loss(y,f(x))=(f(x)−y)2,其中
C
m
=
a
v
e
(
y
i
∣
x
i
∈
R
m
)
C_m=ave(y_i|x_i\in R_m)
Cm=ave(yi∣xi∈Rm)
4
°
\quad4^°
4°取
s
=
1.5
s=1.5
s=1.5则
R
1
=
{
1
}
R_1=\{1\}
R1={1},
R
2
=
{
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
}
R_2=\{2,3,4,5,6,7,8,9,10\}
R2={2,3,4,5,6,7,8,9,10}这两个区域的输出值分别为:
C
1
=
5.56
C_1=5.56
C1=5.56,
C
2
=
1
9
(
5.7
+
5.91
+
6.4
+
6.8
+
7.05
+
8.9
+
8.7
+
9
+
9.05
)
=
7.5
C_2=\dfrac{1}{9}(5.7+5.91+6.4+6.8+7.05+8.9+8.7+9+9.05)=7.5
C2=91(5.7+5.91+6.4+6.8+7.05+8.9+8.7+9+9.05)=7.5其结果如下表:
s | 1.5 | 2.5 | 3.5 | 4.5 | 5.5 | 6.5 | 7.5 | 8.5 | 9.5 |
---|---|---|---|---|---|---|---|---|---|
c 1 c_1 c1 | 5.56 | 5.63 | 5.72 | 5.89 | 6.07 | 6.24 | 6.62 | 6.88 | 7.11 |
c 2 c_2 c2 | 7.5 | 7.73 | 7.99 | 8.25 | 8.54 | 8.91 | 8.92 | 9.03 | 9.05 |
5
°
\quad5^°
5°把
c
1
,
c
2
c_1,c_2
c1,c2的值带入公式
(
12
)
(12)
(12)中,如:
m
(
1.5
)
=
0
+
[
(
7.5
−
5.7
)
2
+
(
7.5
−
5.91
)
2
+
(
7.5
−
6.4
)
2
+
(
7.5
−
6.8
)
2
m(1.5)=0+[(7.5-5.7)^2+(7.5-5.91)^2+(7.5-6.4)^2+(7.5-6.8)^2
m(1.5)=0+[(7.5−5.7)2+(7.5−5.91)2+(7.5−6.4)2+(7.5−6.8)2
(
7.5
−
7.05
)
2
+
(
7.5
−
8.9
)
2
+
(
7.5
−
8.7
)
2
+
(
7.5
−
9
)
2
+
(
7.5
−
9.05
)
2
]
\quad\quad\quad(7.5-7.05)^2+(7.5-8.9)^2+(7.5-8.7)^2+(7.5-9)^2+(7.5-9.05)^2]
(7.5−7.05)2+(7.5−8.9)2+(7.5−8.7)2+(7.5−9)2+(7.5−9.05)2]
=
0
+
15.7231
=
15.7231
\quad\quad\quad=0+15.7231=15.7231
=0+15.7231=15.7231
6
°
\quad6^°
6°同理,可获得如下表所示:
s | 1.5 | 2.5 | 3.5 | 4.5 | 5.5 | 6.5 | 7.5 | 8.5 | 9.5 |
---|---|---|---|---|---|---|---|---|---|
m ( s ) m(s) m(s) | 15.72 | 12.07 | 8.36 | 5.78 | 3.91 | 1.93 | 8.01 | 11.73 | 15.74 |
7
°
\quad7^°
7°由上表可知,取
s
=
6.5
s=6.5
s=6.5时,
m
(
s
)
m(s)
m(s)最小,第一个划分变量
j
=
x
,
s
=
6.5
j=x,s=6.5
j=x,s=6.5。
8
°
\quad8^°
8°以选定的
(
j
,
s
)
(j,s)
(j,s)划分区域,并决定输出值,两个区域分别是
R
1
=
{
1
,
2
,
3
,
4
,
5
,
6
}
,
R
2
=
{
7
,
8
,
9
,
10
}
R_1=\{1,2,3,4,5,6\},R_2=\{7,8,9,10\}
R1={1,2,3,4,5,6},R2={7,8,9,10}输出值
C
m
=
a
v
e
(
y
i
∣
x
i
∈
R
m
)
,
c
1
=
6.24
,
c
2
=
8.91
C_m=ave(y_i|x_i\in R_m),c_1=6.24,c_2=8.91
Cm=ave(yi∣xi∈Rm),c1=6.24,c2=8.91。
9
°
\quad9^°
9°对两个子区域继续调用以上步骤:对
R
1
:
R_1:
R1:
x | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
y | 5.56 | 5.7 | 5.91 | 6.4 | 6.8 | 7.05 |
切分点 [ 1.5 , 2.5 , 3.5 , 4.5 , 5.5 ] [1.5,2.5,3.5,4.5,5.5] [1.5,2.5,3.5,4.5,5.5],则各个区域对应输出 c c c值如下表.
s | 1.5 | 2.5 | 3.5 | 4.5 | 5.5 |
---|---|---|---|---|---|
c 1 c_1 c1 | 5.56 | 5.63 | 5.72 | 5.89 | 6.07 |
c 2 c_2 c2 | 6.37 | 6.54 | 6.75 | 6.93 | 7.05 |
计算 m ( s ) m(s) m(s)如下:
s | 1.5 | 2.5 | 3.5 | 4.5 | 5.5 |
---|---|---|---|---|---|
m ( s ) m(s) m(s) | 1.3087 | 0.754 | 0.2771 | 0.4368 | 1.0644 |
s
=
3.5
s=3.5
s=3.5时最小。
1
0
°
\quad10^°
10°生成回归树,假设在生成3个区域后停止划分,则最后的回归树形式,
T
=
{
5.72
x
≤
3.5
6.75
3.5
<
x
≤
6.5
8.91
x
>
6.5
T=\begin{cases}5.72\quad\quad x\le3.5\\&&&&\\6.75\quad\quad 3.5\lt x\le6.5\\&&&&\\8.91\quad\quad x\gt6.5\end{cases}
T=⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧5.72x≤3.56.753.5<x≤6.58.91x>6.5
XGBOOST树的定义:
1、下面以论文中的例子为例来说明
\quad 我们通过CART的方法将家庭成员分到了不同的叶子节点,同事每个叶子节点上都有一个分数,CART的叶子节点仅包含分数,每个叶子节点的分数给了我们更多的解释,这让CART统一优点更容易,此时的一棵树是不够用的,这时就需要把更多的树预测结果综合起来, ⇒ \Rightarrow ⇒符合树模型。如图所示:
2、xgboost推导过程
1
°
\quad1^°
1°将每棵树上的分数简单相加就得到了最终的分数,用数学公式表达如下:
y
^
=
∑
k
=
1
K
f
k
(
x
i
)
,
f
k
∈
F
(
14
)
\hat y=\sum\limits_{k=1}^{K}f_k(x_i),\quad\quad f_k\in F\quad\quad(14)
y^=k=1∑Kfk(xi),fk∈F(14)
{
k
:
表
示
树
的
棵
树
。
f
:
是
函
数
空
间
中
F
的
一
个
函
数
。
F
:
表
示
C
A
R
T
的
所
有
可
能
集
合
。
\begin{cases}k:表示树的棵树。\\&&&&\\f:是函数空间中F的一个函数。\\&&&&\\F:表示CART的所有可能集合。\end{cases}
⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧k:表示树的棵树。f:是函数空间中F的一个函数。F:表示CART的所有可能集合。
2
°
\quad2^°
2°增量训练模型,增量训练的方式是在前一步的基础上增加一棵树,而新增的这棵树是为了修复上一棵树的不足,我们把每
t
t
t步的预测用
y
^
i
(
t
)
\hat y_i^{(t)}
y^i(t)表示,如此有如下:
{
y
^
i
(
0
)
=
0
&
y
^
i
(
1
)
=
f
1
(
x
i
)
=
y
^
i
(
1
)
+
f
1
(
x
i
)
⋮
y
^
i
(
t
)
=
∑
k
=
1
t
f
k
(
x
i
)
=
y
^
i
(
t
−
1
)
+
f
t
(
x
i
)
(
15
)
\begin{cases}\hat y_i^{(0)}=0\&\\ \hat y_i^{(1)}=f_1(x_i)=\hat y_i^{(1)}+f_1(x_i)\\ &{\vdots}\\ \hat y_i^{(t)}=\sum\limits_{k=1}^{t}f_k(x_i)=\hat y_i^{(t-1)}+f_t(x_i)\end{cases}\quad\quad(15)
⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧y^i(0)=0&y^i(1)=f1(xi)=y^i(1)+f1(xi)y^i(t)=k=1∑tfk(xi)=y^i(t−1)+ft(xi)⋮(15)
3
°
\quad3^°
3°上面的式子在每一部中如何确定哪棵树是我们需要的呢?一个很自然的想法就是增加这棵树是否有助于我们的目标函数。
O
b
j
(
t
)
=
∑
i
=
1
n
l
(
y
i
,
y
^
i
(
t
)
)
+
∑
i
=
1
t
Ω
(
f
i
)
(
16
)
Obj^{(t)}=\sum\limits_{i=1}^{n}l(y_i,\hat y_i^{(t)})+\sum\limits_{i=1}^{t}\Omega(f_i)\quad\quad(16)
Obj(t)=i=1∑nl(yi,y^i(t))+i=1∑tΩ(fi)(16)
即:目标函数=$训练误差+正则化,上式可以转化为:
O
b
j
(
t
)
=
∑
i
=
1
n
l
(
y
i
,
y
^
i
(
t
−
1
)
+
f
t
(
x
i
)
)
+
Ω
(
f
t
)
+
Ψ
(
t
)
(
17
)
Obj^(t)=\sum\limits_{i=1}^{n}l(y_i,\hat y_i^{(t-1)}+f_t(x_i))+\Omega(f_t)+\Psi(t)\quad\quad(17)
Obj(t)=i=1∑nl(yi,y^i(t−1)+ft(xi))+Ω(ft)+Ψ(t)(17)
4
°
\quad4^°
4°用MSE(均方差)作为损失函数,如此式子就变成了:
O
b
j
(
t
)
=
∑
i
=
1
n
(
y
i
−
(
y
^
i
(
t
−
1
)
+
f
t
(
x
i
)
)
)
2
+
∑
i
=
1
t
Ω
(
f
i
)
(
18
)
Obj^(t)=\sum\limits_{i=1}^{n}(y_i-(\hat y_i^{(t-1)}+f_t(x_i)))^2+\sum\limits_{i=1}^{t}\Omega(f_i)\quad\quad(18)
Obj(t)=i=1∑n(yi−(y^i(t−1)+ft(xi)))2+i=1∑tΩ(fi)(18)
化简如下:
=
∑
i
=
1
n
[
(
y
i
−
y
^
i
(
t
−
1
)
)
−
f
t
(
x
i
)
]
2
+
∑
i
=
1
t
Ω
(
f
i
)
\quad\quad\quad\quad=\sum\limits_{i=1}^{n}[(y_i-\hat y_i^{(t-1)})-f_t(x_i)]^2+\sum\limits_{i=1}^{t}\Omega(f_i)
=i=1∑n[(yi−y^i(t−1))−ft(xi)]2+i=1∑tΩ(fi)
=
∑
i
=
1
n
[
(
y
i
−
y
^
i
(
t
−
1
)
)
2
−
2
(
y
i
−
y
^
i
(
t
−
1
)
)
f
t
(
x
i
)
+
f
t
2
(
x
i
)
]
+
∑
i
=
1
t
Ω
(
f
i
)
\qquad\qquad\qquad\qquad=\sum\limits_{i=1}^{n}[(y_i-\hat y_i^{(t-1)})^2-2(y_i-\hat y_i^{(t-1)})f_t(x_i)+f_t^2(x_i)]+\sum\limits_{i=1}^{t}\Omega(f_i)
=i=1∑n[(yi−y^i(t−1))2−2(yi−y^i(t−1))ft(xi)+ft2(xi)]+i=1∑tΩ(fi)
=
∑
i
=
1
n
[
2
(
y
^
i
(
t
−
1
)
−
y
i
)
f
t
(
x
i
)
+
f
t
2
(
x
i
)
]
+
Ω
(
f
t
)
+
Ψ
(
t
)
(
19
)
\qquad\qquad\qquad\qquad=\sum\limits_{i=1}^{n}[2(\hat y_i^{(t-1)}-y_i)f_t(x_i)+f_t^2(x_i)]+\Omega(f_t)+\Psi(t)\quad\quad(19)
=i=1∑n[2(y^i(t−1)−yi)ft(xi)+ft2(xi)]+Ω(ft)+Ψ(t)(19)
5
°
\quad5^°
5°对于用EMS求出来的损失函数的式子比较友好,包含一个一阶项和一个二阶项,但对于其他形式就很难导出,对于其他形式的函数,则我们采用泰勒公式来逼近计算。
T
a
y
l
o
r
:
f
(
x
+
Δ
x
)
=
f
(
x
)
+
f
′
(
x
)
Δ
x
+
1
2
f
′
′
(
x
)
Δ
x
2
+
ο
(
Δ
x
2
)
(
20
)
Taylor:\quad\quad f(x+\Delta x)=f(x)+f{'}{(x)}\Delta x+\frac{1}{2}f{''}{(x)}\Delta x^2+\omicron(\Delta x^2)\quad\quad(20)
Taylor:f(x+Δx)=f(x)+f′(x)Δx+21f′′(x)Δx2+ο(Δx2)(20)
6
°
\quad6^°
6°则目标函数
O
b
j
(
t
)
=
∑
i
=
1
n
l
(
y
i
,
y
^
i
(
t
)
)
+
∑
i
=
1
t
Ω
(
f
i
)
Obj^{(t)}=\sum\limits_{i=1}^{n}l(y_i,\hat y_i^{(t)})+\sum\limits_{i=1}^{t}\Omega(f_i)
Obj(t)=i=1∑nl(yi,y^i(t))+i=1∑tΩ(fi)可以转化为:
O
b
j
(
t
)
=
∑
i
=
1
n
l
(
y
i
,
y
^
i
(
t
−
1
)
)
+
g
i
f
t
(
x
i
)
+
1
2
h
i
f
t
2
(
x
i
)
+
Ω
(
f
t
)
+
Ψ
(
t
)
(
21
)
Obj^{(t)}=\sum\limits_{i=1}^{n}l(y_i,\hat y_i^{(t-1)})+g_if_t(x_i)+\frac{1}{2}h_if_t^{2}(x_i)+\Omega(f_t)+\Psi(t)\quad\quad(21)
Obj(t)=i=1∑nl(yi,y^i(t−1))+gift(xi)+21hift2(xi)+Ω(ft)+Ψ(t)(21)
其中:
g
i
=
∂
[
l
(
y
i
,
y
^
i
(
t
−
1
)
)
]
∂
[
y
^
i
(
t
−
1
)
]
,
h
i
=
∂
2
[
l
(
y
i
,
y
^
i
(
t
−
1
)
)
]
∂
[
y
^
i
(
t
−
1
)
]
2
g_i=\dfrac{\partial[l(y_i,\hat y_i^{(t-1)})]}{\partial[\hat y_i^{(t-1)}]},\quad\quad h_i=\dfrac{\partial^{2}[l(y_i,\hat y_i^{(t-1)})]}{\partial[\hat y_i^{(t-1)}]^2}
gi=∂[y^i(t−1)]∂[l(yi,y^i(t−1))],hi=∂[y^i(t−1)]2∂2[l(yi,y^i(t−1))]
7
°
\quad7^°
7°对上述式子删除常数项,则目标函数为:
O
b
j
(
t
)
=
∑
i
=
1
n
[
g
i
f
t
(
x
i
)
+
1
2
h
i
f
t
2
(
x
i
)
]
+
Ω
(
f
t
)
(
22
)
Obj^{(t)}=\sum\limits_{i=1}^{n}[g_if_t(x_i)+\frac{1}{2}h_if_t^2(x_i)]+\Omega(f_t)\quad\quad(22)
Obj(t)=i=1∑n[gift(xi)+21hift2(xi)]+Ω(ft)(22)
上述式子就是优化目标,式子只需要
g
i
g_i
gi和
h
i
h_i
hi,这就是xgboost为什么能支持自定义损失函数的原因,所以我们能够优化每一种损失函数,包括逻辑回归和加权逻辑回归,只需要把对应的
g
i
g_i
gi和
h
i
h_i
hi作为输入即可。
8
°
\quad8^°
8°模型复杂度,现在说说正则化部分,即
Ω
(
f
t
)
\Omega(f_t)
Ω(ft),在此之前需要定义
f
(
x
)
f(x)
f(x)
f
t
(
x
)
=
w
q
(
x
)
,
w
∈
R
T
,
q
:
R
d
→
{
1
,
2
,
.
.
.
,
T
}
(
23
)
f_t(x)=w_{q(x)}, \quad\quad w\in R^T,\quad\quad q:R^d \to\{1,2,...,T\}\quad\quad(23)
ft(x)=wq(x),w∈RT,q:Rd→{1,2,...,T}(23)
{
w
:
表
示
叶
子
节
点
上
的
分
数
所
组
成
的
向
量
。
q
:
表
示
每
个
数
据
映
射
到
相
应
叶
子
节
点
的
对
应
关
系
函
数
(
q
(
x
)
叶
子
节
点
编
号
)
,
从
左
至
右
。
T
:
表
示
叶
子
节
点
的
数
量
。
\begin{cases}w:表示叶子节点上的分数所组成的向量。\\&&&&\\q:表示每个数据映射到相应叶子节点的对应关系函数(q(x)叶子节点编号),从左至右。\\&&&&\\T:表示叶子节点的数量。\end{cases}
⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧w:表示叶子节点上的分数所组成的向量。q:表示每个数据映射到相应叶子节点的对应关系函数(q(x)叶子节点编号),从左至右。T:表示叶子节点的数量。
在xgboost中用如下公式定义复杂度:
Ω
(
f
)
=
γ
T
+
1
2
λ
∑
j
=
1
T
w
j
2
(
24
)
\Omega(f)=\gamma T+\frac{1}{2}\lambda\sum\limits_{j=1}^{T}w_j^2\quad\quad(24)
Ω(f)=γT+21λj=1∑Twj2(24)
上述式子表现的非常友好,然而其他算法直接将正则项忽略。
9
°
\quad9^°
9°这一部分是推广过程中比较神奇的一步,根据上述过程,写出第
t
t
t步树的目标值。
O
b
j
(
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
(
25
)
Obj^{(t)}=\sum\limits_{i=1}^{n}[g_iw_{q(x_i)}+ \frac{1}{2}h_iw_{q(x_i)}^2]+\gamma T+\frac{1}{2}\lambda\sum\limits_{j=1}^{T}w_j^2\quad\quad(25)
Obj(t)=i=1∑n[giwq(xi)+21hiwq(xi)2]+γT+21λj=1∑Twj2(25)
化简为:
O
b
j
(
t
)
=
∑
j
=
1
T
[
(
∑
i
∈
I
j
g
i
)
w
j
+
1
2
(
∑
i
∈
I
j
h
i
+
λ
)
w
j
2
]
+
γ
T
(
26
)
Obj^{(t)}=\sum\limits_{j=1}^{T}[(\sum\limits_{i\in I_j}g_i)w_j+\frac{1}{2}(\sum\limits_{i\in I_j}h_i+\lambda)w_j^2]+\gamma T\quad\quad(26)
Obj(t)=j=1∑T[(i∈Ij∑gi)wj+21(i∈Ij∑hi+λ)wj2]+γT(26)
其中:
{
w
q
(
x
i
)
=
f
t
(
x
i
)
∑
i
=
1
n
w
q
(
x
i
)
=
∑
j
=
1
T
w
j
\begin{cases} w_{q(x_i)}=f_t(x_i)\\&&&&\\ \sum\limits_{i=1}^{n}w_{q(x_i)}=\sum\limits_{j=1}^{T}w_j \end{cases}
⎩⎪⎪⎪⎨⎪⎪⎪⎧wq(xi)=ft(xi)i=1∑nwq(xi)=j=1∑Twj
1
0
°
\quad10^°
10°上式中的
I
j
=
{
i
∣
q
(
x
i
)
=
j
}
I_j=\{i|q(x_i)=j\}
Ij={i∣q(xi)=j}表示每个映射到第
j
j
j个叶子节点对应的数据样本,要注意的是,因为映射到相同叶子节点上的数据样本他们的分数是相同的,所以可以改变求和顺序。
同时令:
{
G
j
=
∑
i
∈
I
j
g
i
H
j
=
∑
i
∈
I
j
h
i
\begin{cases}G_j=\sum\limits_{i\in I_j}g_i\\&&&&\\H_j=\sum\limits_{i\in I_j}h_i\end{cases}
⎩⎪⎪⎪⎨⎪⎪⎪⎧Gj=i∈Ij∑giHj=i∈Ij∑hi,则上式
(
26
)
(26)
(26)可以转化为:
O
b
j
(
t
)
=
∑
j
=
1
T
[
G
j
w
j
+
1
2
(
H
j
+
λ
)
w
j
2
]
+
γ
T
(
27
)
Obj^{(t)}=\sum\limits_{j=1}^{T}[G_jw_j+\frac{1}{2}(H_j+\lambda)w_j^2]+\gamma T\quad\quad(27)
Obj(t)=j=1∑T[Gjwj+21(Hj+λ)wj2]+γT(27)
1
1
°
\quad11^°
11°在上述式子中,每个
w
j
w_j
wj都是相互独立的,那么针对一元二次方程
G
j
w
j
+
1
2
(
H
j
+
λ
)
w
j
2
G_jw_j+\frac{1}{2}(H_j+\lambda)w_j^2
Gjwj+21(Hj+λ)wj2而言,可以比较容易求出当新增这棵树的结构
q
(
x
)
q(x)
q(x)一直的情况下,目标函数最小值的
w
j
w_j
wj,对上式
(
27
)
(27)
(27)求
w
w
w的偏导数:令
∂
[
O
b
j
(
t
)
]
∂
w
=
∂
[
G
j
w
j
+
1
2
(
H
j
+
λ
)
w
j
2
]
∂
w
=
0
(
28
)
\frac{\partial[Obj^{(t)}]}{\partial w}=\frac{\partial[G_jw_j+\frac{1}{2}(H_j+\lambda)w_j^2]}{\partial w}=0\quad\quad(28)
∂w∂[Obj(t)]=∂w∂[Gjwj+21(Hj+λ)wj2]=0(28)
对上式求解:即:
G
j
+
(
H
j
+
λ
)
w
j
=
0
G_j+(H_j+\lambda)w_j=0
Gj+(Hj+λ)wj=0
⇒
w
j
∗
=
−
G
j
H
j
+
λ
(
29
)
\Rightarrow w_j^{\ast}=\dfrac{-G_j}{H_j+\lambda}\quad\quad(29)
⇒wj∗=Hj+λ−Gj(29)
将
⇒
w
j
∗
=
−
G
j
H
j
+
λ
\Rightarrow w_j^{\ast}=\dfrac{-G_j}{H_j+\lambda}
⇒wj∗=Hj+λ−Gj带入式子
(
27
)
(27)
(27)中得:
O
b
j
∗
=
−
1
2
∑
j
=
1
T
G
j
2
H
j
+
λ
+
γ
T
(
30
)
Obj^{\ast}=-\frac{1}{2}\sum\limits_{j=1}^{T}\frac{G_j^2}{H_j+\lambda}+\gamma T\quad\quad(30)
Obj∗=−21j=1∑THj+λGj2+γT(30)
1
2
°
\quad12^°
12°一旦数的结构已知,则只需计算每个节点上的
g
i
g_i
gi和
h
i
h_i
hi,然后把各个叶子节点上的这些数值加起来,用上述式子便可知道这棵树的优势。
3、如何学习树的结构
\quad
现在已经知道一旦树的结构确定下来便可计算叶子节点的分数,以及这棵树的优劣。那么现在解决如何学习这棵树的结构,一种是遍历所有可能树结构,然后找到最优的那棵树,如此这样做是非常不切实际的,因为情况太多,所以采用贪心解法。就是在树的每层构建过程中来优化目标,假设特征已经选定,可以通过以下式子获得收益:
G
a
i
n
=
1
2
[
G
L
2
H
L
+
λ
+
G
R
2
H
R
+
λ
−
(
G
L
+
G
R
)
2
H
L
+
H
R
+
λ
]
−
γ
(
31
)
Gain=\frac{1}{2}[\frac{G_L^2}{H_L+\lambda}+\frac{G_R^2}{H_R+\lambda}-\frac{(G_L+G_R)^2}{H_L+H_R+\lambda}]-\gamma \quad\quad(31)
Gain=21[HL+λGL2+HR+λGR2−HL+HR+λ(GL+GR)2]−γ(31)
其中:
{
G
L
2
H
L
+
λ
:
左
子
树
分
数
。
G
R
2
H
R
+
λ
:
右
子
树
分
数
。
(
G
L
+
G
R
)
2
H
L
+
H
R
+
λ
:
不
分
割
节
点
时
原
节
点
的
分
数
。
γ
:
加
入
新
叶
子
节
点
引
入
的
复
杂
度
代
价
。
\begin{cases} \frac{G_L^2}{H_L+\lambda}:左子树分数。\\&&\\ \frac{G_R^2}{H_R+\lambda}:右子树分数。\\&&\\ \frac{(G_L+G_R)^2}{H_L+H_R+\lambda}:不分割节点时原节点的分数。\\&&\\ \gamma:加入新叶子节点引入的复杂度代价。 \end{cases}
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧HL+λGL2:左子树分数。HR+λGR2:右子树分数。HL+HR+λ(GL+GR)2:不分割节点时原节点的分数。γ:加入新叶子节点引入的复杂度代价。
注:
1
°
\quad1^°
1°其实正则为什么可以控制模型复杂度呢?,最直观的就是,为了目标函数最小,自然正则项也要笑,
⇒
\Rightarrow
⇒正则要小
⇒
\Rightarrow
⇒叶子节点个数
T
T
T要小
⇒
\Rightarrow
⇒叶子节点数少,树就简单。
2
°
\quad2^°
2°然而为什么要对叶子节点进行
L
2
L_2
L2正则,这个可以参考LR里面进行正则的原因,简单地说就是LR没有加正则,这个
w
w
w的参数空间是无限大的,只有加了正则以后,才会把
w
w
w的解规范在一个范围内。(不带正则的LR每次出来权重
w
w
w都不一样,但是loss都一样,加了
L
2
L_2
L2正则后,每次得到的
w
w
w都一样。)
3
°
\quad3^°
3°具体来说,我们回忆一下建树的时候需要做什么,建树的时候最关键的一步就是选择一个分裂的准则,也就是如何评价分裂的质量,在分类任务里,损失函数可以选择Logloss,分裂准则选择MSE。
XGBOOST手动还原例题
例 题 原 始 表 例题原始表 例题原始表
ID | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
x 1 x_1 x1 | 1 | 2 | 3 | 1 | 2 | 6 | 7 | 6 | 7 | 6 | 8 | 9 | 10 | 8 | 9 |
x 2 x_2 x2 | -5 | 5 | -2 | 2 | 0 | -5 | 5 | -2 | 2 | 0 | -5 | 5 | -2 | 2 | 0 |
y y y | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 |
\quad
这里为了计算简单树的深度设置为3(math_depth=3),树的棵树设置为2(num_boost_round=2),学习率为0.1(eta=0.1),另外正则参数
λ
=
1
,
γ
=
0
\lambda=1,\gamma=0
λ=1,γ=0。
\quad
由于后面需要用到Logloss的一阶导数和二阶导数,这里简单推导一下:
L
(
y
i
,
y
^
i
)
=
y
i
l
n
(
1
+
e
−
y
^
i
)
+
(
1
−
y
i
)
l
n
(
1
+
e
y
^
i
)
(
32
)
L(y_i,\hat y_i)=y_iln(1+e^{-\hat y_i})+(1-y_i)ln(1+e^{\hat y_i})\quad\quad(32)
L(yi,y^i)=yiln(1+e−y^i)+(1−yi)ln(1+ey^i)(32)
对
y
^
i
\hat y_i
y^i取一阶导数:
L
′
(
y
i
,
y
^
i
)
=
y
i
−
e
−
y
^
i
1
+
e
−
y
^
i
+
(
1
−
y
i
)
e
y
^
i
1
+
e
y
^
i
L^{'}(y_i,\hat y_i)=y_i\dfrac{-e^{-\hat y_i}}{1+e^{-\hat y_i}}+(1-y_i)\dfrac{e^{\hat y_i}}{1+e^{\hat y_i}}
L′(yi,y^i)=yi1+e−y^i−e−y^i+(1−yi)1+ey^iey^i
=
y
i
−
(
e
−
y
^
i
+
1
)
+
1
1
+
e
−
y
^
i
+
(
1
−
y
i
)
1
1
+
e
−
y
^
i
\qquad\qquad\qquad\qquad\qquad=y_i\dfrac{-(e^{-\hat y_i}+1)+1}{1+e^{-\hat y_i}}+(1-y_i)\dfrac{1}{1+e^{-\hat y_i}}
=yi1+e−y^i−(e−y^i+1)+1+(1−yi)1+e−y^i1
=
y
i
(
−
(
e
−
y
^
i
+
1
)
+
1
e
−
y
^
i
+
1
)
+
(
1
−
y
i
)
1
1
+
e
−
y
^
i
\qquad\qquad\qquad\qquad\qquad=y_i(\dfrac{-(e^{-\hat y_i}+1)+1}{e^{-\hat y_i}+1})+(1-y_i)\dfrac{1}{1+e^{-\hat y_i}}
=yi(e−y^i+1−(e−y^i+1)+1)+(1−yi)1+e−y^i1
=
y
i
∗
(
y
i
,
p
r
e
d
−
1
)
+
(
1
−
y
i
)
∗
y
i
,
p
r
e
d
\qquad\qquad\qquad\qquad\qquad=y_i*(y_{i,pred}-1)+(1-y_i)*y_{i,pred}
=yi∗(yi,pred−1)+(1−yi)∗yi,pred
=
y
i
,
p
r
e
d
−
y
i
\qquad\qquad\qquad\qquad\qquad=y_{i,pred}-y_i
=yi,pred−yi
其中:
1
1
+
e
−
y
^
i
=
y
i
,
p
r
e
d
\dfrac{1}{1+e^{-\hat y_i}}=y_{i,pred}
1+e−y^i1=yi,pred
二阶导数:在一阶导数的基础上再取
y
^
i
\hat y_i
y^i的导数。
L
′
′
(
y
i
,
y
^
i
)
=
y
i
,
p
r
e
d
∗
(
1
−
y
i
,
p
r
e
d
)
L^{''}(y_i,\hat y_i)=y_{i,pred}*(1-y_{i,pred})
L′′(yi,y^i)=yi,pred∗(1−yi,pred)
即:
{
g
i
=
y
i
,
p
r
e
d
−
y
i
h
i
=
y
i
,
p
r
e
d
∗
(
1
−
y
i
,
p
r
e
d
)
(
33
)
\begin{cases} g_i=y_{i,pred}-y_i\\&&\\ h_i=y_{i,pred}*(1-y_{i,pred}) \end{cases}\quad\quad(33)
⎩⎪⎨⎪⎧gi=yi,pred−yihi=yi,pred∗(1−yi,pred)(33)
1、建立第一棵树(k=1)
1
°
\quad1^°
1°从根节点开始,在根节点上的样本有ID1——ID15,那么在根节点分裂的时候需要计算信息增益,
G
a
i
n
=
1
2
[
G
L
2
H
L
+
λ
+
G
R
2
H
R
+
λ
−
(
G
L
+
G
R
)
2
H
L
+
H
R
+
λ
]
−
γ
Gain=\dfrac{1}{2}[\dfrac{G_L^2}{H_L+\lambda}+\dfrac{G_R^2}{H_R+\lambda}-\dfrac{(G_L+G_R)^2}{H_L+H_R+\lambda}]-\gamma
Gain=21[HL+λGL2+HR+λGR2−HL+HR+λ(GL+GR)2]−γ在节点处把样本分成左右节点集合,分别计算两个集合的
G
L
,
H
L
,
G
R
,
H
R
G_L,H_L,G_R,H_R
GL,HL,GR,HR然后计算Gain。
2
°
\quad2^°
2°先计算每个样本的一阶导数和二阶导数,按式子**(33)计算,但这里会有一个问题,那就是第一棵树的预测概率
y
i
,
p
r
e
d
y_{i,pred}
yi,pred是多少,在xgboost里,对于分类任务只需初始化为(0,1)中的任意一个数都可以,具体初始参数base_score默认0.5**。(注:base_score是一个经过sigmod映射的值,可以认为是一个概率值,这个在后面第二颗树会用到)
3
°
\quad3^°
3°设base_score=0.5,然后计算一阶和二阶导数值,如下表:
ID | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
g i g_i gi | 0.5 | 0.5 | -0.5 | -0.5 | -0.5 | -0.5 | -0.5 | 0.5 | 0.5 | -0.5 | -0.5 | -0.5 | 0.5 | 0.5 | -0.5 |
h i h_i hi | 0.25 | 0.25 | 0.25 | 0.25 | 0.25 | 0.25 | 0.25 | 0.25 | 0.25 | 0.25 | 0.25 | 0.25 | 0.25 | 0.25 | 0.25 |
如ID=1样本,
{
g
1
=
y
i
,
p
r
e
d
−
y
1
=
0.5
−
0
=
0.5
h
1
=
y
i
,
p
r
e
d
∗
(
1
−
y
1
,
p
r
e
d
)
=
0.5
∗
(
1
−
0.5
)
=
0.25
\begin{cases} g_1=y_{i,pred}-y_1=0.5-0=0.5\\&&\\ h_1=y_{i,pred}*(1-y_{1,pred})=0.5*(1-0.5)=0.25 \end{cases}
⎩⎪⎨⎪⎧g1=yi,pred−y1=0.5−0=0.5h1=yi,pred∗(1−y1,pred)=0.5∗(1−0.5)=0.25
那么如何把样本分成两个集合呢,这里就是上面说到的选取一个最佳的特征以及最佳分裂点使得Gain最大。如特征
x
1
x_1
x1有**[1,2,3,6,7,8,9,10]**这八种取值,可以得到以下的划分方式。
4 ° \quad4^° 4°以1为划分时( x 1 < 1 x_1\lt1 x1<1)
{
左
子
树
包
含
的
样
本
I
L
=
[
]
右
子
树
包
含
的
样
本
I
R
=
[
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
13
,
14
,
15
]
\begin{cases} 左子树包含的样本I_L=[\quad]\\&&\\ 右子树包含的样本I_R=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] \end{cases}
⎩⎪⎨⎪⎧左子树包含的样本IL=[]右子树包含的样本IR=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
则左子树节点为空,
{
一
阶
导
数
和
:
G
L
=
0
二
阶
导
数
和
:
H
L
=
0
\begin{cases} 一阶导数和:G_L=0\\&&\\ 二阶导数和:H_L=0 \end{cases}
⎩⎪⎨⎪⎧一阶导数和:GL=0二阶导数和:HL=0
右子树节点
{
一
阶
导
数
和
:
G
R
=
∑
i
∈
I
R
g
i
=
(
0.5
+
0.5
+
⋯
+
(
−
0.5
)
)
=
−
1.5
二
阶
导
数
和
:
H
R
=
∑
i
∈
I
R
h
i
=
(
0.25
+
0.25
+
⋯
+
0.25
)
=
3.75
\begin{cases} 一阶导数和:G_R=\sum_{i\in I_R}g_i=(0.5+0.5+\cdots+(-0.5))=-1.5\\&&\\ 二阶导数和:H_R=\sum_{i\in I_R}h_i=(0.25+0.25+\cdots+0.25)=3.75 \end{cases}
⎩⎪⎨⎪⎧一阶导数和:GR=∑i∈IRgi=(0.5+0.5+⋯+(−0.5))=−1.5二阶导数和:HR=∑i∈IRhi=(0.25+0.25+⋯+0.25)=3.75
\quad 最后我们再计算一下Gain,则Gain=0 ⇐ G a i n = G L 2 H L + λ + G R 2 H R + λ − ( G L + G R ) 2 H L + H R + λ \quad\Leftarrow\quad Gain=\dfrac{G_L^2}{H_L+\lambda}+\dfrac{G_R^2}{H_R+\lambda}-\dfrac{(G_L+G_R)^2}{H_L+H_R+\lambda} ⇐Gain=HL+λGL2+HR+λGR2−HL+HR+λ(GL+GR)2
(注:计算出来以后发现Gain=0,不用惊讶,因为所有节点都分到了右子树,和没分裂之前是一样的,所以增益为0。)
5
°
\quad5^°
5°下面以2为划分节点(
x
1
<
2
x_1\lt2
x1<2)
{
左
子
树
包
含
样
本
节
点
I
L
=
[
1
,
4
]
右
子
树
包
含
样
本
节
点
I
R
=
[
2
,
3
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
13
,
14
,
15
]
\begin{cases} 左子树包含样本节点I_L=[1,4]\\&&\\ 右子树包含样本节点I_R=[2,3,5,6,7,8,9,10,11,12,13,14,15] \end{cases}
⎩⎪⎨⎪⎧左子树包含样本节点IL=[1,4]右子树包含样本节点IR=[2,3,5,6,7,8,9,10,11,12,13,14,15]
{ 左 子 树 一 阶 导 数 和 : G L = ∑ i ∈ I L g i = 0.5 − 0.5 = 0 左 子 树 二 阶 导 数 和 : H L = ∑ i ∈ I L h i = 0.25 + 0.25 = 0.5 \begin{cases} 左子树一阶导数和:G_L=\sum_{i\in I_L}g_i=0.5-0.5=0\\&&\\ 左子树二阶导数和:H_L=\sum_{i\in I_L}h_i=0.25+0.25=0.5 \end{cases} ⎩⎪⎨⎪⎧左子树一阶导数和:GL=∑i∈ILgi=0.5−0.5=0左子树二阶导数和:HL=∑i∈ILhi=0.25+0.25=0.5
{ 右 子 树 一 阶 导 数 和 : G R = ∑ i ∈ I R g i = − 1.5 右 子 树 二 阶 导 数 和 : H R = ∑ i ∈ I R h i = 3.25 \begin{cases} 右子树一阶导数和:G_R=\sum_{i\in I_R}g_i=-1.5\\&&\\ 右子树二阶导数和:H_R=\sum_{i\in I_R}h_i=3.25 \end{cases} ⎩⎪⎨⎪⎧右子树一阶导数和:GR=∑i∈IRgi=−1.5右子树二阶导数和:HR=∑i∈IRhi=3.25
此时的信息增益 G a i n = G L 2 H L + λ + G R 2 H R + λ − ( G L + G R ) 2 H L + H R + λ = 0.055727554179 Gain=\dfrac{G_L^2}{H_L+\lambda}+\dfrac{G_R^2}{H_R+\lambda}-\dfrac{(G_L+G_R)^2}{H_L+H_R+\lambda}=0.055727554179 Gain=HL+λGL2+HR+λGR2−HL+HR+λ(GL+GR)2=0.055727554179
6
°
\quad6^°
6°下面以2为划分节点(
x
1
<
3
x_1\lt3
x1<3)
{
左
子
树
包
含
样
本
节
点
I
L
=
[
1
,
2
,
4
,
5
]
右
子
树
包
含
样
本
节
点
I
R
=
[
3
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
13
,
14
,
15
]
\begin{cases} 左子树包含样本节点I_L=[1,2,4,5]\\&&\\ 右子树包含样本节点I_R=[3,6,7,8,9,10,11,12,13,14,15] \end{cases}
⎩⎪⎨⎪⎧左子树包含样本节点IL=[1,2,4,5]右子树包含样本节点IR=[3,6,7,8,9,10,11,12,13,14,15]
{ 左 子 树 一 阶 导 数 和 : G L = ∑ i ∈ I L g i = 0 左 子 树 二 阶 导 数 和 : H L = ∑ i ∈ I L h i = 1 \begin{cases} 左子树一阶导数和:G_L=\sum_{i\in I_L}g_i=0\\&&\\ 左子树二阶导数和:H_L=\sum_{i\in I_L}h_i=1 \end{cases} ⎩⎪⎨⎪⎧左子树一阶导数和:GL=∑i∈ILgi=0左子树二阶导数和:HL=∑i∈ILhi=1
{ 右 子 树 一 阶 导 数 和 : G R = ∑ i ∈ I R g i = − 1.5 右 子 树 二 阶 导 数 和 : H R = ∑ i ∈ I R h i = 2.75 \begin{cases} 右子树一阶导数和:G_R=\sum_{i\in I_R}g_i=-1.5\\&&\\ 右子树二阶导数和:H_R=\sum_{i\in I_R}h_i=2.75 \end{cases} ⎩⎪⎨⎪⎧右子树一阶导数和:GR=∑i∈IRgi=−1.5右子树二阶导数和:HR=∑i∈IRhi=2.75
此时的信息增益 G a i n = G L 2 H L + λ + G R 2 H R + λ − ( G L + G R ) 2 H L + H R + λ = 0.126315789474 Gain=\dfrac{G_L^2}{H_L+\lambda}+\dfrac{G_R^2}{H_R+\lambda}-\dfrac{(G_L+G_R)^2}{H_L+H_R+\lambda}=0.126315789474 Gain=HL+λGL2+HR+λGR2−HL+HR+λ(GL+GR)2=0.126315789474
7 ° \quad7^° 7° 其他的 x 1 x_1 x1取值**[6,7,8,9,10]**类似,计算汇总如下:
split_point | 2 | 3 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|
G L G_L GL | 0 | 0 | -0.5 | -1 | -1 | -1 | -2 |
H L H_L HL | 0.5 | 1 | 1.25 | 2 | 2.5 | 3 | 3.5 |
G R G_R GR | -1.5 | -1.5 | -1 | -0.5 | -0.5 | -0.5 | 0.5 |
H R H_R HR | 3.25 | 2.75 | 2.5 | 1.75 | 1.25 | 0.75 | 0.25 |
G a i n Gain Gain | 0.0557 | 0.1263 | 0.0769 | 0.0494 | 0.0769 | 0.0808 | 0.6152 |
从以上表可以看出,如果特征 x 1 x_1 x1以 x 1 < 10 x_1\lt 10 x1<10分裂时可以获得最大增益:0.6152
8 ° \quad8^° 8°按照算法流程,此时需要遍历一下特征 x 2 x_2 x2,对特征 x 2 x_2 x2也是重复上面的步骤得到如下表所示:
split_point | -2 | 0 | 2 | 5 |
---|---|---|---|---|
G L G_L GL | -0.5 | 0 | -1.5 | -1 |
H L H_L HL | 0.75 | 1.5 | 2.25 | 3 |
G R G_R GR | -1 | -1.5 | 0 | -0.5 |
H R H_R HR | 3 | 2.25 | 1.5 | 0.75 |
G a i n Gain Gain | 0.0808 | 0.2186 | 0.2186 | 0.0808 |
由以上表可以看出,以特征 x 2 x_2 x2来划分时,最大增益是 0.2186 < 0.6152 0.2186\lt 0.6152 0.2186<0.6152,所以在根节点处以 x 1 < x_1\lt x1<10来划分。
9
°
\quad9^°
9°由于初始设置的最大深度为3,此时只有一层,所以还要继续分下去。
{
左
子
树
包
含
样
本
节
点
I
L
=
[
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
14
,
15
]
右
子
树
包
含
样
本
节
点
I
R
=
[
13
]
\begin{cases} 左子树包含样本节点I_L=[1,2,3,4,5,6,7,8,9,10,11,12,14,15]\\&&\\ 右子树包含样本节点I_R=[13] \end{cases}
⎩⎪⎨⎪⎧左子树包含样本节点IL=[1,2,3,4,5,6,7,8,9,10,11,12,14,15]右子树包含样本节点IR=[13]
右子树此时只有一个样本,不需要分裂,已经是叶子结点,可以计算其他对应的叶子结点值。由
w
∗
=
−
G
j
H
j
+
λ
w^{\ast}=-\frac{G_j}{H_j+\lambda}
w∗=−Hj+λGj知:
w
1
=
−
G
R
H
R
+
λ
=
−
g
13
h
13
+
λ
=
−
0.5
1
+
0.25
=
−
0.4
w_1=-\frac{G_R}{H_R+\lambda}=-\frac{g_{13}}{h_{13}+\lambda}=-\frac{0.5}{1+0.25}=-0.4
w1=−HR+λGR=−h13+λg13=−1+0.250.5=−0.4
下面就对左子节点 I L I_L IL进行分裂,分列时把此节点当做根节点,同样循环上面的过程,同样也需要遍历 x 1 x_1 x1和 x 2 x_2 x2所有取值选取最大增益。
1 0 ° \quad10^° 10°再重复上面的过程,此时的样本有I=[1,2,3,4,5,6,7,8,9,10,11,12,14,15]同样先考虑特征 x 1 x_1 x1, x 1 x_1 x1的取值有[1,2,3,6,7,8,9]。
1 1 ° \quad11^° 11°以1为分裂节点Gain=0
1
2
°
\quad12^°
12°以2为分裂节点
(
x
2
<
2
)
:
(x_2\lt 2):
(x2<2):
{
左
子
树
包
含
样
本
节
点
I
L
=
[
1
,
4
]
右
子
树
包
含
样
本
节
点
I
R
=
[
2
,
3
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
14
,
15
]
\begin{cases} 左子树包含样本节点I_L=[1,4]\\&&\\ 右子树包含样本节点I_R=[2,3,5,6,7,8,9,10,11,12,14,15] \end{cases}
⎩⎪⎨⎪⎧左子树包含样本节点IL=[1,4]右子树包含样本节点IR=[2,3,5,6,7,8,9,10,11,12,14,15]
{ 左 子 树 一 阶 导 数 和 : G L = ∑ i ∈ I L g i = 0.5 − 0.5 = 0 左 子 树 二 阶 导 数 和 : H L = ∑ i ∈ I L h i = 0.25 + 0.25 = 0.5 \begin{cases} 左子树一阶导数和:G_L=\sum_{i\in I_L}g_i=0.5-0.5=0\\&&\\ 左子树二阶导数和:H_L=\sum_{i\in I_L}h_i=0.25+0.25=0.5 \end{cases} ⎩⎪⎨⎪⎧左子树一阶导数和:GL=∑i∈ILgi=0.5−0.5=0左子树二阶导数和:HL=∑i∈ILhi=0.25+0.25=0.5
{ 右 子 树 一 阶 导 数 和 : G R = ∑ i ∈ I R g i = − 2 右 子 树 二 阶 导 数 和 : H R = ∑ i ∈ I R h i = 3 \begin{cases} 右子树一阶导数和:G_R=\sum_{i\in I_R}g_i=-2\\&&\\ 右子树二阶导数和:H_R=\sum_{i\in I_R}h_i=3 \end{cases} ⎩⎪⎨⎪⎧右子树一阶导数和:GR=∑i∈IRgi=−2右子树二阶导数和:HR=∑i∈IRhi=3
此时的信息增益 G a i n = G L 2 H L + λ + G R 2 H R + λ − ( G L + G R ) 2 H L + H R + λ = 0.11111111 Gain=\dfrac{G_L^2}{H_L+\lambda}+\dfrac{G_R^2}{H_R+\lambda}-\dfrac{(G_L+G_R)^2}{H_L+H_R+\lambda}=0.11111111 Gain=HL+λGL2+HR+λGR2−HL+HR+λ(GL+GR)2=0.11111111
1 3 ° \quad13^° 13° 其他值同理(对于 x 1 x_1 x1)可得如下表所示:
split_point | 2 | 3 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|
G L G_L GL | 0 | 0 | -0.5 | -1 | -1 | -1 |
H L H_L HL | 0.5 | 1 | 1.25 | 2 | 2.5 | 3 |
G R G_R GR | -2 | -2 | -1.5 | -1 | -1 | -1 |
H R H_R HR | 3 | 2.5 | 2.25 | 1.5 | 1 | 0.5 |
G a i n Gain Gain | 0.1111 | 0.2540 | 0.0855 | 0.1556 | 0.1032 | 0.2778 |
由上表可以看出 x 1 x_1 x1选择 x 1 < 3 x_1\lt3 x1<3时获得最大增益Gain=0.2540
1 4 ° \quad14^° 14°同理对 x 2 x_2 x2再次遍历可得以下表:
split_point | -2 | 0 | 2 | 5 |
---|---|---|---|---|
G L G_L GL | -0.5 | -0.5 | -2.5 | -1.5 |
H L H_L HL | 0.75 | 1.25 | 2.25 | 2.75 |
G R G_R GR | -1.5 | -1.5 | 0.5 | -0.5 |
H R H_R HR | 2.75 | 2.25 | 1.25 | 0.75 |
G a i n Gain Gain | 0.14603 | 0.2186 | 0.4444 | 0.1460 |
由上表可以看出 x 2 x_2 x2在 x 2 < 2 x_2\lt2 x2<2时获得最大增益Gain=0.4444。通过与 x 1 < 3 x_1\lt3 x1<3时的增益Gain=0.2540相比较选择 x 2 < 2 x_2\lt2 x2<2为分裂点。
1
5
°
\quad15^°
15°分裂后的叶子结点集合如下:
{
左
子
树
包
含
样
本
节
点
I
L
=
[
1
,
3
,
5
,
6
,
8
,
10
,
11
,
15
]
右
子
树
包
含
样
本
节
点
I
R
=
[
2
,
4
,
7
,
9
,
12
,
14
]
\begin{cases} 左子树包含样本节点I_L=[1,3,5,6,8,10,11,15]\\&&\\ 右子树包含样本节点I_R=[2,4,7,9,12,14] \end{cases}
⎩⎪⎨⎪⎧左子树包含样本节点IL=[1,3,5,6,8,10,11,15]右子树包含样本节点IR=[2,4,7,9,12,14]
1 6 ° \quad16^° 16°接下来按照上面的步骤,继续对 I L I_L IL和 I R I_R IR分裂,其生成的树如下图所示:
注:这里可能对叶子节点上的取值有疑惑,为啥计算出来的是-0.4,而上图的叶子节点上却是-0.04呢,这里一最左侧的一个叶子节点为例,落在最左侧的叶子节点上的样本有I=[1]。
所以由公式
:
w
∗
=
−
G
j
H
j
+
λ
:w^{\ast}=-\frac{G_j}{H_j+\lambda}
:w∗=−Hj+λGj可知,
w
2
=
−
G
1
H
1
+
λ
=
−
0.5
1
+
0.25
=
−
0.4
w_2=-\frac{G_1}{H_1+\lambda}=-\frac{0.5}{1+0.25}=-0.4
w2=−H1+λG1=−1+0.250.5=−0.4
落在从左至右第二个叶子节点上的样本有I=[3,5,6,8,10,11,15]
则 : w 3 = − G R H R + λ = − g 3 + g 5 + g 6 + g 8 + g 10 + g 11 + g 15 h 3 + h 5 + h 6 + h 8 + h 10 + h 11 + h 15 + 1 = − − 2.5 1.75 + 1 = 0.909 :w_3=-\dfrac{G_R}{H_R+\lambda}=-\dfrac{g_3+g_5+g_6+g_8+g_{10}+g_{11}+g_{15}}{h_3+h_5+h_6+h_8+h_{10}+h_{11}+h_{15}+1}=-\dfrac{-2.5}{1.75+1}=0.909 :w3=−HR+λGR=−h3+h5+h6+h8+h10+h11+h15+1g3+g5+g6+g8+g10+g11+g15=−1.75+1−2.5=0.909
落在第三个叶子节点上的样本有I=[2,4,7,9,14]
则 : w 4 = − G L H L + λ = − g 2 + g 4 + g 7 + g 9 + g 14 h 2 + h 4 + h 7 + h 9 + h 14 + λ = − 0.222 :w_4=-\dfrac{G_L}{H_L+\lambda}=-\dfrac{g_2+g_4+g_7+g_9+g_{14}} {h_2+h_4+h_7+h_9+h_{14}+\lambda}=-0.222 :w4=−HL+λGL=−h2+h4+h7+h9+h14+λg2+g4+g7+g9+g14=−0.222
同理第四个叶子节点样本有I=[12,15]
w
5
=
−
−
G
R
H
R
+
λ
=
−
g
12
+
g
15
h
12
+
h
15
+
λ
=
0.4
w_5=-\dfrac{-G_R}{H_R+\lambda}=-\dfrac{g_{12}+g_{15}}{h_{12}+h_{15}+\lambda}=0.4
w5=−HR+λ−GR=−h12+h15+λg12+g15=0.4
1 7 ° \quad17^° 17°到这里完全没有问题,但是为什么上图的结果不一样呢,这里的处理和GBDT一样,会以学习率诚意该值,当完全去-0.4时,说明学习率为1,这样很容易过拟合,所以每次得到的叶子节点都需要乘上学习率eta,在前面已经设置eta=0.1,到此第一棵树完成。
2、建立第二棵树(k=2)
1
°
\quad1^°
1°接下来简历第二棵树,建树过程和第一棵同理,只需要对
y
i
,
p
r
e
d
y_{i,pred}
yi,pred更新,也就是i 你和拟合第二棵树是在第一棵树的基础上第一棵树里面由于前面没有树,所以初始
y
i
,
p
r
e
d
=
0.5
y_{i,pred}=0.5
yi,pred=0.5。如果此时模型只有一棵树**(k=1)则模型对样本
x
i
x_i
xi预测其结果有加法模型:
y
i
k
=
∑
k
=
0
K
f
k
(
x
i
)
⇒
y
i
′
=
f
0
(
x
i
)
+
f
1
(
x
i
)
y_i^k=\sum\limits_{k=0}{K}f_k(x_i) \quad \Rightarrow \quad y_i^{'}=f_0(x_i)+f_1(x_i)
yik=k=0∑Kfk(xi)⇒yi′=f0(xi)+f1(xi)
f
1
(
x
i
)
\quad f_1(x_i)
f1(xi)的值是样本
x
i
x_i
xi落在第一棵树上的叶子节点值,
f
0
(
x
i
)
f_0(x_i)
f0(xi)是啥,这就是前面提到的base_score**,是一个经过sigmod映射后的值(因为使用Logloss做损失函数,概率
P
=
1
1
+
e
−
x
P=\frac{1}{1+e^{-x}}
P=1+e−x1)所以将 0.5 逆运算
x
=
l
n
y
1
−
y
⇒
f
0
(
x
i
)
=
0
x=ln\frac{y}{1-y}\quad \Rightarrow \quad f_0(x_i)=0
x=ln1−yy⇒f0(xi)=0
\quad
则第一棵树预测的结果是
y
i
′
=
f
0
(
x
i
)
+
f
1
(
x
1
)
=
0
+
w
q
(
x
)
y_i{'}=f_0(x_i)+f_1(x1)=0+w_{q(x)}
yi′=f0(xi)+f1(x1)=0+wq(x)
2 ° \quad2^° 2°如ID=1的样本,其落在**-0.04这个点上,经过sigmod**后, P 1 , p r e d = 1 1 + e ( 0 + 0.04 ) = 0.490001 P_{1,pred}=\frac{1}{1+e^{(0+0.04)}}=0.490001 P1,pred=1+e(0+0.04)1=0.490001由以上公式可以得到第一棵的预测概率结果如下表所示:
ID | y i , p r e d y_{i,pred} yi,pred |
---|---|
1 | 0.4900 |
2 | 0.4944 |
3 | 0.5227 |
4 | 0.4944 |
5 | 0.5227 |
6 | 0.5227 |
7 | 0.4944 |
8 | 0.5227 |
9 | 0.4944 |
10 | 0.5227 |
11 | 0.5227 |
12 | 0.5100 |
13 | 0.4900 |
14 | 0.4944 |
15 | 0.5227 |
3 ° \quad3^° 3°有了上表的 P i , p r e d P_{i,pred} Pi,pred以后,则可以得出,所欲样本新的一阶导数和二阶导数值之后,以同样的方式建立第二颗树。其一阶导数和二阶导数如下表所示:
ID | g i g_i gi | h i h_i hi |
---|---|---|
1 | 0.4900 | 0.2499 |
2 | 0.4944 | 0.2500 |
3 | -0.4773 | 0.2495 |
4 | -0.5056 | 0.2500 |
5 | -0.4773 | 0.2495 |
6 | -0.4773 | 0.2495 |
7 | -0.5056 | 0.2500 |
8 | 0.5227 | 0.2495 |
9 | 0.4944 | 0.2500 |
10 | -0.4773 | 0.2495 |
11 | -0.4773 | 0.2495 |
12 | -0.4900 | 0.2500 |
13 | 0.4900 | 0.2500 |
14 | 0.4900 | 0.2500 |
15 | -0.4773 | 0.2495 |
4 ° \quad4^° 4°拟合完以后的第二棵树如下图所示:
5 ° \quad5^° 5°后面的所有过程都是重复以上步骤。
至此xgboost的手推训练过程已经完成,接下来说一下参数
训练过程中的参数
1、booster: def=gbtree,另外有gblinear。
2、nthread: 最大线程数,已经弃用,现在用n_jobs,主要设置CPU核数。
3、num_feature: boosting过程中用到的特征维数,设置为特征个数(自动)。
4、eta:[def=0.3,别名learing_rate],更新中所使用的步长,防止过拟合,并且减小eta可以提升过程更保守。
5、gamma:[def=0,别名min_split_loss],在树的叶节点上进一步分区所需的最小损耗减少,gamma越大,算法越保守。
6、max_depth:[def=6],输的最大深度,增加该值易导致过拟合。
7、min_child_weight:[def=1]孩子节点中最小样本权重和,如果在分区过程中实例权重之和小于该权重和,则放弃进一步分区。
8、**max_delta_step:**允许每个叶子输出的最大增量步长,若设为正值,则可以使更新步骤更加保守,在非平衡数据中非常有用。
9、subsample:[def=1]训练实例的子样本比率,如果设为0.5,则xgboost会随机选取50%数据,这样可以防止过拟合,子采样将在每次增强迭代中发生一次。
10、colsample_bytree:[def=1]构造每棵树时子采样率,每次增强迭代中发生一次。
11、colsample_bylevel:[def=1]每个级别中每个拆分的列的子采样率,每次进行拆分时都会进行子采样。
12、lambda:[def=1,别名reg_lambda],关于种种的L2正则化项,
λ
\lambda
λ越大,模型越保守。
13、alpha:[def=0,别名reg_alpha],关于L1正则化项,
α
\alpha
α越大,模型越保守。
14、**lambda_bias:**在偏置L2正则[def=0],L1没有偏置正则,因为L1正则偏置不重要。
15、**n_estimateres:**总迭代次数,即决策树的个数。
16:、scale_pos_weight:[def=1]控制正负权重的平衡,对非平衡数据有用,如:sum(neg_instances)/sum(pos_instance)
17、n_round:提升的轮次数,同n_estimateres。