姓名:Jyx
班级:csdn人工智能直通车-5期
描述:这是本人在学习人工智能时的学习笔记,加深理解
前面我们探讨了什么是Gradient Boosting。xgboost是Gradient Boosting一种算法实现,从前面介绍知道,Gradient Boosting的优化过程只是利用了损失函数的一阶导数。与一般的Gradient Boosting不同,xgboost更进一步,其优化过程考虑了损失函数的二阶导数,并且考虑了正则
xgboost
xgboost的基分类器一般为决策树。
对于任意损失函数L(y,F(x)),在第m步,在Fm−1(x)进行泰勒展开
L(y,Fm(x))=L(y,Fm−1(x)+αmϕ(x;θm))≈L(y,Fm−1(x))+gmϕ(x;θm)+12Hmϕ2(x;θm)
这里gm,Hm分别是L(y,Fm−1(x))对Fm−1(x)一阶和二阶导数
公式中的其它参数含义请参考我的前一篇文章Gradient Boosting
考虑到L(y,Fm−1(x))在本轮循环中为常量,可以丢弃,不影响优化
xgboost的正则定义为
Ω(θ)=γT+12λ∑t=1Tw2t
这里T为叶子节点的个数,wt表示每个叶子节点的分数
所以
L(y,Fm(x))=∑i=1N[gmϕ(x;θm)+12Hmϕ2(x;θm)]+γT+12λ∑t=1Tw2t(1)
对于决策树来说,ϕ(x;θm)的取值取决于落在那个叶子节点上,我们用qm(xi)表示xi所属的叶子节点则有ϕ(x;θm)=wqm(xi),于是1式可以写成
L(y,Fm(x))=∑i=1N[gmwqm(xi)+12Hmw2qm(xi)]+γT+12λ∑t=1Tw2t(2)
另一方面我们用It表示所有属于第t个节点的集合,对样本的求和也可以改写成对叶子节点的求和,即
L(y,Fm(x))=∑t=1T[∑xi∈Itgmwt+∑xi∈It12Hmw2t]+γT+12λ∑t=1Tw2t=∑t=1T[∑xi∈Itgmwt+∑xi∈It12Hmw2t+12λw2t]+γT=∑t=1T[(∑xi∈Itgm)Gtwt+12(∑xi∈ItHmHt+λ)w2t]+γT=∑t=1T[Gtwt+12(Ht+λ)w2t]+γT(3)(4)
我们希望最小化损失,上式可以看成是一个wt的二次方程,其最小值在−b2a处,即有
w^t=−GtHt+λL(y,Fm(x))=−12∑t=1TG2tHt+λ+γT(5)
直接优化上式是一个很棘手的任务,一般我们是通过一级一级增长来建立决策树的,这样,每个叶子的分裂增益可以很容易求出来
Gain=12[G2LHL+λ+G2RHR+λ−(GL+GR)2HL+HR+λ]−γ
如果增益小于0, 则迭代终止,这里也可以明显的看出γ这个正则的作用
这样xgboost的求解过程就包含了两次迭代,一次对树的个数进行迭代,另一个是对每棵树内部的增长进行迭代
算法的更加详细的解释可以参考xgboost的官方文档
对算法中使用的各个变量xgboost官方也给出了如下通俗解释
树的结构


Gt,Ht的计算

以上所有图片均出自xgboost的官方文档