本文将重点解释竞赛圈里的“大杀器”,xgboost算法。本文主要结构包括xgboost内容讲解,以及案例分析。
1、XGB算法原理
XGB算法有陈天奇博士提出,是GBDT算法的升级版,在效率和方法上都做了改良。此算法的基本思想就是不断地添加树(函数),不断地进行特征分裂来生长一棵树,每次添加一个树,去拟合上次预测的残差(与GBDT一样)。当我们训练完成得到k颗树,我们要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数,最后将每棵树对应的分数加起来就是样本的预测值。
那么XGB的集成表示是什么?怎么预测?求最优解的目标是什么?
在XGBoost里,每棵树是一个一个往里面添加的,每添加一棵树,预测的残差就会减小,效果都能够提升,下面看看XGBoost的集成表示(核心)
一开始树是0,然后往里面添加树(函数),然后往里面添加树,相当于添加了一个函数,在添加第二颗树,相当于又多了一个函数。。。以此类推,这里需要保证加入新的函数能够提升整体表达效果。也就是说每次新加的树都要使目标函数(损失)的值下降。
如果叶子节点的个数太多,就会有过拟合的风险,对此限制叶子节点的个数,所以在原来目标函数里面要加上一个惩罚项
举个简单的例子,看看惩罚项是如何计算的,
上图中一共三个叶子,权重分别为2,0.1,-1,带入惩罚项公式,惩罚力度 γ \gamma γ和 λ \lambda λ是认为设定的。XGB的目标函数就变成了下面的公式,由自身的损失函数和正则化惩罚项组成。
下面对XGB算法的理论推导进行介绍
2、损失函数
对于回归问题,我们常用的损失函数是MSE,即:
对于分类问题,我们常用的损失函数是对数损失函数:
XGBoost目标函数定义为:
目标函数由两部分构成,第一部分用来衡量预测分数和真实分数的差距,另一部分则是正则化项。正则化项同样包含两部分,T表示叶子结点的个数,w表示叶子节点的分数。γ可以控制叶子结点的个数,λ可以控制叶子节点的分数不会过大,防止过拟合。
正如上文所说,新生成的树是要拟合上次预测的残差的,即当生成t棵树后,预测分数可以写成:
然后将目标函数改写成:
很明显,我们接下来就是要去找到一个f_t能够最小化目标函数。XGBoost的想法是利用其在f_t=0处的泰勒二阶展开近似它。所以,目标函数近似为:
其中g_i为一阶导数,h_i为二阶导数: