机器学习之决策树终极分类器:XGBoost

导读:
XGBoost被认为是各类赛事排名第一的算法
Ensenble是集成算法,分为两类:bagging和boosting
bagging:每个人都是专家(List of experts),容易过拟合;把多个拼接到一起,降低方差,即模型的稳定性
boosting:每个人都是普通人(List of weak learners),容易欠拟合

XGBoost

1.优势:

  1. 速度和表现可以超过大部分机器学习模型;
  2. 可以并行化计算
  3. 有大量可调节参数,例如 γ \gamma γ λ \lambda λ

2.学习路径:

  1. 如何构造目标函数(Objective function)
  2. 如何近似目标函数(Objective function,优化,求最小/最大值)
  3. 如何引入树到目标函数,改造目标函数
  4. 如何使用贪心算法构造树

其中 从1到2使用了泰勒展开式

1.构造目标函数

假设有 K K K棵树:
y i ^ = ∑ k = 1 K f k ( x i ) , f k ∈ F (1) \hat{y_{i}} = \sum_{k=1}^{K}f_{k}(x_{i}), f_{k} \in \mathcal{F} \tag{1} yi^=k=1Kfk(xi),fkF(1)
目标函数:
O b j = ∑ i = 1 n l ( y i , y i ^ ) + ∑ k = 1 K Ω ( f k ) (2) Obj = \sum_{i=1}^{n}l(y_{i},\hat{y_{i}})+ \sum_{k=1}^{K}\Omega(f_{k}) \tag{2} Obj=i=1nl(yi,yi^)+k=1KΩ(fk)(2)

Additive Training

  1. 第零个树的预测值: y i ^ ( 0 ) = 0 \hat{y_{i}}^{(0)} = 0 yi^(0)=0 ---------base case
  2. 第一个树的预测值: y i ^ ( 1 ) = f 1 ( x i ) = y i ^ ( 0 ) + f 1 ( x i ) \hat{y_{i}}^{(1)} = f_{1}(x_{i}) = \hat{y_{i}}^{(0)} + f_{1}(x_{i}) yi^(1)=f1(xi)=yi^(0)+f1(xi)
  3. 第二个树的预测值: y i ^ ( 2 ) = f 1 ( x i ) + f 2 ( x i ) = y i ^ ( 1 ) + f 2 ( x i ) \hat{y_{i}}^{(2)} = f_{1}(x_{i}) + f_{2}(x_{i}) = \hat{y_{i}}^{(1)} + f_{2}(x_{i}) yi^(2)=f1(xi)+f2(xi)=yi^(1)+f2(xi)
  4. 第三个树的预测值: y i ^ ( 3 ) = f 1 ( x i ) + f 2 ( x i ) + f 3 ( x i ) = y i ^ ( 2 ) + f 3 ( x i ) \hat{y_{i}}^{(3)} = f_{1}(x_{i}) + f_{2}(x_{i}) + f_{3}(x_{i}) = \hat{y_{i}}^{(2)} + f_{3}(x_{i}) yi^(3)=f1(xi)+f2(xi)+f3(xi)=yi^(2)+f3(xi)
    ……
  5. 第t个树的预测值: y i ^ ( t ) = ∑ k = 1 t f k ( x i ) = y i ^ ( t − 1 ) + f t ( x i ) \hat{y_{i}}^{(t)} = \sum_{k=1}^{t}f_{k}(x_{i}) = \hat{y_{i}}^{(t-1)} + f_{t}(x_{i}) yi^(t)=k=1tfk(xi)=yi^(t1)+ft(xi)

训练第i棵树时,例如第2棵树 f 2 ( x i ) f_{2}(x_{i}) f2(xi),要拟合残差,即真实值和已有的预测之差: y i − y 1 ^ ( 1 ) y_{i} - \hat{y_{1}}^{(1)} yiy1^(1)

下面就是构造目标函数:
t t t轮的预测值为: y t ^ ( t ) = y t ^ ( t − 1 ) + f t ( x i ) \hat{y_{t}}^{(t)} = \hat{y_{t}}^{(t-1)} + f_{t}(x_i) yt^(t)=yt^(t1)+ft(xi),其中 y t ^ ( t − 1 ) \hat{y_{t}}^{(t-1)} yt^(t1)为从第1…t-1棵树的预测结果,要训练第t棵树 f t ( x i ) f_{t}(x_i) ft(xi)使得最终总的预测值 y t ^ ( t ) \hat{y_{t}}^{(t)} yt^(t)与真实值 y i y_{i} yi之间的差距要尽可能的小。故我们可以根据这一点构造目标函数。

