数据分析利器:XGBoost算法最佳解析.docx
《数据分析利器:XGBoost算法最佳解析.docx》由会员分享,可在线阅读,更多相关《数据分析利器:XGBoost算法最佳解析.docx(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据分析利器:XGBoost算法最佳解析11月30日,2021亚马逊云科技re:Invent全球大会,即将浩大开启!2021re:Invent十周年度十分活动,内容的饕餮盛宴,涵盖产品、行业、社区等专题!立即预约symonxiong腾讯CDG应用研究员XGBoost是一种经典的集成式提升算法框架具有训练效率高、预测效果好、可控参数多、使用方便等特性是大数据分析领域的一柄利器。在实际业务中XGBoost经常被运用于用户行为预判、用户标签预测、用户信誉评分等工程中。XGBoost算法框架涉及到比拟多数学公式以及优化技巧比拟难懂容易出现一知半解的情况。由于XGBoost在数据分析领域实在是太经典、太
2、常用最近带着敬畏之心对陈天奇博士的Paper以及XGBoost官网重新学习了一下基于此本文对XGBoost算法的来龙去脉进展小结。本文重点解析XGBoost算法框架的原理祈望通过本文可以洞悉XGBoost核心算法的来龙去脉。对于XGBoost算法最先想到的是Boosting算法。Boosting提升算法是一种有效且被广泛使用的模型训练算法XGBoost也是基于Boosting来实现。Boosting算法思想是对弱分类器根底上不断改良提升并将这些分类器集成在一起形成一个强分类器。简而言之XGBoost算法可以讲是一种集成式提升算法是将许多根底模型集成在一起形成一个很强的模型。这里的根底模型可以是
3、分类与回归决策树CARTClassificationandRegressionTrees可以以是线性模型。假如根底模型是CART树如图1所示比方第1颗决策树tree1预测左下角男孩的值为2对于第1颗决策树遗留下来的剩余局部使用第2颗决策树预测值为0.9那么对男孩的总预测值为20.92.9。图1.基于二叉树的XGBoost模型XGBoost算法框架可以分为四个阶段来理解如图2所示。第一个阶段怎样构造目的函数在进展优化求解时首先需要构造目的函数有了目的函数才能进展优化求解。这种思路以及LR模型LogisticRegression是一致。在LR模型中首先对于回归问题构造平方项损失对于分类问题构造最大
4、似然损失作为目的函数然后基于构造好的目的函数才会考虑采用梯度下降算法进展优化求解比方随机梯度下降、Mini-Batch批量梯度下降、梯度下降等。在这个阶段我们可以得到XGBoost的根本目的函数构造。第二个阶段目的函数优化求解困难怎样对目的函数近似转换在第一个阶段得到的根本目的函数较为复杂不是凸函数没法使用连续性变量对目的函数直接优化求极值。因此使用泰勒级数对目的函数进展展开对目的函数规整、重组后将目的函数转换为关于预测残差的多项式函数。第三个阶段怎样将树的构造引入到目的函数中第二个阶段得到的多项式目的函数是一个复合函数。被预测的残差以及模型复杂度还是未知的函数需要对这两个函数进展参数化表示即
5、将决策树的构造信息通过数学符号表示出来。在第三个阶段在树的形状确定情况下可以优化求解出部分最优解。第四个阶段怎样确定树的形状要不要使用贪心算法怎样在模型空间里面寻找最优的决策树形状这是一个NP-Hard问题我们很难对可能存在的树构造全部罗列出来尤其在特征个数很多情况下。因此在这里需要使用贪心算法来求得部分最优解。图2.XGBoost算法构建逻辑1.怎样构造目的函数当使用多棵树来预测时假设已经训练了棵树那么对于第个样本的最终预测值为在公式1中表示对个样本的预测值属于集合范围内表示通过第棵树对第个样本进展预测比方第1棵树预测值为第2棵树预测值为依次类推将这些树的预测值累加到一起那么得到样本的最终预
6、测值。因此假如要得到样本的最终预测值需要训练得到棵树。假如要训练得到棵树首先需要构造训练的目的函数(如公式2所示)。在构建模型时不仅需要考虑到模型的预测准确性还需要考虑到模型的复杂程度既准确又简单的模型在实际应用中的效果才是最好的。因此目的函数由两局部构成第一局部表示损失函数比方平方损失、穿插熵损失、折页损失函数等。第一局部表示个样本总的损失函数值。因为在这里通过样本预测值以及样本真实值的比拟可以计算出针对样本的模型预测损失值。这里可以暂时先不用考虑损失函数的详细形式因为这里的损失函数可以统一表示回归与分类问题的损失函数形式。公式2的第二局部表示正那么项是用来控制模型的复杂度模型越复杂惩罚力度
7、越大进而提升模型的泛化才能因为越复杂的模型越容易过拟合。XGBoost的正那么化思路跟模型中加/正那么化思路一致不同的地方在于正那么化项详细物理含义不同。在这里表示第棵树的复杂度接下来的问题是怎样对树的复杂度进展参数化表示这样后面才能进展参数优化。在损失函数中是有很多个模型决策树共同介入通过叠加式的训练得到。如图2所示训练完第一颗树后对于第一棵树没有训练好的地方使用第二颗树训练依次类推训练第个棵树最后训练第颗树。当在训练第棵树时前面的第1棵树到第颗树是已知的未知的是第棵树即基于前面构建的决策树已知情况下构建第棵树。图3.XGBoost叠加式训练对于样本首先初始化假定第0棵树为预测值为然后在第0
8、棵树根底上训练第1棵树得到预测值在第1棵树根底上训练第2颗树又可以得到预测值依次类推当训练第棵树的时候前面棵树的总预测值为递推训练详细经过如下所示根据XGBoost的递推训练经过每棵决策树训练时会得到样本对应的预测值根据样本预测值以及真实值比拟可以计算得到模型预测损失值。又因为训练所得的每棵决策树都有对应的构造信息因此可以得到每棵决策树的复杂度。根据这些信息可以对目的函数公式2进展简化得到公式3。在公式3中表示训练样本个数为颗决策树累加的预测值为颗决策树总的复杂度在训练第颗决策树时这两个东西是已知的即在对目的函数进展求最小值优化时候以及为已知。因此将常数项拿掉得到公式4作为XGBoost的目的
9、函数。2.目的函数优化困难怎样对函数近似转换在公式4中已经得到了需要优化的目的函数这个目的函数已经是简化后的函数。对于公式4没法进展进一步优化。为解析决目的函数无法进展进一步优化XGBoost原文是使用泰勒级数展开式技术对目的函数进展近似转换即使用函数的1阶、2阶、3阶.阶导数以及对应的函数值将目的函数进展多项式展开多项式阶数越多对目的函数的近似程度越高。这样做的好处是便于后面优化求解。令带入到目的函数公式4得到基于二阶泰勒展开式的函数(如公式5所示)其中。在训练第颗树时目的函数公式5中、是已知的。因此可以将已知常数项去掉得到进一步简化后的目的函数公式6。、分别表示第颗决策树的损失函数的1阶、
10、2阶导数。前面颗决策树预测后通过、将前面第颗决策树的预测损失信息传递给第颗决策树。在公式6中第颗树的预测函数、树复杂度函数对于我们来讲仍然都是未知的因此需要将其参数化通过参数形式表示出来才能进展下一步的优化求解。3.怎样将树构造引入到目的函数中接下来的问题是怎样对函数、进展参数化表示。首先对于叶子权重函数如图4所示决策树有1号、2号、3号叶子节点这三个叶子节点对应的取值分别为151220在1号叶子节点上有1,3两个样本在2号叶子节点上有4一个样本在3号叶子节点上有2,5两个样本。在这里使用来表示决策树的叶子权重值三个叶子节点对应的叶子权重值为、。对于样本落在决策树叶子节点的位置信息使用表示表示
11、样本1落在第1个叶子节点上表示样本1落在第3个叶子节点上表示样本4落在第2个叶子节点上。图4.XGBoost决策树构造对于第颗树的叶子权重函数根据叶子权重值以及样本所在叶子的位置信息即可确定函数。因此我们引入决策树叶子权重值以及样本所在叶子的位置信息两个变量将其参数化表示成。然而是一个函数作为的下标是不利于优化求解。因此这里需要将转化为形式。是根据样本落在叶子节点的位置信息直接遍历计算损失函数。是从叶子节点的角度对每个叶子节点中的样本进展遍历计算损失函数其中表示树的叶子节点。假设即表示有哪些样本落在第j个叶子节点上比方表示样本1,3落在叶子节点1上表示样本4落在叶子节点2上表示样本2,5落在叶
12、子节点3上如上文图4所示。在这里强调一下将转换为形式是可以从数学公式推到得到比方下式。根据样本所在叶子节点位置计算所有样本的一阶损失得到第一行等式其中表示样本的一阶损失表示样本对应的叶子节点表示叶子节点对应的叶子权重值。对于模型复杂度表示第颗树的复杂度。在决策树里面假如要降低树的复杂度在训练决策树时可以通过叶子节点中样本个数、树的深度等控制决策树的复杂度。在XGBoost中是通过叶子节点个数、树的深度、叶子节点值来控制模型复杂度。XGBoost中的决策树是分类与回归决策树CARTClassificationandRegressionTrees。由于CART是二叉树控制叶子节点个数等同于控制了树
13、的深度。因此可以使用叶子节点个数来评估树的复杂度即叶子节点个数越多树的深度越深决策树构造越复杂。对于叶子节点值由于叶子节点值越大相当于样本预测值分布在较少的几颗决策树的叶子节点上这样容易出现过拟合。假如叶子节点值越小相当于预测值分布在较多的决策树叶子节点上每颗决策树介入预测其中的一小局部过拟合的风险被分散。因此叶子节点值越大模型越容易过拟合等同于决策树的复杂度越高。综合起来如公式7所示使用叶子节点个数、叶子节点值评估第颗决策树的复杂度其中、为超参数。假如祈望叶子个数尽量少那么将值尽量调大假如祈望叶子权重值尽量小那么将尽量调大。将以及公式7带入目的函数公式6中可以得到参数化的目的函数公式8。在公
14、式8中在训练第颗决策树时以及这两局部是已知为超参数。令对公式8进展调整此时得到目的函数是关于的一元二次抛物线是目的函数最终的参数化表示形式。抛物线是有极值对抛物线求极值可以直接套用抛物线极值公式求解很方便。基于公式8对目的函数关于求导可以求得树的叶子节点最优的权重值如公式9所示。将等式9带入到公式8中计算得到树的目的损失值如等式10该等式表示决策树损失分数分数越小讲明树的预测准确度越高、复杂度越低。4.怎样确定树的形状这里需要注意到一点树的叶子节点最优解以及损失函数极小值是在树的形状给定后的优化求解。因此假如要求得叶子节点最优解以及损失函数极小值首先需要确定树的形状。怎样寻找树的形状最直接的方
15、式是枚举所有可能的形状然后计算每种形状的损失函数从中选择损失函数最小的形状作为模型训练使用。这样在树的形状确定后就可以对叶子节点值以及损失函数值进展优化求解。这种方式在实际应用中一般不会采用因为当样本的特征集很大时树的形状个数是呈指数级增加计算这些形状树对应损失函数需要消耗大量的计算资源。为了寻找树的形状我们一般使用贪心算法来简化计算降低计算的复杂度。贪心算法是在部分寻找最优解在每一步迭代时选择能使当前部分最优的方向。XGBoost寻找树的形状的思路以及传统决策树模型建立树的思路一致。比方传统决策树在进展节点分割时基于信息熵选择信息熵下降最大的特征进展分割对于XGBoost树模型基于损失函数选
16、择能让损失函数下降最多的特征进展分割。如图5所示虚线框是已经构造好的树形状假如需要在蓝色节点做进一步分裂此时需要按照某种标准选择最好的特征进展分割。在这里XGBoost使用损失函数下降最大的特征作为节点分裂。图5.XGBoost树节点最正确分割点根据公式10可以计算到蓝色节点在分裂前以及分裂后的的损失函数值。两式相减那么得到特征假如作为分裂节点时所能带来的损失函数下降值大小。因此根据如下等式选择能使最大的特征作为分裂节点。5.其它常见问题关于XGBoost的常见经典问题这类问题对于深化理解XGBoost模型很重要因此本文对此也进展了梳理小结。(1)XGBoost为什么需要对目的函数进展泰勒展开
17、根据XGBoost官网如图6所示目的损失函数之间存在较大的差异比方平方损失函数、逻辑损失函数等。对目的函数进展泰勒展开就是为了统一目的函数的形式针对回归以及分类问题使得平方损失或者逻辑损失函数优化求解可以共用同一套算法框架及工程代码。另外对目的函数进展泰勒展开可以使得XGBoost支持自定义损失函数只需要新的损失函数二阶可导即可进而提升算法框架的扩展性。图6.XGBoost目的函数泰勒展开式官方解释相对于GBDT的一阶泰勒展开XGBoost采用二阶泰勒展开可以更精准的逼近真实的损失函数提升算法框架的精准性。另外一阶导数描绘梯度的变化方向二阶导数可以描绘梯度变化方向是怎样变化的利用二阶导数信息更
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 分析 利器 XGBoost 算法 最佳 解析
限制150内