XGBoost原理

【第3页】Elements in Supervised Learning

xi x i 为第 i i 个训练样本

Linear Model通过线型变换y^i=jwjxij,得到输出值 y^iR y ^ i ∈ R

Tree Model通过一个比较抽象且复杂的变换(决策树) y^i=f(xi) y ^ i = f ( x i ) ,将输入 xi x i 映射到输出值 y^iR 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)=(yiy^i)2 l ( y i , y ^ i ) = ( y i − y ^ i ) 2

二分类问题常用Logistic Loss: l(yi,y^i)=yiln(1+ey^i)+(1yi)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

推导如下
l(yi,y^i)=yilnyipred(1yi)ln(1yipred)=yiln1yipred+(1yi)ln11yipredln=yiln(1+ey^i)+(1yi)ln(1+ey^i)yipred=1/(1+exp(y^i))

【第21页】Additive Training

设训练集为 {xi,yi}ni=1 { x i , y i } i = 1 n

假设我们已经迭代了 t1 t − 1 轮,对于训练样本 xi x i ,前 t1 t − 1 轮迭代得到的模型(包含 t1 t − 1 棵树 f1,f2,,ft1 f 1 , f 2 , … , f t − 1 )已经为我们提供了一个预测值 y^(t1)i=k=1t1fk(xi) y ^ i ( t − 1 ) = ∑ k = 1 t − 1 f k ( x i )

因此第 t t 轮迭代的目标是,学习一棵新的树模型ft,使得第 t t 轮的目标函数Obj(t)最小

t t 轮的预测值为y^i(t)=y^i(t1)+ft(xi)