目标函数 O b j Obj Obj
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 ) + c o n s t a n t (3) Obj^{(t)} = \sum_{i=1}^{n}l(y_{i},\hat{y}_{i}^{(t)}) + \sum_{i=1}^{t} \Omega(f_{i}) \\ = \sum_{i=1}^{n}l(y_{i},\hat{y}_{i}^{(t-1)} - f_{t}(x_i)) + \Omega(f_{t}) + constant \tag{3} Obj(t)=i=1nl(yi,y^i(t))+i=1tΩ(fi)=i=1nl(yi,y^i(t1)ft(xi))+Ω(ft)+constant(3)
第二项为每棵树的复杂度,即 ∑ i = 1 t Ω ( f i ) = Ω 1 + Ω 2 + ⋯ + Ω t \sum_{i=1}^{t} \Omega(f_{i}) = \Omega_{1} + \Omega_{2} + \dots + \Omega_{t} i=1tΩ(fi)=Ω1+Ω2++Ωt,其中前t-1棵树的复杂度已知,故可以看作常数,提出来。另外把 t t t时刻的预测值 y t ^ ( t ) \hat{y_{t}}^{(t)} yt^(t)的表达式代入上式,并考虑平方误差损失函数(Square Loss), l l l变为:
O b j ( t ) = ∑ i = 1 n ( y i − ( y ^ i ( t − 1 ) − f t ( x i ) ) ) 2 + Ω ( f t ) + c o n s t a n t (4) Obj^{(t)} = \sum_{i=1}^{n}\left(y_{i}-(\hat{y}_{i}^{(t-1)} - f_{t}(x_i))\right)^{2} + \Omega(f_{t}) + constant \tag{4} Obj(t)=i=1n(yi(y^i(t1)ft(xi)))2+Ω(ft)+constant(4)
把所有不含 f t ( x i ) f_{t}(x_i) ft(xi)的项(因为都是已知项,例如 y i 2 y_{i}^{2} yi2 − 2 y i y ^ i ( t − 1 ) -2y_{i}\hat{y}_{i}^{(t-1)} 2yiy^i(t1)等等)都提出来,放到 c o n s t a n t constant constant里,得:
O b j ( t ) = ∑ i = 1 n [ 2 ( y ^ i ( t − 1 ) − y i ) f t ( x i ) + f t ( x i ) 2 ] + Ω ( f t ) + c o n s t a n t (5) Obj^{(t)} = \sum_{i=1}^{n}\left[2(\hat{y}_{i}^{(t-1)} - y_{i})f_{t}(x_i)+f_{t}(x_i)^{2}\right] + \Omega(f_{t}) + constant \tag{5} Obj(t)=i=1n[2(y^i(t1)yi)ft(xi)+ft(xi)2]+Ω(ft)+constant(5)
目标是最小化真实值 y i y_{i} yi和前 t t t棵树的预测 y ^ i ( t ) \hat{y}_{i}^{(t)} y^i(t)之差, ( 5 ) (5) (5)式只是演示一下当是回归问题时应该怎么变换,下面还是回到最开始的 ( 3 ) (3) (3)式。

2.近似目标函数

利用泰勒展开式:
f ( x + Δ x ) = f ( x ) + f ′ ( x ) Δ x + 1 2 f ′ ′ ( x ) Δ x 2 + ⋯ f(x+\Delta x) = f(x) + f^{\prime}(x)\Delta x + \frac{1}{2}f^{\prime\prime}(x)\Delta x^{2} + \cdots f(x+Δx)=f(x)+f(x)Δx+21f(x)Δx2+
回到最开始的例子,即 ( 3 ) (3) (3)式:
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)} = \sum_{i=1}^{n}l(y_{i},\hat{y}_{i}^{(t-1)} + f_{t}(x_i)) + \Omega(f_{t}) + constant Obj(t)=i=1nl(yi,y^i(t1)+ft(xi))+Ω(ft)+constant
l ( y i , y ^ i ( t − 1 ) ) l(y_{i},\hat{y}_{i}^{(t-1)} ) l(yi,y^i(t1))看做 f ( x ) f(x) f(x) f t ( x i ) f_{t}(x_i) ft(xi)看做 Δ x \Delta x Δx,上式利用泰勒展开为:
O b j ( t ) = ∑ i = 1 n [ l ( y i , y ^ i ( t − 1 ) ) + ∂ y ^ ( t − 1 ) l ( y i , y ^ i ( t − 1 ) ) f t ( x i ) + 1 2 ∂ y ^ ( t − 1 ) 2 l ( y i , y ^ i ( t − 1 ) ) f t 2 ( x i ) ] + Ω ( f t ) + c o n s t a n t (6) Obj^{(t)} = \sum_{i=1}^{n} \left[ l(y_{i},\hat{y}_{i}^{(t-1)}) + \partial_{\hat{y}^{(t-1)}}l(y_{i},\hat{y}_{i}^{(t-1)}) f_{t}(x_i) + \frac{1}{2}\partial_{\hat{y}^{(t-1)}}^{2}l(y_{i},\hat{y}_{i}^{(t-1)}) f_{t}^{2}(x_i) \right] + \Omega(f_{t}) + constant \tag{6} Obj(t)=i=1n[l(yi,y^i(t1))+y^(t1)l(yi,y^i(t1))ft(xi)+21y^(t1)2l(yi,y^i(t1))ft2(xi)]+Ω(ft)+constant(6)
若把 ∂ y ^ i ( t − 1 ) l ( y i , y ^ i ( t − 1 ) ) \partial_{\hat{y}_i^{(t-1)}} l(y_i,\hat{y}_i^{(t-1)}) y^i(t1)l(yi,y^i(t1))看作 g i g_i gi,把 ∂ y ^ i ( t − 1 ) 2 l ( y i , y ^ i ( t − 1 ) ) \partial_{\hat{y}_i^{(t-1)}}^2 l(y_i,\hat{y}_i^{(t-1)}) y^i(t1)2l(yi,y^i(t1))看作 h i h_i hi,并把常数项放到constant里,上式变为
O b j ( t ) ≃ ∑ i = 1 n [ g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ] + Ω ( f t ) + c o n s t a n t (7) Obj^{(t)} \simeq \sum_{i=1}^{n} [g_if_t(x_i) + \tfrac{1}{2}h_if_t^2(x_i)] + \Omega(f_t) + constant \tag{7} Obj(t)i=1n[gift(xi)+21hift2(xi)]+Ω(ft)+constant(7)
下面推导如何表达树的复杂度 Ω ( f t ) \Omega(f_{t}) Ω(ft)

