XGBoost(Extreme Gradient Boosting)是对梯度提升树的改进,并且在损失函数中加入了正则化项。
<img src="images/41.png" />
目标函数的第一项表示整个强学习器的损失,第二部分表示强学习器中 K 个弱学习器的复杂度。
xgboost 每一个弱学习器的复杂度主要从两个方面来考量:
<img src="images/42.png" />
γT 中的 T 表示一棵树的叶子结点数量,γ 是对该项的调节系数
λ||w||<sup>2</sup> 中的 w 表示叶子结点输出值组成的向量,λ 是对该项的调节系数
假设我们要预测一家人对电子游戏的喜好程度,考虑到年轻和年老相比,年轻更可能喜欢电子游戏,以及男性和女性相比,男性更喜欢电子游戏,故先根据年龄大小区分小孩和大人,然后再通过性别区分开是男是女,逐一给各人在电子游戏喜好程度上打分,如下图所示:
images/image-20230906170712026.png
就这样,训练出了2棵树tree1和tree2,类似之前gbdt的原理,两棵树的结论累加起来便是最终的结论,所以:
小男孩的预测分数就是两棵树中小孩所落到的结点的分数相加:2 + 0.9 = 2.9。
爷爷的预测分数同理:-1 + 0.9 = -0.1。
images/image-20230906170739818.png
images/image-20230906170804514.png
我们直接对目标函数求解比较困难,通过泰勒展开将目标函数换一种近似的表示方式。接下来对 y<sub>i</sub><sup>(t-1)</sup> 进行泰勒二阶展开,得到如下近似表示的公式:
<img src="images/45.png" />
其中,g<sub>i</sub> 和 h<sub>i</sub> 的分别为损失函数的一阶导、二阶导:
<img src="images/46-3996485.png" />
我们观察目标函数,发现以下两项都是常数项,我们可以将其去掉。
<img src="images/47.png" />
为什么说是常数项呢?这是因为当前学习器之前的学习器都已经训练完了,可以直接通过样本得出结果。化简之后的结果为:
<img src="images/48.png" />
我们再将 Ω(f<sub>t</sub>) 展开,结果如下:
<img src="images/49.png" />
这个公式中只有 f<sub>t</sub> ,该公式可以理解为,当前这棵树如何构建能够降低损失。
g<sub>i</sub> 表示每个样本的一阶导,h<sub>i</sub> 表示每个样本的二阶导
f<sub>t</sub>(x<sub>i</sub>) 表示样本的预测值
||w||<sup>2</sup> 由叶子结点值组成向量的模
现在,我们发现公式的各个部分考虑的角度不同,有的从样本角度来看,例如:f<sub>t</sub>(x<sub>i</sub>) ,有的从叶子结点的角度来看,例如:T、||w||<sup>2</sup>。我们下面就要将其转换为相同角度的问题,这样方便进一步合并项、化简公式。我们统一将其转换为从叶子角度的问题:
<img src="images/50.png" />
例如:10 个样本,落在 D 结点 3 个样本,落在 E 结点 2 个样本,落在 F 结点 2 个样本,落在 G 结点 3 个样本
g<sub>i</sub> f<sub>t</sub>(x<sub>i</sub>) 表示样本的预测值,我们将其转换为如下形式:
<img src="images/51.png" />
w<sub>j</sub> 表示第 j 个叶子结点的值
h<sub>i</sub>f<sub>t</sub><sup>2</sup>(x<sub>i</sub>) 转换从叶子结点的问题,如下:
<img src="images/52.png" />
λ||w||<sup>2</sup> 由于本身就是从叶子角度来看,我们将其转换一种表示形式:
<img src="images/53-3996485.png" />
<img src="images/54.png" />
<img src="images/55.png" />
Gi 表示样本的一阶导之和,Hi 表示样本的二阶导之和,当确定损失函数时,就可以通过计算得到结果。
<img src="images/56.png" />
此时,公式可以看作是关于叶子结点 w 的一元二次函数,我们可以对 w 求导并令其等于 0,可得到 w 的最优值,将其代入到公式中,即可再次化简上面的公式。
<img src="images/57.png" />
将 w<sub>j</sub> 代入到公式中,即可得到:
<img src="images/58.png" />
该公式也叫做打分函数 (scoring function),它可以从树的损失函数、树的复杂度两个角度来衡量一棵树的优劣。
<img src="images/59.png" />
images/image-20230917143542540.png