简单例子说明XGBoost中树模型的构建过程
我们需要解决的是一个回归问题,数据如下表所示,`NO`是样本的编号,`Drug Dosage` 是特征,`Drug Effective` 是真实值。我们将根据这个数据集构建一个XGBoost模型。2. 求一阶导数和二阶导数 3. 构建树 4. 剪枝 5. 计算输出值 6. 新的预测值 7. 继续构建下一棵树
这里不再介绍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
更多推荐
所有评论(0)