XGBoost算法原理精简版

GBDT算法可以看成是由K棵树组成的加法模型:

F是所有树组成的函数空间,以回归任务为例,回归树可以看作为一个把特征向量映射为某个score的函数。 模型参数是f {k=1,2,....K}。于一般的机器学习算法不同的是,加法模型不是学习d维空间中的权重,而是直接学习函数(决策树)集合。

目标函数如下:


omega是所有树的复杂度。如何定义树的复杂度呢?比如,可以考虑树的节点数量、树的深度或者叶子节点所对应的分数的L2范数等等。

如何来学习加法模型呢?

解这一优化问题,可以用前向分布算法(forward stagewise algorithm)。因为学习的是加法模型,如果能够从前往后,每一步只学习一个基函数及其系数(结构),逐步逼近优化目标函数,那么就可以简化复杂度。这一学习过程称之为Boosting。具体地,我们从一个常量预测开始,每次学习一个新的函数,过程如下:


那么,在每一步如何决定哪一个函数f被加入呢?指导原则还是最小化目标函数。

在第t步,模型对的预测为:


,其中ft为这一轮我们要学习的函数(决策树)。这个时候目标函数可以写为:

formula - 1

举例说明,假设损失函数为平方损失(square loss),则目标函数为:

formula - 2

使用平方损失函数时,GBDT算法的每一步在生成决策树时只需要拟合前面的模型的残差。

高能预警:

根据泰勒公式把函数f(x + delta_x)在点x处二阶展开,可得到如下等式:

formula - 3

根据formula - 1,目标函数是关于变量


的函数,这里把yi(t-1)作为x, ft(xi)为delta_x,那么formula-1变成这样:
formula - 4

这里面的第一项L,就是f(x);

那么gi就是损失函数的一阶导数,

hi为损失函数的二阶导数,


由于函数中的常量在函数最小化的过程中不起作用,因此我们可以从formula-4中移除掉常量项,得:

formula - 5

由于要学习的函数仅仅依赖于目标函数,从formula-5可以看出只需为学习任务定义好损失函数,并为每个训练样本计算出损失函数的一阶导数和二阶导数。所以,第t次的迭代目标就是这个,本身ft就不是一个解析式,而是一棵树,这棵树事先规定好深度,然后建立数的过程,就是使当前Obj最小,朝着这目标建树。强调一下,i从1到n意思是本次迭代在整个训练集上进行,优化得到的Obj是整体的损失函数。

这里的g 和h,都和ft无关,只和当前y和之前计算得到的输出值有关。损失函数需要事先定义,回归的话是RMSE,分类的话是logloss。可导。所以,这就是为什么xgboost可以自定义损失函数。

只要函数可一阶和二阶求导。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容