3.如何引入树到目标函数,改造目标函数

重新定义一棵树,采用结果导向,
f t ( x ) = ω q ( x ) , ω ∈ R T , q : R d → { 1 , 2 , . . . , T } f_{t}(x) = \omega_{q(x)},\omega \in R^{T}, q: R^{d} \rightarrow \{1,2,...,T\} ft(x)=ωq(x),ωRT,q:Rd{1,2,...,T}
输入的x是一个object,可能是boy,可能是gril,也可能是old man,函数q返回的是一个index,例如下图,输入x=boy,q(boy) = 1,即男孩的下标是1,男孩输入第一个叶子节点。q(gril) = 2,即女孩的下标是2,女孩输入第二个叶子节点,而 ω \omega ω返回的是预测值。故 ω \omega ω q q q是需要学出来的。
在这里插入图片描述
一共有以下几个参数需要学习:
1.参数T,即T个叶子节点;
2. ω \omega ω,针对每个叶子节点的预测值,一个T维的向量;
3. q q q,给定一个object,返回一个index

下面要针对每棵树,找到3个参数的最优值。

树的复杂度
Ω ( f t ) = γ T + 1 2 ∑ j = 1 T ω j 2 \Omega(f_{t}) = \gamma T + \frac{1}{2}\sum_{j=1}^{T} \omega_{j}^{2} Ω(ft)=γT+21j=1Tωj2
上式中第一项为叶子节点的个数, γ \gamma γ为此项权重,第二项为L2的正则, λ \lambda λ为此项权重,两项相加为该树的复杂度,希望复杂度是越小越好。
在这里插入图片描述
如上图所示,计算该树的复杂度 Ω \Omega Ω,此时T=3,因为是3个叶子节点,叶子节点1的得分 ω \omega ω是+2,平方是4;叶子节点2的得分 ω \omega ω是0.1,平方是0.01,叶子节点3的得分 ω \omega ω是-1,平方是1,将它们3个加起来,得到该树的复杂度

4.使用贪心算法构造树

回到最开始的目标函数, ( 7 ) (7) (7)
O b j ( t ) ≃ ∑ i = 1 n [ g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ] + Ω ( f t ) + c o n s t a n t (7) Obj^{(t)} \simeq \sum_{i=1}^{n} [g_if_t(x_i) + \tfrac{1}{2}h_if_t^2(x_i)] + \Omega(f_t) + constant \tag{7} Obj(t)i=1n[gift(xi)+21hift2(xi)]+Ω(ft)+constant(7)
其中 g i = ∂ y ^ i ( t − 1 ) l ( y i , y ^ i ( t − 1 ) ) g_{i} = \partial_{\hat{y}_i^{(t-1)}} l(y_i,\hat{y}_i^{(t-1)}) gi=y^i(t1)l(yi,y^i(t1)) h i = ∂ y ^ i ( t − 1 ) 2 l ( y i , y ^ i ( t − 1 ) ) h_{i} = \partial_{\hat{y}_i^{(t-1)}}^2 l(y_i,\hat{y}_i^{(t-1)}) hi=y^i(t1)2l(yi,y^i(t1)),分别代表一阶导数和二阶导数。

