1

1、 什么是XGBoost

XGBoost :eXtreme Gradient Boosting
项目地址:https://github.com/dmlc/xgboost
文档:http://xgboost.readthedocs.io...
一个可升级的树提升算法(a scalable machine learning system for tree boosting),XGBoost通过不断迭代,将多个弱分类器组合成一个强分类器,它的基学习器是决策树。相对于GBDT,XGBoost使用二阶信息,可以更快在训练集上收敛。
(本文主要描述xgboost的公式推导)

2、参数定义

说明:各个参数的定义来源于论文XGBoost: A Scalable Tree Boosting System

clipboard.pngn examples and m features
树的预测值:
clipboard.png
最终归属于叶子节点j的样本集:
clipboard.png

3、公式推导

目标函数:
clipboard.png
其中,
clipboard.png是惩罚项,只与第t棵决策树有关,与样本无关,也与前t-1棵决策树无关,因为在第t次迭代中前t-1棵决策树已经确定;

clipboard.png是损失函数;

clipboard.png表示t棵决策树在第i个样本处的预测值;

clipboard.png表示第t棵决策树在第i个样本处的预测值(未知),可以认为f_t (X_i )是前t-1棵树的优化量。
注意区分:t棵决策树和第t棵决策树
使用二阶泰勒展开式(式(6))来近似代替损失函数,加快最小化速度:
clipboard.png
clipboard.png
clipboard.png
clipboard.png

又第t次迭代中前t-1棵决策树已经确定,即其损失函数也已经确定,故认为clipboard.png
是常数,将其省略且将式(5)代入得到式(8):
clipboard.png
联立式(2)(3)(8),得到:
clipboard.png
ω_j是叶子节点的权重(对于分类问题,预测类别对应不同的权值;对于回归问题,预测值clipboard.png即为权重)
由式(8)到式(9),将两个式子中的求和分开:
clipboard.png是所有n个样本对应的预测值(即分类类别的权重)乘以其对应得而梯度gi,求和。
clipboard.png决策树的T个叶子节点,每个样本都一定且唯一被分类到T个节点中的一个,一个叶子节点可以被分到多个样本。先将每个叶子节点上的样本的梯度g_i相加,再乘以该叶子节点的权值;最后对所有叶子节点求和。
两者得而结果一样。
(类比:一个班有n个学生,要求某门课程班级总分;式(8)的求法可理解为直接将每个同学的成绩相加;而式(9)的求法可理解为先求各个分段的同学的成绩总分,再将每个分段总分相加)
对公式(9)求关于ωj的导数,并令其等于零,得到式(10):
clipboard.png
将式(10)代入式(9),得到最优解:
image.png
其中image.png,是针对每个节点对所含样本求和得到,γ和λ是超参数,分别控制叶结点个数和叶结点权重的影响。

4、缩减和列抽样

缩减和列抽样可以用来降低过拟合。

4.1 缩减

缩减(Shrinkage)类似于优化算法中的学习率。xgboost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面的树有更大的学习空间。实际应用中,一般把eta设置得小一点,然后迭代次数设置得大一点。

4.2 列抽样

列抽样(Column Subsampling)。xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。
假设原始数据集的特征数为M,列抽样会随机选取m个特征(m < M)训练用于每一个基分类器的生成,当m越小时,模型的抗干扰性和抗过拟合性越强,但是模型的准确率会下降。

5、最优切分点划分算法

在决策树的生长过程中,一个非常关键的问题是如何找到叶子的节点的最优切分点,Xgboost 支持两种分裂节点的方法——贪心算法(exact greedy algorithm.)和近似算法(approximate algorithm)。

5.1 贪心算法

1) 从深度为0的树开始,对每个叶节点枚举所有的可用特征;
2) 针对每个特征,把属于该节点的训练样本根据该特征值进行升序排列,通过线性扫描的方式来决定该特征的最佳分裂点,并记录该特征的分裂收益;
3) 选择收益最大的特征作为分裂特征,用该特征的最佳分裂点作为分裂位置,在该节点上分裂出左右两个新的叶节点,并为每个新节点关联对应的样本集
4) 回到第1步,递归执行到满足特定条件为止。
对某一节点,特征的分裂收益实际上是分裂前后样本损失(正则化后)的差值,分裂前的损失为,
image.png
分裂后的损失为,
image.png
分裂收益为,
image.png
其中T=1

