概述
- XGBoost(Extreme Gradient Boosting)全名叫极端梯度提升树,XGBoost是陈天奇等人开发的一个开源机器学习项目,在GBDT的提升改进版,在Kaggle比赛中被广泛使用,并且取得不错的成绩。
Xgboost
提到XGboost不得不提GBDT(梯度提升决策树),都是使用CART构建决策树,只是XGboost在目标函数中加了数据的构建复杂度(正则化项),目标是提升使效率并使其发挥到极致。
- Xgboost树的构造
举例:我们要预测一家人对电子游戏的喜好程度,考虑到年轻和年老相比,年轻更可能喜欢电子游戏,以及男性和女性相比,男性更喜欢电子游戏,故先根据年龄大小区分小孩和大人,然后再通过性别区分开是男是女,逐一给各人在电子游戏喜好程度上打分,如下图所示
训练出了2棵树tree1和tree2,类似之前gbdt的原理,两棵树的结论累加起来便是最终的结论,
其中,小男孩的预测分数就是两棵树中小孩所落到的结点的分数相加:2 + 0.9 = 2.9,爷爷的预测分数同理:-1 + (-0.9)= -1.9
-
树的复杂度
复杂度函数:
T表示树叶子节点的个数
w表示每个叶子节点的分
gamma表示复杂度(超参数)
lambda表示正则项,主要是对对w进行L2正则化,相当于针对每个叶结点的得分增加L2,目的是为了避免过拟合 -
目标函数的推导
Xgboost目标函数主要包括两部分:损失函数训练误差 + 树的复杂度
进行t次迭代的学习模型的目标函数为:
利用泰勒公式的二阶导展开:
泰勒公式为:
得到:
Wq(x)表示对应的叶子节点序号的值,q(x)表示叶子节点的序号
忽略常数项Constant,将公式中的f(x),及树的复杂度替换,得到
到此时,所有样本都是映射为树的叶子节点
换种思维,从叶子节点出发,对所有的叶子节点进行累加,得:
Gj表示映射为叶子节点 j 的所有输入样本的一阶导之和,同理,jHj
表示二阶导之和
Gj和Hj是确定量,将上式看成关于叶子节点w的一元二次函数,求导得到
带入到:
化解得到最终的目标函数:
也称为打分函数(scoring function),它是衡量树结构好坏的标准
值越小,代表这样的结构越好
我们用打分函数选择最佳切分点,从而构建CART树
-
xgboost树节点的划分
xgboost构造树的时候是采用贪心法对树节点进行划分,从根节点开始分裂成左右叶子节点,xgboost叶子节点是否继续划分,需要根据划分后是否给损失函数带来增益,如果Gain大于0,说明损失函数损失下降,继续分裂,
-
节点划分什么时候停止
1.设置超参数max-depth,当树的最大深度达到最大停止划分
2.样本权重和小于设定阈值时则停止建树。超参数-最小的样本权重和min_child_weight
3.传入超参数gmma,根据Gain判断,当Gain小于0,则停止