数据分析利器:XGBoost算法最佳解析

XGBoost是一种经典的集成式提升算法框架,具有训练效率高、预测效果好、可控参数多、使用方便等特性,是大数据分析领域的一柄利器。在实际业务中,XGBoost经常被运用于用户行为预判、用户标签预测、用户信用评分等项目中。XGBoost算法框架涉及到比较多数学公式和优化技巧,比较难懂,容易出现一知半解的情况。由于XGBoost在数据分析领域实在是太经典、太常用,最近带着敬畏之心,对陈天奇博士的Paper和XGBoost官网重新学习了一下,基于此,本文对XGBoost算法的来龙去脉进行小结。

本文重点解析XGBoost算法框架的原理,希望通过本文能够洞悉XGBoost核心算法的来龙去脉。对于XGBoost算法,最先想到的是Boosting算法。Boosting提升算法是一种有效且被广泛使用的模型训练算法,XGBoost也是基于Boosting来实现。Boosting算法思想是对弱分类器基础上不断改进提升,并将这些分类器集成在一起,形成一个强分类器。简而言之,XGBoost算法可以说是一种集成式提升算法,是将许多基础模型集成在一起,形成一个很强的模型。这里的基础模型可以是分类与回归决策树CART(Classification and Regression Trees),也可以是线性模型。如果基础模型是CART树(如图1所示),比如第1颗决策树tree1预测左下角男孩的值为+2,对于第1颗决策树遗留下来的剩余部分,使用第2颗决策树预测值为+0.9,则对男孩的总预测值为2+0.9=2.9。

XGBoost算法框架可以分为四个阶段来理解(如图2所示)。第一个阶段,如何构造目标函数? 在进行优化求解时,首先需要构造目标函数,有了目标函数才能进行优化求解。这种思路和LR模型(Logistic Regression)是一致。在LR模型中,首先,对于回归问题构造平方项损失,对于分类问题构造最大似然损失作为目标函数,然后基于构造好的目标函数,才会考虑采用梯度下降算法进行优化求解,比如随机梯度下降、Mini-Batch批量梯度下降、梯度下降等。在这个阶段,我们可以得到XGBoost的基本目标函数结构。

第二个阶段,目标函数优化求解困难,如何对目标函数近似转换? 在第一个阶段得到的基本目标函数较为复杂,不是凸函数,没法使用连续性变量对目标函数直接优化求极值。因此,使用泰勒级数对目标函数进行展开,对目标函数规整、重组后,将目标函数转换为关于预测残差的多项式函数

第三个阶段,如何将树的结构引入到目标函数中? 第二个阶段得到的多项式目标函数是一个复合函数。被预测的残差和模型复杂度还是未知的函数,需要对这两个函数进行参数化表示,即将决策树的结构信息通过数学符号表示出来。在第三个阶段,在树的形状确定情况下,可以优化求解出局部最优解。

第四个阶段,如何确定树的形状,要不要使用贪心算法? 如何在模型空间里面寻找最优的决策树形状,这是一个NP-Hard问题,我们很难对可能存在的树结构全部罗列出来,尤其在特征个数很多情况下。因此,在这里需要使用贪心算法来求得局部最优解。

1.如何构造目标函数?

当使用多棵树来预测时,假设已经训练了K棵树,则对于第i个样本的(最终)预测值为:

(1)y^i=∑k=1Kfk(xi),fk∈F

在公式1中,y^i 表示对 i个样本的预测值,fk属于F集合范围内,fk(xi) 表示通过第k棵树对第i个样本进行预测,比如第1棵树预测值为f1(xi),第2棵树预测值为 f2(xi),依次类推,将这些树的预测值累加到一起,则得到样本的最终预测值y^i。因此,如果要得到样本的最终预测值,需要训练得到K棵树。

如果要训练得到K棵树,首先需要构造训练的目标函数(如公式2所示)。在构建模型时,不仅需要考虑到模型的预测准确性,还需要考虑到模型的复杂程度,既准确又简单的模型在实际应用中的效果才是最好的。因此,目标函数由两部分构成,第一部分表示损失函数,比如平方损失、交叉熵损失、折页损失函数等。第一部分表示n个样本总的损失函数值。因为在这里通过样本预测值y^i和样本真实值yi的比较,可以计算出针对样本i的模型预测损失值Loss。这里可以暂时先不用考虑损失函数的具体形式,因为这里的损失函数,可以统一表示回归与分类问题的损失函数形式。

公式2的第二部分表示正则项,是用来控制模型的复杂度,模型越复杂,惩罚力度越大,从而提升模型的泛化能力,因为越复杂的模型越容易过拟合。XGBoost的正则化思路跟LR模型中加L1/L2正则化思路一致,不同的地方在于正则化项具体物理含义不同。在这里Ω(fk)表示第K棵树的复杂度,接下来的问题是如何对树的复杂度进行参数化表示,这样后面才能进行参数优化。

资料领取直通车:大厂面试题锦集+视频教程

Linux服务器学习网站:C/C++Linux服务器开发/后台架构师

损失值正则项(2)obj=∑i=1nl(yi,y^i)⏟损失值+∑k=1Ω(fk)⏟正则项

在损失函数中l(yi,y^i),是有很多个模型(决策树)共同参与,通过叠加式的训练得到。如图2所示,训练完第一颗树f1(xi)后,对于第一棵树没有训练好的地方,使用第二颗树f2(xi)训练,依次类推,训练第K−1个棵树,最后训练第K颗树fk(xi)。当在训练第K棵树时,前面的第1棵树到第K−1颗树是已知的,未知的是第K棵树,即基于前面构建的决策树已知情况下

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值