【第3页】Elements in Supervised Learning
设 xi x i 为第 i i 个训练样本
Linear Model通过线型变换,得到输出值 y^i∈R y ^ i ∈ R
Tree Model通过一个比较抽象且复杂的变换(决策树) y^i=f(xi) y ^ i = f ( x i ) ,将输入 xi x i 映射到输出值 y^i∈R y ^ i ∈ R
对于回归问题,直接将输出值 y^i y ^ i 作为预测值,即 ypredi=y^i y i pred = y ^ i
对于二分类问题,需要将
y^i
y
^
i
变换到
[0,1]
[
0
,
1
]
范围内才能作为预测值,即
ypredi=sigmoid(y^i)=1/(1+exp(−y^i))
y
i
pred
=
sigmoid
(
y
^
i
)
=
1
/
(
1
+
exp
(
−
y
^
i
)
)
【第4页】Elements continued:Objective Function
回归问题常用Square Loss: l(yi,y^i)=(yi−y^i)2 l ( y i , y ^ i ) = ( y i − y ^ i ) 2
二分类问题常用Logistic Loss: l(yi,y^i)=yiln(1+e−y^i)+(1−yi)ln(1+ey^i) l ( y i , y ^ i ) = y i ln ( 1 + e − y ^ i ) + ( 1 − y i ) ln ( 1 + e y ^ i ) ,此处的 y^i y ^ i 相当于 z z
推导如下
【第21页】Additive Training
设训练集为 {xi,yi}ni=1 { x i , y i } i = 1 n
假设我们已经迭代了 t−1 t − 1 轮,对于训练样本 xi x i ,前 t−1 t − 1 轮迭代得到的模型(包含 t−1 t − 1 棵树 f1,f2,…,ft−1 f 1 , f 2 , … , f t − 1 )已经为我们提供了一个预测值 y^(t−1)i=∑k=1t−1fk(xi) y ^ i ( t − 1 ) = ∑ k = 1 t − 1 f k ( x i )
因此第 t t 轮迭代的目标是,学习一棵新的树模型,使得第 t t 轮的目标函数最小
第 t t 轮的预测值为
第
t
t
轮的目标函数定义如下
Obj(t)=∑i=1nl(yi,y^(t)i)+∑i=1tΩ(fi)=∑i=1nl(yi,y^(t−1)i+ft(xi))+Ω(ft)+∑i=1t−1Ω(fi)
O
b
j
(
t
)
=
∑
i
=
1
n
l
(
y
i
,
y
^
i
(
t
)
)
+
∑
i
=
1
t
Ω
(
f
i
)
=
∑
i
=
1
n
l
(
y
i
,
y
^
i
(
t
−
1
)
+
f
t
(
x
i
)
)
+
Ω
(
f
t
)
+
∑
i
=
1
t
−
1
Ω
(
f
i
)
上式中
{fi}t−1i=1
{
f
i
}
i
=
1
t
−
1
和
y^(t−1)i
y
^
i
(
t
−
1
)
均为在前
t−1
t
−
1
轮迭代中已经确定下来的常量,因此令
constant=∑i=1t−1Ω(fi)
constant
=
∑
i
=
1
t
−
1
Ω
(
f
i
)
,则
Obj(t)=∑i=1nl(yi,y^(t−1)i+ft(xi))+Ω(ft)+constant
O
b
j
(
t
)
=
∑
i
=
1
n
l
(
y
i
,
y
^
i
(
t
−
1
)
+
f
t
(
x
i
)
)
+
Ω
(
f
t
)
+
c
o
n
s
t
a
n
t
值得注意的是,在
Obj(t)
O
b
j
(
t
)
中,对于
n
n
个样本的loss仅仅做了求和而没有求平均
【第22页】Taylor Expansion Approximation of Loss
回顾二阶泰勒展开:
考虑对loss项
l(yi,y^(t−1)i+ft(xi))
l
(
y
i
,
y
^
i
(
t
−
1
)
+
f
t
(
x
i
)
)
使用泰勒展开,通常情况下,
ft(xi)
f
t
(
x
i
)
是一个微小的量,正好对应泰勒展开中的
Δx
Δ
x
于是可得
Obj(t)≈∑i=1n[l(yi,y^(t−1)i)+gift(xi)+12hif2t(xi)]+Ω(ft)+constant
O
b
j
(
t
)
≈
∑
i
=
1
n
[
l
(
y
i
,
y
^
i
(
t
−
1
)
)
+
g
i
f
t
(
x
i
)
+
1
2
h
i
f
t
2
(
x
i
)
]
+
Ω
(
f
t
)
+
constant
其中
gi=∂y^(t−1)i l(yi,y^(t−1)i)
g
i
=
∂
y
^
i
(
t
−
1
)
l
(
y
i
,
y
^
i
(
t
−
1
)
)
,
hi=∂2y^(t−1)i l(yi,y^(t−1)i)
h
i
=
∂
y
^
i
(
t
−
1
)
2
l
(
y
i
,
y
^
i
(
t
−
1
)
)
【第23页】Our New Goal
在 Obj(t) O b j ( t ) 中 l(yi,y^(t−1)i) l ( y i , y ^ i ( t − 1 ) ) , gi g i , hi h i 均为已经确定下来的常量,只有 ft f t 是变量,因此去掉所有常量项后,第 t t 轮的目标函数为
Obj(t)=∑i=1n[gift(xi)+12hif2t(xi)]+Ω(ft) O b j ( t ) = ∑ i = 1 n [ g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ] + Ω ( f t )
Reminder:
gi
g
i
就是将第
i
i
个样本在前轮得到的预测值
y^(t−1)i
y
^
i
(
t
−
1
)
以及真实值
yi
y
i
代入loss的一阶导数
∂y^il(yi,y^i)
∂
y
^
i
l
(
y
i
,
y
^
i
)
得到的值,属于常量,体现了gradient boosting中的gradient,即利用loss funtion对上一轮的预测值的梯度,指导本轮的学习
【第24页】Refine the definition of tree,详细定义树模型的参数
树模型 y=f(x) y = f ( x ) ,输入一个 d d 维的样本,输出一个实数 y∈R y ∈ R
设树的叶节点个数为 T T ,定义一棵树需要指定以下两部分
-
q q 是一个映射函数,表示将维的样本分配到 T T 个叶节点中的某一个,在PPT中被称为树的结构(The structure of the tree) -
w w 是一个维向量,对应 T T 个叶节点的输出值,在PPT中被称为叶节点的权重(The leaf weight of the tree)
于是,参数化的树模型的数学表达为,即首先将样本
x
x
分配到第个叶节点,然后使用该叶节点的权重
wq(x)
w
q
(
x
)
,作为模型的输出
y
y
【第25页】Define Complexity of a Tree,详细定义树模型的复杂度
树的复杂度定义如下
复杂度包含两部分,一部分是叶节点的个数
T
T
,另一部分是叶节点权重的L2范数
【第26页】Revisit the Objectives
下面开始讨论在第 t t 轮迭代时,如何构造一棵最优的树,使得目标函数 Obj(t) O b j ( t ) 最小
首先提出第一个问题:假设树 ft f t 的结构 q(x) q ( x ) 已经确定,叶节点个数 T T 也随之确定下来,只剩下为变量,如何求出最优的叶节点权重 w w ,使得目标函数最小
我们不妨将
ft(xi)
f
t
(
x
i
)
和
Ω(ft)
Ω
(
f
t
)
的具体定义代入,然后对式子做一些变形
Obj(t)=∑i=1n(gift(xi)+12hif2t(xi))+Ω(ft)=∑i=1n(giwq(xi)+12hiw2q(xi))+γT+12λ∑j=1Tw2j
O
b
j
(
t
)
=
∑
i
=
1
n
(
g
i
f
t
(
x
i
)
+
1
2
h
i
f
t
2
(
x
i
)
)
+
Ω
(
f
t
)
=
∑
i
=
1
n
(
g
i
w
q
(
x
i
)
+
1
2
h
i
w
q
(
x
i
)
2
)
+
γ
T
+
1
2
λ
∑
j
=
1
T
w
j
2
定义在训练集的
n
n
个样本中,被分配到第个叶节点的所有样本的下标构成一个集合
Ij={i|q(xi)=j}
I
j
=
{
i
|
q
(
x
i
)
=
j
}
于是我们可以将
n
n
个样本划分为个子集
I1,I2,...,IT
I
1
,
I
2
,
.
.
.
,
I
T
,从而将一重求和符号
∑i=1n
∑
i
=
1
n
变为二重求和符号
∑j=1T∑i∈Ij
∑
j
=
1
T
∑
i
∈
I
j
,这一步变形在PPT中称为Regroup the objective by each leaf
Obj(t)=∑i=1n(giwq(xi)+12hiw2q(xi))+γT+12λ∑j=1Tw2j=∑j=1T⎡⎣⎛⎝∑i∈Ijgi⎞⎠wj+12⎛⎝∑i∈Ijhi⎞⎠w2j⎤⎦+γT+12λ∑j=1Tw2j=∑j=1T⎡⎣⎛⎝∑i∈Ijgi⎞⎠wj+12⎛⎝∑i∈Ijhi+λ⎞⎠w2j⎤⎦+γT
O
b
j
(
t
)
=
∑
i
=
1
n
(
g
i
w
q
(
x
i
)
+
1
2
h
i
w
q
(
x
i
)
2
)
+
γ
T
+
1
2
λ
∑
j
=
1
T
w
j
2
=
∑
j
=
1
T
[
(
∑
i
∈
I
j
g
i
)
w
j
+
1
2
(
∑
i
∈
I
j
h
i
)
w
j
2
]
+
γ
T
+
1
2
λ
∑
j
=
1
T
w
j
2
=
∑
j
=
1
T
[
(
∑
i
∈
I
j
g
i
)
w
j
+
1
2
(
∑
i
∈
I
j
h
i
+
λ
)
w
j
2
]
+
γ
T
从上述推导中我们可以看到,参数
λ
λ
之前加了一个
12
1
2
,恰好和
12hiw2q(xi)
1
2
h
i
w
q
(
x
i
)
2
中的
12
1
2
合并到括号内
到此为止,除去常量项
γT
γ
T
(因为我们之前假设树
ft
f
t
的结构
q(x)
q
(
x
)
已经确定),目标函数
Obj(t)
O
b
j
(
t
)
可以看作
T
T
个相互独立的二次函数之和(变量为)
j=1
j
=
1
时,
(∑i∈I1gi)w1+12(∑i∈I1hi+λ)w21
(
∑
i
∈
I
1
g
i
)
w
1
+
1
2
(
∑
i
∈
I
1
h
i
+
λ
)
w
1
2
j=2时
j
=
2
时
,
(∑i∈I2gi)w2+12(∑i∈I2hi+λ)w22
(
∑
i
∈
I
2
g
i
)
w
2
+
1
2
(
∑
i
∈
I
2
h
i
+
λ
)
w
2
2
……
j=T时
j
=
T
时
,
(∑i∈ITgi)wT+12(∑i∈IThi+λ)w2T
(
∑
i
∈
I
T
g
i
)
w
T
+
1
2
(
∑
i
∈
I
T
h
i
+
λ
)
w
T
2
【第27-28页】
定义
Gj=∑i∈Ijgi
G
j
=
∑
i
∈
I
j
g
i
,
Hj=∑i∈Ijhi
H
j
=
∑
i
∈
I
j
h
i
,仅仅是为了简化公式中的符号
Obj(t)=∑j=1T⎡⎣⎛⎝∑i∈Ijgi⎞⎠wj+12⎛⎝∑i∈Ijhi+λ⎞⎠w2j⎤⎦+γT=∑j=1T(Gjwj+12(Hj+λ)w2j)+γT
O
b
j
(
t
)
=
∑
j
=
1
T
[
(
∑
i
∈
I
j
g
i
)
w
j
+
1
2
(
∑
i
∈
I
j
h
i
+
λ
)
w
j
2
]
+
γ
T
=
∑
j
=
1
T
(
G
j
w
j
+
1
2
(
H
j
+
λ
)
w
j
2
)
+
γ
T
Reminder: Gj G j 为落到第 j j 个叶节点的所有样本的一阶梯度之和,后续的讨论中也会出现字母(没有下标),表示属于某个节点的所有样本的一阶梯度之和
以第 1 1 个叶节点为例,我们需要找到最优的,使得 G1w1+12(H1+λ)w21 G 1 w 1 + 1 2 ( H 1 + λ ) w 1 2 最小
这是一个求二元函数最小值的问题(初中数学知识),我们知道对于二次函数 f(x)=ax2+bx+c f ( x ) = a x 2 + b x + c ,当 a>0 a > 0 时, x x 在处取得最小值
因此当 H1+λ>0 H 1 + λ > 0 时, w∗1=−G1H1+λ w 1 ∗ = − G 1 H 1 + λ
注: H1+λ>0 H 1 + λ > 0 是否成立,是由具体的loss决定的,至于哪些loss的二阶导数为正,PPT中没有详细讨论
下面列举了常见的Loss的梯度
Square Loss
l(yi,y^i)=(yi−y^i)2
l
(
y
i
,
y
^
i
)
=
(
y
i
−
y
^
i
)
2
∂y^il(yi,y^i)=2(y^i−yi) ∂ y ^ i l ( y i , y ^ i ) = 2 ( y ^ i − y i ) , ∂2y^il(yi,y^i)=2 ∂ y ^ i 2 l ( y i , y ^ i ) = 2
Logistic Loss
l(yi,y^i)=yiln(1+e−y^i)+(1−yi)ln(1+ey^i)
l
(
y
i
,
y
^
i
)
=
y
i
ln
(
1
+
e
−
y
^
i
)
+
(
1
−
y
i
)
ln
(
1
+
e
y
^
i
)
∂y^il(yi,y^i)=sigmoid(y^i)−yi ∂ y ^ i l ( y i , y ^ i ) = s i g m o i d ( y ^ i ) − y i , ∂2y^il(yi,y^i)=sigmoid(y^i)(1−sigmoid(y^i)) ∂ y ^ i 2 l ( y i , y ^ i ) = s i g m o i d ( y ^ i ) ( 1 − s i g m o i d ( y ^ i ) )
结论:Square Loss和Logistic Loss的二阶导数均为正
到此为止,对于第一个问题:首先假设树 ft f t 的结构 q(x) q ( x ) 已经确定,叶节点个数 T T 也随之确定下来,只剩下为变量,如何求出最优的叶节点权重 w w ,使得目标函数最小
我们已经得出了答案:树
ft
f
t
的结构
q(x)
q
(
x
)
已经确定,那么使得目标函数
Obj(t)
O
b
j
(
t
)
最小的叶节点权重
w∗
w
∗
由公式
w∗j=−GjHj+λ
w
j
∗
=
−
G
j
H
j
+
λ
直接计算得到,则
Obj(t)的最小值为
O
b
j
(
t
)
的
最
小
值
为
Obj=−12∑j=1TG2jHj+λ+γT
O
b
j
=
−
1
2
∑
j
=
1
T
G
j
2
H
j
+
λ
+
γ
T
此时,若把树
ft
f
t
的结构
q(x)
q
(
x
)
看作变量,则
Ij
I
j
和
T
T
由决定也是变量,
Gj
G
j
和
Hj
H
j
由
Ij
I
j
决定也是变量,那么这个式子就可以看作对树结构
q(x)
q
(
x
)
的损失评分,好的树结构应该使这个损失尽可能小,这个评价树结构好坏的score称为structure score(PPT原文:This measures how good a tree structure is! The smaller the score is, the better the structure is.)
【第29-30页】
现在提出第二个问题,在使用
Obj=−12∑j=1TG2jHj+λ+γT
O
b
j
=
−
1
2
∑
j
=
1
T
G
j
2
H
j
+
λ
+
γ
T
作为损失评分的前提下,怎样找到最好的树结构
q(x)
q
(
x
)
,使得
Obj
O
b
j
最小
- 穷举法:树的结构有无穷多个,因此无法穷举
- Greedy Learning:考虑每一个叶节点,尝试分裂该叶节点,并计算分裂前后
Obj
O
b
j
降低了多少,视为分裂的收益,由此判断分裂该叶节点是否划算(相当于预剪枝)
贪心的思想体现在对于当前节点,仅考虑最好的分裂节点,这种每个节点都贪心的做法学习到的树结构有可能不是最优的,但接近于最优
Greedy的思想体现在对于当前节点,仅考虑最好的分裂节点,这种每个节点都贪心的做法学习到的树结构有可能不是最优的,但接近于最优
具体地,对于某个叶节点,属于该叶节点的样本的梯度之和为 G,H G , H ,现在尝试将它分裂为左右两个叶节点,分裂后属于左叶节点的样本的梯度之和为 GL,HL G L , H L ,属于左叶节点的样本的梯度之和为 GR,HR G R , H R ,并且满足条件 G=GL+GR,H=HL+HR G = G L + G R , H = H L + H R
分裂前, Obj1=−12G2H+λ+γ O b j 1 = − 1 2 G 2 H + λ + γ
分裂后, Obj2=−12G2LHL+λ+γ−12G2RHR+λ+γ O b j 2 = − 1 2 G L 2 H L + λ + γ − 1 2 G R 2 H R + λ + γ
分裂的收益, Gain=Obj1−Obj2=12(G2LHL+λ+G2RHR+λ−G2H+λ)−γ G a i n = O b j 1 − O b j 2 = 1 2 ( G L 2 H L + λ + G R 2 H R + λ − G 2 H + λ ) − γ
分裂的收益 Gain G a i n 表示经过分裂使得 Obj O b j 降低了多少, Gain G a i n 越大越好
来自wepon的注解:这个公式形式上跟ID3算法(采用entropy计算增益)、CART算法(采用gini指数计算增益) 是一致的,都是用分裂后的某个值减去分裂前的某个值,从而得到增益
注:此处体现了XGBoost参数gamma所描述的作用:minimum loss reduction required to make a further partition on a leaf node of the tree. The larger, the more conservative the algorithm will be.
因为对于某个给定的 γ γ ,一次分裂必须使得 12(G2LHL+λ+G2RHR+λ−G2H+λ)>γ 1 2 ( G L 2 H L + λ + G R 2 H R + λ − G 2 H + λ ) > γ ,才能使得 Gain G a i n 为正,所以说gamma控制了节点分裂的最小loss reduction,可以看作进行了预剪枝
分裂条件具体的表达形式为:属性 > > 属性值(取或 < < <script type="math/tex" id="MathJax-Element-11433"><</script>号仅仅是左右叶节点互换的区别),于是我们想要在一个叶节点上找到最优的分裂条件,需要回答以下两个问题
- 选择哪个属性?不知道,需要遍历所有属性
- 选择哪个属性值?首先对样本按照属性值进行排序,然后用穷举法选择最优的属性值,这就是论文中的Algorithm 1: Exact Greedy Algorithm for Split Finding
设样本数量为 n n ,特征数为,则在一个节点上寻找最优分裂点的复杂度为 O(dnlogn) O ( d n log n )
首先对 d d 个特征进行预排序,复杂度为,然后对每一个特征进行线性扫描,复杂度为 O(dn) O ( d n ) ,最终可以找到Gain最大时对应的那个特征及特征的取值,复杂度为 O(dnlogn)+O(dn)=O(dnlogn) O ( d n log n ) + O ( d n ) = O ( d n log n )
在 n n 个维样本上构建深度为 K K 的树,所需要的时间复杂度为
设
K=3
K
=
3
,第1层的复杂度为
O(dnlogn)
O
(
d
n
log
n
)
,第2层的复杂度为
O(dnlogn2)≈O(dnlogn)
O
(
d
n
log
n
2
)
≈
O
(
d
n
log
n
)
,第3层
O(dnlogn4)≈O(dnlogn)
O
(
d
n
log
n
4
)
≈
O
(
d
n
log
n
)
,3层加起来复杂度为
O(ndKlogn)
O
(
n
d
K
log
n
)
论文3.3 Weighted Quantile Sketch
Obj(t)=∑i=1n(gift(xi)+12hif2t(xi))+Ω(ft)=∑i=1n12hi(2gift(xi)hi+f2t(xi))+Ω(ft)=∑i=1n12hi(g2ih2i+2gift(xi)hi+f2t(xi))+Ω(ft)(在括号内添加常量项g2ih2i)=∑i=1n12hi(ft(xi)+gihi)2+Ω(ft)(195)(196)(197)(198)
(195)
O
b
j
(
t
)
=
∑
i
=
1
n
(
g
i
f
t
(
x
i
)
+
1
2
h
i
f
t
2
(
x
i
)
)
+
Ω
(
f
t
)
(196)
=
∑
i
=
1
n
1
2
h
i
(
2
g
i
f
t
(
x
i
)
h
i
+
f
t
2
(
x
i
)
)
+
Ω
(
f
t
)
(197)
=
∑
i
=
1
n
1
2
h
i
(
g
i
2
h
i
2
+
2
g
i
f
t
(
x
i
)
h
i
+
f
t
2
(
x
i
)
)
+
Ω
(
f
t
)
(在括号内添加常量项
g
i
2
h
i
2
)
(198)
=
∑
i
=
1
n
1
2
h
i
(
f
t
(
x
i
)
+
g
i
h
i
)
2
+
Ω
(
f
t
)
XGBoost相比传统GBDT有何不同?
传统GBDT在优化时仅利用了一阶导数,而XGBoost对Loss Function进行二阶泰勒展开,利用了一阶和二阶导数
XGBoost在Loss Function中加入正则化项
XGBoost提出使用Column Subsampling技术,该技术最初用于Random Forest中,可以防止过拟合,加快计算速度(见论文Sec. 2.3)
XGBoost能够处理缺失值,具体做法是,使用那些在该属性上不缺失的样本,遍历所有切分点,找到最好的切分点,由此学习到了默认的分裂方向(default direction,见论文Sec. 3.4)
传统GBDT以CART作为基分类器,XGBoost还支持线性分类器(参数booster默认为gbtree,可选gblinear,dart)
XGBoost把树的节点个数作为正则项
XGBoost的特征重要性是如何得到的?
某个特征的重要性(feature score),等于它被选中为树节点分裂特征的次数之和