7.4.1 XGBoost算法

7.4.1 XGBoost算法

XGBoost的英文全称是Extreme Gradient Boosting,它是一个系统经过了深度优化的分布式数据梯度自动提升算法,目的是实现高效、灵活且方便的分类,它由学者陈天奇首先创造并使用。XGBoost算法大量运用于数据挖掘比赛、数据科学分析、工业界的大规模数据处理等。

XGBoost算法从技术本质上来说就是一种提升(boosting)方法,提升算法的一个核心理念就是:一个复杂的任务由多个专家单独判断后进行适当的综合之后得出的结论,比其中任何一个专家单独判断后所给出的结论都要好。XGBoost算法是基于回归树模型,基本思想是每次抽取部分变量构建回归树模型,同时不断重复这个过程,最后得到的是几百甚至上千个回归树模型,将它们线性组合得到最终的模型,其模型如下:

图示

其中,F是指所有基模型(一般是树模型)组成的函数空间。那么该模型的损失函数就可以写成:

图示

我们的目的就是最小化损失函数,求得函数空间的集合。我们将损失函数定为目标函数,加入正则项,表达式如下:

图示

若基模型为树模型,则Ω(f)代表树的复杂程度。为了求得目标函数的最优解,我们采用前向分步算法,每一步都基于前面所有步数的模型集合的基础上,去进一步优化目标函数,其中在第t步时模型的表达式如下:

图示

其中,ft(xi)就是在第t步时需要加入的新模型。为了求得这个新模型,我们以优化目标函数为目的,则目标函数可以写成:

图示

式中:Ω(f)代表当前模型的复杂度;C为常数;图示代表前t-1步所有模型的预测结果。(https://www.daowen.com)

用泰勒公式展开上式,可以得到如下公式:

图示

其中,gi代表l(yi图示)函数的一阶导数,而hi代表二阶导数。这样便可通过目标函数基于前t-1步损失的二阶导信息来逼近t步的损失。由于前t-1步的损失在t步时已经确定,所以l(yi图示)是常数,同样C也是常数,所以目标函数只与下式有关:

图示

求出gi和hi代入式(7-13)求解最小值,便可以求出ft(xi),这便是第t步需要求解的模型。最后将求解出的ft(xi)代入式(7-7)便可以得到第t步的预测值,同理继续迭代,便可以求解出整个模型。

XGBoost具有很多优点:

(1)运行速度更快。XGBoost在叶子节点进行一次迭代后,会将每棵树的权重都乘以该系数,主要目的就是减小对每棵树的干扰,让后面拥有更多的学习时间。同时,XGBoost也借鉴了随机森林的方式和做法,支持列表抽样,不仅可以有效地降低经验性的过拟合,还可以尽量减少计算。

(2)预测精度更高。XGBoost将损失函数分解为二阶泰勒公式来展开。XGBoost引入二阶导一方面是为了提高精度,另一方面在于使得我们能够直接用二阶泰勒公式展开来自定义损失的函数,二阶泰勒公式展开就可以将其近似到大量的损失函数。

(3)灵活性更强。XGBoost算法既可用于分类问题,也可用于回归问题,相当于集成了线性回归和logistics回归,不受因变量是离散型还是连续型变量的影响,应用的范围也就更广泛。

(4)可处理的变量数量更多。传统线性回归可以处理的变量个数有限,而XGBoost算法可以处理的变量达到上千个。

(5)不需要对数据做大量主观假定。传统线性回归对数据所做的所有假定都无法证明或者验证,而XGBoost算法则不需要假定。

(6)不易过拟合,因为加入正则化项,可以控制模型的方差,使得模型在偏差和方差之间能做到平衡。同时在实现细节上借鉴了Bagging类方法的思想,可以对样本以及特征进行随机采样,这样同样可以防止过拟合。