XGBoost原理及其应用

2022-09-12

一、XGBoost原理

XGBoost是一组分类回归树 (CART) 的集成。通常, 单棵树的强度不足以在实践中使用。实际使用的是集合模型, 它将多棵树的预测结合在一起。将每个树的预测分数相加以得到最终分数。利用数学语言描述我们的模型:

这里K是树的数量, 是函数空间F里的一个函数, F也是所有可能的CART的集合。我们的目标函数由下式给出:

我们模型的参数是fk, 它控制了树的结构和节点上的得分。训练fk的难度远远高于一般机器学习中参数的训练, 为此, 我们采用一种添加策略[1]:固定我们已经学习到的模型, 再每次向模型里添加一棵树。我们将第t次得到的预测记为, 于是我们有:

现在的问题是, 在每一次, 我们应该添加怎样的树。一个很自然的想法是, 我们添加的树要使得我们的目标函数最优。

若我们利用MSE作为我们的损失函数, 那么我们的目标函数变为:

其中

该定义的一个重要优点是目标函数的值仅取决于gi和ih。

下面我们定义模型的复杂度Ω (f) , 为此我们首先完善f (x) 的定义:

其中w是叶子上的分数矢量, q是一个将每个数据点分配给相应叶子的映射, T是叶子的数量。在XGBoost中, 我们将复杂性定义为

当然, 定义复杂性的方法不止一种, 但这种方法在实践中效果很好。

在重新制定树模型之后, 我们可以写出在加入了第t棵树后的目标函数:

这里

最后的目标函数是关于jw的二次函数, 这样它的极小值点和极小值分别为:

最后一个式子正是衡量树结构q (x) 好坏的标准, 值越小代表结构越好。

有了这个标准后, 我们理应尝试所有可能并选择最优, 然而太费时。于是我们每次优化树的一层。我们假设一个叶子分裂为两个叶子, 则它的得分增加为:

如果增益小于γ, 我们就不将此叶子分裂。

二、应用到海藻数据集

本案例的数据来自于ERUDIT研究网络。Torgo利用回归模型和随机森林对a1-a7进行了预测, 对于a1他给出的最佳的nmse为0.465。下面我们利用XGBoost进行改进。

首先导入数据集至R。我们有season等11个自变量, a1等7个因变量, 其中有一些缺失值。我们删去了一条缺失值较多的记录, 剩下199条记录。注意到season等三个变量是因子型变量, 我们对它们进行独热编码处理, 使之成为数值型变量。于是我们得到了最终的数据集clean.algae_matrix:为了能对模型进行测试, 我们将数据集划分为训练集和测试集, 再将数据格式转换为DMatrix。下面训练XGBoost:nround是训练轮数, 也即树的棵树;max.depth每棵树的最大深度;lambda是正则化参数;feature_selector是变量选择方法, 这里我们选择的是shuffle;objective是针对的问题的类型, 由于是回归预测问题, 我们选择的是reg:linear。最终我们选择nround为3, max.depth为2, 这是网格寻优的结果。最终我们模型的nmse为0.43, 效果略好于随机森林。

摘要:作者在本文中详细推导了XGBoost的数学原理, 给出了XGBoost的损失函数, 它包括平方损失部分以及模型复杂度部分。XGBoost的关键是对初始目标函数进行泰勒展开, 作者对此进行了严密的推导。并给出了叶子分裂的策略。随后, 作者将XGBoost方法应用在海藻数据集上, 利用R语言编程, 预测了海藻数量。

关键词:提升树,泰勒展开,添加策略

参考文献

[1] 王天华.基于改进的GBDT算法的乘客出行预测研究[D].大连:大连理工大学, 2016.

本文来自 99学术网(www.99xueshu.com),转载请保留网址和出处

上一篇:“活”用教材提高备课含金量下一篇:浅析科技特派员在重庆发展特色效益农业中的作用