xgboost算法_xgboost算法过程推导

XGBoost全名叫(eXtreme Gradient Boosting)极端梯度提升,经常被用在一些比赛中,其效果显著。它是大规模并行boosted tree的工具,它是目前最快最好的开源boosted tree工具包。XGBoost 所应用的算法就是 GBDT(gradient boosting decision tree)的改进,既可以用于分类也可以用于回归问题中。


XGBoost原理推导

对于XGBoost的预测模型同样可以表示为:

a894776cbe5a2ef1c5b4af5a8552290a.png

其中,K为树的总个数,kf表示第k颗树,yi表示样本Xi的预测结果。

其中损失函数也同样表示为:

8c7210baa690594776bff0ae2f8c01c3.png

其中l(yi,yi)为样本Xi的训练误差,

(fk)表示第k棵树的正则项。

我需要求解和优化的就是每个叶子节点的得分值,也就是f(x)的值。另外我们知道XGBoost是以CART树中的回归树作为基分类器,在给定训练数据后,其单个树的结构(叶子节点个数、树深度等等)基本可以确定了。但XGBoost并不是简单重复的将几个CART树进行组合。它是一种加法模型,将模型上次预测(由t-1棵树组合而成的模型)产生的误差作为参考进行下一棵树(第t棵树)的建立。以此,每加入一棵树,将其损失函数不断降低。如下图就为加法模型案例,它将模型预测值与实际值残差作为下一颗树的输入数据:

ca8062e427719715a571f53970d5388c.png

对于加法策略可以表示如下:

  初始化(模型中没有树时,其预测结果为0):

d63d881e8171fe8ce92e4d8f2d6226c2.png

  往模型中加入第一棵树:

aa18bd0bf33ba5edbe2cd0e4a3ddda65.png

  往模型中加入第二棵树:

84669ba1b4a2a9d52bb61606b0ae5a95.png

                 …

  往模型中加入第t棵树:

b77d57a3b0845a3cd342c7fc8b3287b2.png

其中f(x)表示第k棵树,yt表示组合t棵树模型对样本Xi的预测结果。

我们知道,每次往模型中加入一棵树,其损失函数便会发生变化。另外在加入第t棵树时,则前面第t-1棵树已经训练完成,此时前面t-1棵树的正则项和训练误差都成已知常数项。对于每棵树的正则项部分,我们将在后面再细说。

f7cb0bb62e03fda4e12ec884cd0ee15e.png

  如果损失函数采用均方误差时,其目标损失函数变为:

be5b014604040587b017acf1528c2163.png

另外对于目标损失函数中的正则项(复杂度)部分,我们从单一的树来考虑。对于其中每一棵回归树,其模型可以写成:

1376c5df523ccfe73b0f8d4eeed5f422.png

  其中W为叶子节点的得分值,q(x)表示样本X对应的叶子节点。T为该树的叶子节点个数。

因此,在这里。我们将该树的复杂度写成:

8f9d3b54e394d20c1ad5c1fc5ed72f8d.png

  复杂度计算例子如下:

bb62de3626c9bb529c2538254d0add05.png

此时,对于XGBoost的目标函数我们可以写为:

13d100379d60617ec7ca47a6f48058cf.png

  现在我们只需要找到f(t)来优化上式目标。

8ff771bd4067624e2e14f6f977738f78.png

  在推导之前,我们先介绍下泰勒展开式:

16aa570cb7cda9c524998fdcc0651104.png

这里我们用泰勒展开式来近似原来的目标函数,将f(t)x(i)看作

x。则原目标函数可以写成:

0ae11c3ec9d9a55df2655e84b860c698.png

a2568d8a6a4c000280758b3023469903.png

a880ecae5364ccef4257848fe458aedd.png

同时对于第t棵树时,

536e8c2605aa94dc6439cb5540b6a5e0.png

为常数。同时去除所有常数项。故目标损失函数可以写成:

4cc01ba6ac8f2d394c66110bac57cb4b.png

由上面介绍书的复杂度时,我们知道:

ca9ef4a6d1aa76624e3d2405ab3f72ab.png

同时我们将目标函数全部转换成在第t棵树叶子节点的形式。因为目前对于

a849aca563f225bd5788da9abca5aab1.png

可以看做是每个样本在第t棵树的叶子节点得分值相关函数的结果之和,所以我们也能从第t棵树的叶子节点上来表示。

b1d22d9a5498f67fa5d75d9152055fa2.png

上式中,前两行 i=1~n 求和为在样本中遍历,后两行 j = 1~T求和为在叶子节点上遍历,其中T为第t棵树中总叶子节点的个数,

896ee6da76389b8641fdec57b709306a.png

表示在第j个叶子节点上的样本,Wj为第j个叶子节点的得分值。

在这里,令

9bdc29364a93fbab6b079fead5451969.png

c4435893c8e84a976cf8251da60ac2bd.png

则:

eb06097aca0ca5b65d961f83764d2b1b.png

对Wj求偏导,并使其导函数等于0,则有:

e8ed514f23693c83b5f2ccf38ca255b6.png

求解得:

72e941ac9dcb65d97a1fc6bddb52c8d7.png

其目标函数可以为:

e77920329656f4eece45c5e25d657b8c.png

根据目标函数,如何分裂样本数据呢

c0fb20173f88dc2f2d04560368861401.png

adabd7a5f9ef27c36628dc59ca94ca29.png

文章转载自:https://www.cnblogs.com/zongfa/p/9324684.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值