( 7 ) (7) (7)式做如下变换,见下图所示
在这里插入图片描述
换一种定义的方式,按每个叶子节点中的元素集合可以定义为 I j = { i ∣ q ( x i ) = j } I_{j} = \{i|q(x_{i}) = j\} Ij={iq(xi)=j},即把同一个叶子节点中的元素放到一起,例如 I 1 = { 1 , 3 } I_{1} = \{1,3\} I1={1,3} I 2 = { 2 , 5 , 6 } I_{2} = \{2,5,6\} I2={2,5,6} I 3 = { 7 } I_{3} = \{7\} I3={7} I 4 = { 4 , 8 } I_{4} = \{4,8\} I4={4,8}
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 ω q ( x ) + 1 2 h i ω q ( x ) 2 ] + γ T + 1 2 λ ∑ j = 1 T ω j 2 = ∑ j = 1 T [ ( ∑ i ∈ I j g i ) ω j + 1 2 ( ∑ i ∈ I j h i + λ ) ω j 2 ] + γ T (8) Obj^{(t)} \simeq \sum_{i=1}^{n} \left[g_if_t(x_i) + \tfrac{1}{2}h_if_t^2(x_i) \right] + \Omega(f_t) \\ = \sum_{i=1}^{n} \left[g_i\omega_{q(x)} + \tfrac{1}{2}h_i \omega_{q(x)}^2 \right] + \gamma T + \frac{1}{2} \lambda \sum_{j = 1}^T \omega_j^2 \\ = \sum_{j=1}^{T} \left[(\sum_{i\in I_j}g_i)\omega_{j} + \tfrac{1}{2}(\sum_{i\in I_j}h_i + \lambda)\omega_{j}^2 \right] + \gamma T \tag{8} Obj(t)i=1n[gift(xi)+21hift2(xi)]+Ω(ft)=i=1n[giωq(x)+21hiωq(x)2]+γT+21λj=1Tωj2=j=1T(iIjgi)ωj+21(iIjhi+λ)ωj2+γT(8)
通过第二个等号可以看出,原来是按每个样本累加的,现在先处理一个节点中的元素,再进行相加。即上式为按每个独立的叶子节点相加的二次方程。

5.求解新的目标函数

目标函数变成了二次方优化问题,此时由公式可得
a r g m i n x G x + 1 2 H x 2 = x = − b 2 a − G H , m i n x   G x + 1 2 H x 2 = − 1 2 G 2 H argmin_{x} Gx+\dfrac{1}{2}Hx^2 \xlongequal{x=-\frac{b}{2a}} -\frac{G}{H},min_x \ Gx+\dfrac{1}{2}Hx^2=-\dfrac{1}{2}\dfrac{G^2}{H} argminxGx+21Hx2x=2ab HG,minx Gx+21Hx2=21HG2
其中 a r g m i n x argmin_{x} argminx表示当式子取值最小时此时的自变量x的取值,由二次方程求最小值公式可知,当 x = − b 2 a x = -\frac{b}{2a} x=2ab时,此时式子有最小值。

定义 G j = ∑ i ∈ I j g i G_j = \sum_{i\in I_j}g_i Gj=iIjgi H j = ∑ i ∈ I j h i H_j = \sum_{i\in I_j}h_i Hj=iIjhi ( 8 ) (8) (8)式变为:
= ∑ j = 1 T [ G j ω j + 1 2 ( H j + λ ) ω j 2 ] + γ T = \sum_{j=1}^{T} \left[G_j\omega_{j} + \tfrac{1}{2}(H_j + \lambda)\omega_{j}^2 \right] + \gamma T =j=1T[Gjωj+21(Hj+λ)ωj2]+γT
故最好的 ω j ⋆ \omega_{j}^\star ωj和对应的损失函数值为:
ω j ⋆ = − G j H j + λ O b j = − 1 2 ∑ j = 1 T G j 2 H j + λ + γ T (9) \omega_{j}^\star = -\dfrac{G_j}{H_j + \lambda}\quad Obj = -\dfrac{1}{2}\sum_{j = 1}^T \dfrac{G_{j}^2}{H_j + \lambda} + \gamma T \tag{9} ωj=Hj+λGjObj=21j=1THj+λGj2+γT(9)

6.叶子节点分裂方式

节点分裂的依据就可以参照上面的目标函数最终形式,来求分裂前后相差最大的特征,即最大化下式:
G a i n = 1 2 [ G L 2 H L + λ + G R 2 H R + λ − ( G L + G R ) 2 H L + H R + λ ] − γ Gain = \dfrac{1}{2}[\dfrac{G_{L}^2}{H_L + \lambda} + \dfrac{G_{R}^2}{H_R + \lambda} - \dfrac{(G_L + G_R)^2}{H_L + H_R + \lambda}] - \gamma Gain=21[HL+λGL2+HR+λGR2HL+HR+λ(GL+GR)2]γ

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值