GBDT和XGBOOST算法原理

22 Nov 2018

Categories: 机器学习

GBDT

本文以多分类问题为例介绍GBDT的算法,针对多分类问题,每次迭代都需要生成K个树(K为分类的个数),记为,其中m为迭代次数,k为分类。

针对每个训练样本,使用的损失函数通常为,此时损失函数的梯度可以表示为

GBDT算法的流程如下所示:

  1. for k=1 to K: Initialize
  2. for m=1 to M:
    • for k=1 to K: compute for each sample
    • for k=1 to K: build up regression tree (j=1 to Jmk refer to the leaf nodes) from training samples
    • for k=1 to K: compute leaf weights for j=1 to Jmk
    • for k=1 to K: , 为学习率

针对的计算,有

为了求得w的值,使上述公式的一阶导数为0,利用Newton-Raphson公式(在这个问题中将初始值设为0,只进行一步迭代,并且Hessian矩阵只取对角线上的值),记,有

文献[1]在的前面乘以了的系数,可能原因是在分类器的建立过程中,可以把任意一个始终设为0,只计算剩余的,因此

参考文献

[1] Friedman, Jerome H. Greedy function approximation: A gradient boosting machine. Ann. Statist. 29 (2001), 1189–1232.

XGBOOST

仍以多分类问题介绍XGBOOST的算法,相对于GBDT的一阶导数,xgboost还引入了二阶导数,并且加入了正则项。

区别于上文的符号,记,并记,xgboost的计算流程如下:

  1. for k=1 to K: Initialize
  2. for m=1 to M:
    • for k=1 to K: compute and for each sample
    • for k=1 to K: compute (i.e., , j=1 to Jmk refer to the leaf nodes) to minimize the function , where is the regularization function
    • for k=1 to K: , 为学习率

针对回归树的求解,记,最小化问题变为,这是Jmk个独立的二次函数之和。

假设回归树的结构已经固定,记,此时在时目标函数取得最小值,最小值为

使用贪心算法确定回归树的结构,从一个节点开始不断进行分裂,分裂的规则是挑选使分裂增益最大的特征和分裂点进行分裂,直到达到某个停止条件为止。假设待分裂的节点为,分裂后的两个节点分别为,那么分裂增益可以表示为:

XGBOOST的Python包中的重要参数