XGBoost 原理及公式推导
*单位:东北大学* *作者:王文举*
1. xgboost描述
xgboost算法将各种弱评估器结合,是一种可扩展性提升树算法,弱评估器一般为CART树。
CART 树是基于类别的条件概率分布模型,其模型结构为二叉树。CART既可以用于分类也能用于回归,对于CART回归树来说,其预测结果为叶结点上所有样本的均值。对CART分类树来说,可以采用投票的方法确定类别标签。
xgboost算法是在梯度提升树(GBDT)的基础上改进而来。相同点都是采用前向分布加法模型,多个弱评估器加权累加,使目标预测值逐渐逼近真值,两者都是参数估计形式来表示模型。
不同点主要为:
(1)GBDT优化过程,采用损失函数的一阶导数信息,而XGBoost是对损失函数泰勒级数展开,利用二阶导。
(2)XGBoost在损失函数中引入正则化,限制叶节点数以及每个节点上的预测得分。
(3)XGBoost支持多线程,在划分节点是时,每个特征并行计算,提高运算迅速。同时,也引入随机森林列采样思想,节点划分时,只考虑部分属性。
(4)GBDT中预测值是由所有弱分类器上的预测结果的加权求和,其中每个样本上的预测结果就是样本所在的叶子节点的均值。而XGBT中的预测值是所有弱分类器上的叶子权重直接求和得到,也称为预测得分。
XGBoost的目标函数为:
L(ϕ)=i=1∑nl(y^i,yi)+Ω(fk)Ω(fk)=γT+21λ∣∣w∣∣2 函数 l是损失函数,l(y^i,yi) 可以用来计算预测值 y^i和真实值 yi差别程度。函数 Ω 为正则项,可以用来减少模型的复杂度,防止过拟合的发生。Ω(fk)中包含两项,γT与λ∣∣w∣∣2。其中 T 为树模型中叶节点的数量,这部分提供了对叶节点数目的控制。λ∣∣w∣∣2表示正则项,ω 为叶节点的权重,这部分控制了叶节点的权重,保证了不会因为过大的权重而导致过拟合现象的产生。当正则项被置为 0 时,XGBoost 目标函数就退化为提升树的目标函数。
右侧第一项l(y^i−yi)是衡量我们的偏差,模型越不准确,第一项就会越大。第二项Ω(fk)是衡量我们的方差,模型越复杂,模型的学习就会越具体,方差就会越大。所以其实在求解方差与偏差的平衡点,以求模型的泛化误差最小。
由于模型通过叠加的方式来训练,在迭代的每一步过程中都添加一个基分类器ft。则第t轮模型的预测结果为:
y^t(xi)=y^t−1+ft(xi) 则目标损失函数改写为:
Obj(t)=i=1∑nl(yi,y^t−1+ft(xi))+Ω(ft)+constant
2.损失函数求解
根据泰勒级数展开公式
f(x+Δx)≃f(x)+f′(x)Δx+21f′′(x)Δx2将Δx替换为ft(xi),则目标函数可以写成为
Obj(t)≃i=1∑n[l(yi,y^t−1)+gift(xi)+21hift2(xi)] +Ω(ft)+constant 上式定义: gi=ϑy^t−1l(yi,y^t−1) hi=ϑy^t−12l(yi,y^t−1)
3.参数估计
XGBoost所用的弱评估器为CART树,即每个样本数据最终会落入CART决策树的叶结点上,故每次迭代产生的弱评估器ft可以用参数形式表示。
在依次迭代中,假设样本xi落入第j个叶结点中,写为j=q(xi)。则样本在j叶节点上预测分数(又称叶子权重)可以写成wq(xi),q(xi)表示落在哪个叶节点上。以参数估计方式,可知wq(xi)=ft(xi) 。此外,还需要做一步转化,原目标在样本数据上遍历,可以转化为在叶子节点上遍历。
Obj(t)≃i=1∑n[gift(xi)+21hift2(xi)]+Ω(ft) =i=1∑n[giwq(xi))+21hiwq(xi)2]+γT+21λj=1∑Twj2=j=1∑T[(i⊂Ij∑gi)wj+21(i⊂Ij∑hi+λ)wj2]+γT令Gj=∑i⊂Ijgi,Hj=∑i⊂Ijhi,替换后,对损失函数求倒数,求解新的评估器wj∗,并将其带入损失函数
即:Obj=γT−21j=1∑THj+γGj2这里,Gj,Hj是由gj,hj有关,而gj,hj又是通过损失函数l对前一棵树求导而来。所以当l确定后,文中二分类采用binary:logistic,Gj,Hj就固定。所以,整个损失函数只和树的结构T有关。
上述目标函数是基于每个叶子节点,也就是树的结构来计算。所以,我们的目标函数又叫做“结构分数”,分数越低,树整体的结构越好。如此,就建立了树的结构(叶子)和模型效果的直接联系。
4.树的结构分裂
由于决策树的建模属于 NP 问题,因此 XG-Boost 采用贪心思想来建模。假设 IL和IR是数据集经过某个节点判断之后分裂的两个集合,I=IL∪IR,计算
根据Lsplit最大,选取最佳的树结构,在这种树结构下,计算Gj,Hj。就可以求解每棵树叶子的权重wj∗。
以上为整个XGBoost基本理论与原理,对比分析XGBoost与决策树的区别:
使用指标:决策树采用信息熵或者基尼指数,XGBoost采用目标函数Obj。在选取特征上,决策树采用信息增益最大,而XGBoost采用Lsplit最大进行特征分裂。决策树中当信息增益小于给定阈值ϵ时停止分裂,而XGBoost中Lsplit小于γ时停止分裂。