这里不再介绍XGBoost的原理及推导过程,推荐一些资料:
- 【机器学习】决策树(下)——XGBoost、LightGBM(非常详细)
- https://xgboost.readthedocs.io/en/latest/tutorials/model.html
- https://www.bilibili.com/video/BV1Ca4y1t7DS?p=11
在构建树结构的过程会将涉及到的公式给出。
本文中的过程来源于视频XGBoost Part 1 (of 4): Regression – YouTube
如有错误,请指正,谢谢啦~
1. 数据集-回归问题
我们需要解决的是一个回归问题,数据如下表所示,NO
是样本的编号,Drug Dosage
是特征,Drug Effective
是真实值。我们将根据这个数据集构建一个XGBoost模型。
2. 求一阶导数和二阶导数
这里采用的平方损失函数
注:后续需要用到
G
a
i
n
Gain
Gain的计算公式,并定义
s
i
m
i
l
a
r
i
t
y
s
c
o
r
e
(
s
s
)
similarity \; score (ss)
similarityscore(ss),同时将上面计算好的
g
i
g_i
gi和
h
i
h_i
hi带入
s
s
ss
ss中,如下:
3. 构建树
- 初始化
设
y
i
0
=
0.5
y_i^0 = 0.5
yi0=0.5,并将样本点(实心圆)及预测值(黑色的粗线)画到二维坐标中。
- 残差
根据 s s ss ss的计算公式,其涉及到 R e s i d u a l Residual Residual,所以我们将每个样本点的残差计算出来
- 寻找最优切分点
这里我们采用精确贪心算法
进行切分
- 首先将特征值进行
排序
,这里只有一个特征,我们给出的顺序刚好是排序好的,即 10, 20, 25, 35切分点
选取的是相邻两个特征值的均值,所以此时我们有3个切分点,即15, 22.5, 30- 接下来我们将会计算三个不同的切分得到的 G a i n Gain Gain值,选择最大的 G a i n Gain Gain(增益)对应的切分点
接下来将计算3个切分点对应的增益,这里取 λ = 0 \lambda=0 λ=0.
-
D
o
s
a
g
e
<
15
Dosage < 15
Dosage<15
图中红色的虚线是切分点
这里再提一下,根据 G a i n Gain Gain的计算公式,我们只需要计算出每个结点的 s s ss ss,然后再进行相应的运算就可以得到 G a i n Gain Gain了。
我们先计算根结点的 s s ss ss
接下来计算叶子结点,
然后计算以
D
o
s
a
g
e
<
15
Dosage<15
Dosage<15作为切分点时的
G
a
i
n
Gain
Gain
2.
D
o
s
a
g
e
<
22.5
Dosage<22.5
Dosage<22.5
同样的计算方法
3.
D
o
s
a
g
e
<
30
Dosage < 30
Dosage<30
三个切分点的
G
a
i
n
Gain
Gain已经计算完成,大小关系如下:
G
a
i
n
15
=
120.33
>
G
a
i
n
30
=
56.33
>
G
a
i
n
22.5
=
4
Gain_{15}=120.33 >Gain_{30}=56.33>Gain_{22.5}=4
Gain15=120.33>Gain30=56.33>Gain22.5=4
D
o
s
a
g
e
<
15
Dosage<15
Dosage<15作为切分点时的
G
a
i
n
Gain
Gain最大,选择此切分点
此时左边结点不需要再切分,我们继续分析右边结点,这时我们可以有两个可选的切分点,同样计算不同切分点时的
G
a
i
n
Gain
Gain,步骤同上
-
D
o
s
a
g
e
<
22.5
Dosage < 22.5
Dosage<22.5
-
D
o
s
a
g
e
<
30
Dosage<30
Dosage<30
D o s a g e < 30 Dosage<30 Dosage<30时的增益最大,得到树结构如下
在工程实现中,我们可以控制树的深度,在这里将树的深度限制为2(根结点第0),所以第一棵树已经构建完成。
4. 剪枝
自底向上判断是否需要剪枝
- 设
γ
=
130
\gamma=130
γ=130
虽然这里根结点的 G a i n < γ Gain <\gamma Gain<γ,但我们没有对第一个分支进行剪枝,所以我们不会删掉这个根结点。
- 设
γ
=
150
\gamma=150
γ=150
此时自底向上剪枝的时候,就会剪掉整棵树,最后我们只剩下初始的预测值
5. 计算输出值
这里我们取
γ
=
130
\gamma=130
γ=130,所以不会进行剪枝,树结构及其输出值如下:
6. 新的预测值
根据左下角的图片,我们可以看到,预测值更接近真实值了
7. 继续构建下一棵树
这样计算一遍,对XGBoost构建树的过程更清楚了。
最后,我参考前述提到的资料,将XGBoost的原理推导及文中的举例部分,做成了PPT,欢迎下载,提意见 XGBoos.pptx