6 XGBoost与GBDT

6.1 XGBoost的优点

1) 损失函数。相对于GBDT,XGBoost使用二阶信息(用损失函数的二阶泰勒展开式形式近似代替损失函数),可以更快在训练集上收敛。
2) 正则化。XGBoost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合
3) XGBoost工具支持并行。XGBoost的并行不是tree粒度的并行,XGBoost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。XGBoost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),XGBoost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
4) 高度的灵活性。XGBoost支持用户自定义目标函数和评估函数,只要目标函数二阶可导就行。
5) 缺失值处理。XGBoost内置处理缺失值的规则。在特征k上寻找最佳 split point 时,不会对该列特征 missing 的样本进行遍历,而只对该列特征值为 non-missing 的样本上对应的特征值进行遍历,通过这个技巧来减少了为稀疏离散特征寻找 split point 的时间开销。在逻辑实现上,训练时,为了保证完备性,会将该特征值missing的样本分别分配到左叶子结点和右叶子结点,两种情形都计算一遍后,选择分裂后增益最大的那个方向(左分支或是右分支),作为预测时特征值缺失样本的默认分支方向。如果在训练中没有缺失值而在预测中出现缺失,那么会自动将缺失值的划分方向放到右子结点。
6) Shrinkage(缩减),相当于学习速率(xgboost中的eta)。每次迭代,增加新的模型,在前面成上一个小于1的系数,降低优化的速度,每次走一小步逐步逼近最优模型比每次走一大步逼近更加容易避免过拟合现象。
7) 列抽样(column subsampling)。xgboost借鉴了随机森林的做法,支持列抽样(即每次的输入特征不是全部特征),不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。
8) 剪枝。当分裂时遇到一个负损失时,GBM会停止分裂,GBM实际上是一个贪心算法。XGBoost会一直分裂到指定的最大深度(max_depth),然后回过头来剪枝。如果某个节点之后不再有正值,它会去除这个分裂。 这种做法的优点,当一个负损失(如-2)后面有个正损失(如+10)的时候,GBM会在-2处停下来,因为它遇到了一个负值。但是XGBoost会继续分裂,然后发现这两个分裂综合起来会得到+8,因此会保留这两个分裂。比起GBM,这样不容易陷入局部最优解。
9) 内置交叉验证。XGBoost允许在每一轮boosting迭代中使用交叉验证。因此,可以方便地获得最优boosting迭代次数。而GBM使用网格搜索,只能检测有限个值。
10) 在已有的模型基础上继续。XGBoost可以在上一轮的结果上继续训练。

6.2 XGBoost的缺点

1) 基于层(Level-wise)进行生长,直到达到停止条件,计算量大;
2) 节点分裂使用的是pre-sorted算法,能够更精确的找到数据分隔点,但是在空间和时间上开销大,因为 a.需要对特征进行预排序并且保存排序后的索引值(为了后续快速的计算分裂点),因此内存需要训练数据的两倍; b.在遍历每一个分割点的时候,都需要进行分裂增益的计算,消耗的代价大。

7 调参逻辑

先调整最佳迭代次数:n_estimators;
接下来要调试的参数是min_child_weight以及max_depth;
然后开始调试参数:gamma;
接着是subsample以及colsample_bytree;
紧接着就是:reg_alpha以及reg_lambda;
最后就是learning_rate,一般这时候要调小学习率来测试。

参考文献

Chen T, Guestrin C. XGBoost: A Scalable Tree Boosting System[C]// ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. ACM, 2016:785-794.点此下载
小象学院《机器学习升级版》第七期第12课
https://blog.csdn.net/a819825...

YjxGVG
8 声望3 粉丝

下一篇 »
mysql