本文是在学习陈天奇博士的xgboost论文后总结而来,并对相关知识点和公式进行了详细说明,推导和理解。内容安排如下:
顺序 |
内容 |
说明 |
1 |
树的复杂度衡量 |
因为xgboost的损失函数包含了正则项,而正则项则是依据树的复杂度进行的,所以先介绍树的复杂度 |
2 |
xgboost的损失函数 |
中间详细介绍了公式的推导过程,并对每个公式进行了详细介绍,方便读者理解。 |
1,树的复杂度衡量
这里以陈博士论文中的图像为例,说明树的复杂度衡量公式。
陈博士论文中的图像如下:
上图中,是对5个人物(祖孙三代)为例构建决策树实例。首先,根据年龄是否小于15岁进行分类,接着对左支的子集,根据是否为男性进行分类。一共得到三个叶子(leaf),leaf1,leaf2,leaf3。
使用q,T和w表示树的复杂度。q表示叶子的索引,q:Rd→{1,2,⋯,T}。T是q的最大值,是叶子的总数。示例中,T为3。q(小男孩)=1,q(老奶奶)=3。w是叶子的权重,也称得分。在示例中,小男孩所在的叶子1的权重为w1=+2 。决策树的最终目的就是得到这个权重。
2,xgboost的损失函数
xgboost的目标函数为:
L(ϕ)=∑il(y^i,yi)+∑kΩ(fk)这里Ω(f)=γT+12λ||w||2(2)
上式中,各项的解释如下:
符号 |
性质 |
说明 |
l
|
损失函数,可微,是一个凸函数。 |
衡量预测值y^i和精确值yi之间的差别,可以是差别的L1范数或者差别的L2范数 |
y^i
|
预测值 |
l的自变量 |
yi
|
精确值 |
l的自变量 |
γ
|
T的权重,即正则化的强度 |
实际使用中可调 |
T
|
树的叶子的数量 |
|
λ
|
||w||2的权重,即正则化的强度 |
实际使用中可调 |
||w||2
|
叶子得分的L2范数 |
|
Ω
|
正则化函数 |
Ω(f)=γT+12λ||w||2
|
根据xgboost的原理,树的集成方式是加法模型。即:
y^(t)i=y^(t−1)i+ft(Xi)(3)
公式的中各部分的解释如下:
符号 |
说明 |
t,t−1
|
集成树的迭代次数 |
i
|
集成树的中,树的编号。 |
y^(t−1)i
|
第i个数的第t−1次迭代的计算结果,即预测值 |
ft
|
第t次迭代后的集成树模型(可以理解为函数) |
Xi
|
第i个树的输入变量(自变量) |
公式的整个含义是:
第t次迭代后集成树的计算结果y^(t)i = 前t−1次的累加计算结果y^(t−1)i+第t次集成树模型计算结果ft(Xi)
将公式(3) 带入到公式(2)中,可得:
L(t)=∑i=1nl(yi,y^(t−1)i+ft(Xi))+Ω(ft)(4)
含义是:第
t次迭代的损失函数=
n个树的损失函数之和+第
t次迭代的集成树的复杂度惩罚
接着使用泰勒展开式对公式(4)进行化简。
已知泰勒展开式为:
f(x+Δx)=f(x)+f′(x)Δx+f′′(x)2!(Δx)2+⋯+f(n)(x)n!(Δx)n+Rn(x)(5)
所以,公式
(4)可以转化为:
L(t)≃∑i=1n[l(yi,y^(t−1))+gift(Xi)+12hif2t(Xi)]+Ω(ft)(6)
公式
(6)中,
gi=∂y^(t−1)l(yi,y^(t−1))hi=∂2y^(t−1)l(yi,y^(t−1))
并且,公式
(6)中和公式
(5)的对应如下:
公式(6)
|
公式(5)
|
l
|
f
|
y^(ty−1)i
|
x
|
ft(Xi)
|
Δx
|
考虑到l(yi,y^(t−1))是常量(因为前t−1次迭代结果已定,现在处于第t次迭代过程中),所以略去常数项,简化公式(6)如下:
L˜(t)=∑i=1n[gift(Xi)+12hif2t(Xi)]+Ω(ft)(7)
截止到目前,所有的推导的对象都是树,还未深入到树的叶子,不方便实际计算,现在将推导细化到树的叶子。
定义:Ij={i|q(Xi)=j}是第j个叶子的实例集。这里扩展Ω并将推导细化都树的叶子,重写公式(7)如下:
L˜(t)=∑i=1n[gift(Xi)+12hif2t(Xi)]+Ω(ft)=∑i=1n[gift(Xi)+12hif2t(Xi)]+γT+12λ||w||2=∑j=1T[(∑i∈Ijgi)wj+12(∑i∈Ijhi+λ)w2j]+γT(8)
需要说明的一点是,上式的前提是树的结构是恒定的。上式的含义是先求每个叶子的损失函数,然后将所有叶子的损失函数求和,并使用叶子的数量进行正则惩罚。
进一步对公式(8)进行化简,定义
Gj=∑i∈IjgiHj=∑i∈Ijhi
则公式
(8)化简为:
L˜(t)=∑j=1T[Gjwj+12(Hj+λ)w2j]+γT(9)
公式
(8)对
wj求一阶偏导,使之为0。得到
L˜(t)的极小值点
w∗:
w∗j=−∑i∈Ijgi∑i∈Ijhi+λ=−GjHj+λ(10)
将
w∗代入公式
(8),可得
L˜(t)的极小值:
L˜(t)(q)=−12∑j=1T(∑i∈Ijgi)2∑i∈Ijhi+λ+γT=−12∑j=1TG2jHj+λ+γT(11)
陈博士论文中,以一颗数为例,说明了公式
(11)的计算过程。
通常,不可能枚举所有可能的树结构q,一个贪婪算法从单一的叶子开始,迭代的添加到树的分支。假设IL和IR是拆分后的左和右节点的实例集。假定I=IL∪IR,在分割后的损失函数降低为:
Lsplit=12[(∑i∈ILgi)2∑i∈ILhi+λ+(∑i∈IRgi)2∑i∈IRhi+λ−(∑i∈Igi)2∑i∈Ihi+λ]−γ(12)
这个公式通常用于评估分裂的候选特征。