t t 轮的目标函数Obj(t)定义如下
Obj(t)=i=1nl(yi,y^(t)i)+i=1tΩ(fi)=i=1nl(yi,y^(t1)i+ft(xi))+Ω(ft)+i=1t1Ω(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}t1i=1 { f i } i = 1 t − 1 y^(t1)i y ^ i ( t − 1 ) 均为在前 t1 t − 1 轮迭代中已经确定下来的常量,因此令 constant=i=1t1Ω(fi) constant = ∑ i = 1 t − 1 Ω ( f i ) ,则
Obj(t)=i=1nl(yi,y^(t1)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

回顾二阶泰勒展开:f(x+Δx)f(x)+f(x)Δx+12f(x)Δx2

考虑对loss项 l(yi,y^(t1)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^(t1)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^(t1)i l(yi,y^(t1)i) g i = ∂ y ^ i ( t − 1 )   l ( y i , y ^ i ( t − 1 ) ) hi=2y^(t1)i l(yi,y^(t1)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^(t1)i) l ( y i , y ^ i ( t − 1 ) ) gi g i hi h i 均为已经确定下来的常量,只有 ft f t 是变量,因此去掉所有常量项后,第 t t 轮的目标函数Obj(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 个样本在前t1轮得到的预测值 y^(t1)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 维的样本xRd,输出一个实数 yR y ∈ R

设树的叶节点个数为 T T ,定义一棵树需要指定以下两部分

  1. q:Rd{1,2,...,T}
    q q 是一个映射函数,表示将d维的样本分配到 T T 个叶节点中的某一个,在PPT中被称为树的结构(The structure of the tree)
  2. wRT
    w w 是一个T维向量,对应 T T 个叶节点的输出值,在PPT中被称为叶节点的权重(The leaf weight of the tree)

于是,参数化的树模型的数学表达为y=f(x)=wq(x),即首先将样本 x x 分配到第q(x)个叶节点,然后使用该叶节点的权重 wq(x) w q ( x ) ,作为模型的输出 y y

【第25页】Define Complexity of a Tree,详细定义树模型的复杂度

树的复杂度定义如下
Ω(f)=γT+12λj=1Twj2
复杂度包含两部分,一部分是叶节点的个数 T T ,另一部分是叶节点权重w的L2范数

【第26页】Revisit the Objectives

下面开始讨论在第 t t 轮迭代时,如何构造一棵最优的树ft,使得目标函数 Obj(t) O b j ( t ) 最小

首先提出第一个问题:假设树 ft f t 的结构 q(x) q ( x ) 已经确定,叶节点个数 T T 也随之确定下来,只剩下w为变量,如何求出最优的叶节点权重 w w ,使得目标函数Obj(t)最小

我们不妨将 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 个样本中,被分配到第j个叶节点的所有样本的下标构成一个集合 Ij={i|q(xi)=j} I j = { i | q ( x i ) = j }
于是我们可以将 n n 个样本划分为T个子集 I1,I2,...,IT I 1 , I 2 , . . . , I T ,从而将一重求和符号 i=1n ∑ i = 1 n 变为二重求和符号 j=1TiIj ∑ 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=1TiIjgiwj+12iIjhiw2j+γT+12λj=1Tw2j=j=1TiIjgiwj+12iIjhi+λ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 个相互独立的二次函数之和(变量为w1,w2,,wT
j=1 j = 1 时, (iI1gi)w1+12(iI1hi+λ)w21 ( ∑ i ∈ I 1 g i ) w 1 + 1 2 ( ∑ i ∈ I 1 h i + λ ) w 1 2
j=2 j = 2 时 (iI2gi)w2+12(iI2hi+λ)w22 ( ∑ i ∈ I 2 g i ) w 2 + 1 2 ( ∑ i ∈ I 2 h i + λ ) w 2 2
……
j=T j = T 时 (iITgi)wT+12(iIThi+λ)w2T ( ∑ i ∈ I T g i ) w T + 1 2 ( ∑ i ∈ I T h i + λ ) w T 2

【第27-28页】
定义 Gj=iIjgi G j = ∑ i ∈ I j g i Hj=iIjhi H j = ∑ i ∈ I j h i ,仅仅是为了简化公式中的符号
Obj(t)=j=1TiIjgiwj+12iIjhi+λ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 个叶节点的所有样本的一阶梯度之和,后续的讨论中也会出现字母G(没有下标),表示属于某个节点的所有样本的一阶梯度之和

以第 1 1 个叶节点为例,我们需要找到最优的w1,使得 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 b2a处取得最小值

因此当 H1+λ>0 H 1 + λ > 0 时, w1=G1H1+λ w 1 ∗ = − G 1 H 1 + λ

注: H1+λ>0 H 1 + λ > 0 是否成立,是由具体的loss决定的,至于哪些loss的二阶导数为正,PPT中没有详细讨论

下面列举了常见的Loss的梯度

Square Loss
l(yi,y^i)=(yiy^i)2 l ( y i , y ^ i ) = ( y i − y ^ i ) 2

y^il(yi,y^i)=2(y^iyi) ∂ 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+ey^i)+(1yi)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)(1sigmoid(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 w ,使得目标函数Obj(t)最小

我们已经得出了答案:树 ft f t 的结构 q(x) q ( x ) 已经确定,那么使得目标函数 Obj(t) O b j ( t ) 最小的叶节点权重 w w ∗ 由公式 wj=GjHj+λ w j ∗ = − G j H j + λ 直接计算得到,则 Obj(t) O b j ( t ) 的 最 小 值 为
Obj=12j=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 q(x)决定也是变量, 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=12j=1TG2jHj+λ+γT O b j = − 1 2 ∑ j = 1 T G j 2 H j + λ + γ T 作为损失评分的前提下,怎样找到最好的树结构 q(x) q ( x ) ,使得 Obj O b j 最小

  1. 穷举法:树的结构有无穷多个,因此无法穷举
  2. 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=Obj1Obj2=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>号仅仅是左右叶节点互换的区别),于是我们想要在一个叶节点上找到最优的分裂条件,需要回答以下两个问题

  1. 选择哪个属性?不知道,需要遍历所有属性
  2. 选择哪个属性值?首先对样本按照属性值进行排序,然后用穷举法选择最优的属性值,这就是论文中的Algorithm 1: Exact Greedy Algorithm for Split Finding

设样本数量为 n n ,特征数为d,则在一个节点上寻找最优分裂点的复杂度为 O(dnlogn) O ( d n log ⁡ n )

首先对 d d 个特征进行预排序,复杂度为O(dnlogn),然后对每一个特征进行线性扫描,复杂度为 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 d维样本上构建深度为 K K 的树,所需要的时间复杂度为O(ndKlogn)

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),等于它被选中为树节点分裂特征的次数之和

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值