XGBOOST:简单来说是集成了很多个基学习器(如Cart决策树)的模型。它是集成学习的串行方式(boosting)的一种经典实现,是广泛应用在工业、竞赛上的一大神器。
集成学习是结合一些的基学习器来改进其泛化能力和鲁棒性的方法,主流的有两种集成思想:
(注:此外还有stacking方法,但stacking更多被看做是融合的策略;)
决策树有非线性、拟合能力强且可以通过剪枝快速调整的特性,集成学习通常选择决策树作为基学习器。(注:XGBOOST中的基学习器可以是CART回归树-gbtree, 也可以是线性分类器-gblinear。本文着重从树模型介绍。)
决策树是一种简单的机器学习回归/分类方法,它是由(if-then)决策结构以树形组合起来,叶子节点代表最终的预测值或类别。典型的决策树模型有:ID3、C4.5和CART。
决策树算法可以概括为两个阶段:
决策树剪枝算法的根本目的是极小化损失函数(经验损失+结构损失),基本策略有”预剪枝“和”后剪枝“两种策略:①预剪枝:是在决策树生成过程中,限制划分的最大深度、叶子节点数和最小样本数目等,以减少不必要的模型复杂度;②后剪枝:先从训练集生成一棵完整的决策树,然后用用验证集自底向上地对非叶结点进行考察,若将该节点对应的子树替换为叶子结点(剪枝)能带来决策树的泛化性能提升(即目标函数损失更小,常用目标函数如:loss = 模型经验损失bias+ 模型结构损失α|T|, T为节点数目, α为系数),则将该子树替换为叶子结点。
CART回归树是二叉树结构的决策树,GBDT、XGBoost等梯度提升方法都使用了Cart回归树做基学习器。树的生长是通过平方误差指标选择特征及切分点进行分裂。即遍历所有特征的的所有切分点,最小化目标函数,选择合适的树切分特征(j)及特征阈值(s)找到最优的切分特征和切分点,最终得到一棵回归树。
比如下图的树结点是基于特征(age)进行分裂的,设该特征值小于阈值(20)的样本划分为左子树,其他样本划分为右子树。
GBDT(梯度提升决策树) XGBOOST是在GBDT基础上提升了效率。说到Xgboost,都不得不先从GBDT(Gradient Boosting Decision Tree)说起, GBDT串行学习原理简单来说分为三步:
XGBOOST 类似GBDT串行学习方式,学习到如下图tree1、tree2,预测是将tree1、tree2结果相加。
xgboost与gbdt对比主要的差异在于:
可以很清晰地看到,最终的目标函数只依赖于每个数据点在误差函数上的一阶导数gi和二阶导数hi。对于这个目标函数obj求导等于0,可以得到一个叶子节点权重w*
代入obj得到了叶子结点取值的表达式
目标函数obj中的各部分,表示着每一个叶子节点对当前模型损失的贡献程度。融合一下,得到Gain的计算表达式,如下所示:
树的生长的过程,即是利用推导出的表达式作为分裂准则,对于所有的特征做一遍从左到右的扫描就可以枚举出所有分割取值点的梯度和GL和GR,然后用计算Gain的公式计算每个分割方案的分数并选择增益最大的分裂点,分裂结束后计算其对应的叶子结点值w*。
XGBOOST 论文
XGBOOST PPT