Datawhale-集成学习Day6-XGBoost

本文介绍了泰勒公式的基础知识,强调了其在函数表示上的重要性,并详细阐述了XGBoost中如何利用泰勒公式优化损失函数,特别是如何通过损失函数和惩罚项控制模型复杂度,防止过拟合,以实现更好的泛化能力。XGBoost通过梯度提升决策树和精确贪心算法选择最优分裂节点,确保模型的预测性能。
摘要由CSDN通过智能技术生成

Datawhale-集成学习Day6-XGBoost

1. 前置知识——泰勒公式

学过高等数学的话,我们就可以知道泰勒公式。这是一个很美妙的公式,其最大的贡献就是可以通过多项式来表示其他函数。也就是说,我们可以将一些不规则的函数转化为一个无限项的多项式。

带有Peano余项的泰勒公式:
f ( x ) = f ( x 0 ) + f ‘ ( x 0 ) ( x − x 0 ) + f ‘ ‘ ( x 0 ) 2 ! ( x − x 0 ) 2 + ⋯ + f ( n ) ( x 0 ) n ! ( x − x 0 ) n + o ( ( x − x 0 ) n ) f(x)=f(x_0)+f^`(x_0)(x-x_0)+{{f^{``}(x_0)} \over {2!}}(x-x_0)^2 + \cdots + {{f^{(n)}(x_0)} \over {n!}}(x-x_0)^n+o((x-x_0)^n) f(x)=f(x0)+f(x0)(xx0)+2!f(x0)(xx0)2++n!f(n)(x0)(xx0)n+o((xx0)n)
其中 o ( ( x − x 0 ) n ) o((x-x_0)^n) o((xx0)n)表示为 ( x − x 0 ) n (x-x_0)^n (xx0)n的高阶无穷小。在一定情况下可以忽略。

带有拉格朗日余项的泰勒公式:
f ( x ) = f ( x 0 ) + f ‘ ( x 0 ) ( x − x 0 ) + f ‘ ‘ ( x 0 ) 2 ! ( x − x 0 ) 2 + ⋯ + f ( n ) ( x 0 ) n ! ( x − x 0 ) n + R n ( x ) f(x)=f(x_0)+f^`(x_0)(x-x_0)+{{f^{``}(x_0)} \over {2!}}(x-x_0)^2 + \cdots + {{f^{(n)}(x_0)} \over {n!}}(x-x_0)^n+R_n(x) f(x)=f(x0)+f(x0)(xx0)+2!f(x0)(xx0)2++n!f(n)(x0)(xx0)n+Rn(x)
其中:
R n ( x ) = f ( n + 1 ) ( ζ ) ( n + 1 ) ! ( x − x 0 ) n + 1 R_n(x)={f^{(n+1)}(\zeta) \over (n+1)!}(x-x_0)^{n+1} Rn(x)=(n+1)!f(n+1)(ζ)(xx0)n+1
两者的区别:一般来说,我们想要研究函数的整体性质的时候可以使用Peano余项的泰勒公式,当我们想要研究函数的局部性质的时候我们可以选择使用带有拉格朗日余项的泰勒公式。

2. XGBoost

在前面的文章中,我们介绍了提升树和GBDT。但是在GBDT中,我们并没有说loss和punish项该如何设置。而在XGBoost中,陈天奇大佬设计了一种计算损失的方式。

首先,如果我们想要模型不仅对已知数据具有很好的训练效果,还想要模型有很好的泛化效果的话。我们就需要控制模型的复杂度。一般来说,过于复杂的模型,对已知数据的拟合效果效果很好,但是会造成过拟合。因此我们需要控制模型的复杂度,不仅需要很好的拟合效果,还不能造成过拟合。所以,我们将目标函数设置为:
L ( ϕ ) = ∑ i l ( y ^ i , y i ) + ∑ k Ω ( f k ) \mathcal{L}(\phi)=\sum_{i} l\left(\hat{y}_{i}, y_{i}\right)+\sum_{k} \Omega\left(f_{k}\right) L(ϕ)=il(y^i,yi)+kΩ(fk)
其中,前面一项是整个模型的损失,后面一项是惩罚项,用来控制模型的复杂度。

根据GBDT的思想,我们使用前向分布算法来优化模型。假设 T 1 ⋯ T n − 1 T_1 \cdots T_{n-1} T1Tn1棵树已经训练完毕。那么,我们在后面的训练中将不再训练这前n-1棵树。然后,第n棵树可以表示为:
f n ( x ) = f n − 1 ( x ) + T n ( x ; θ ) f_{n}(x) = f_{n-1}(x) + T_n(x; \theta) fn(x)=fn1(x)+Tn(x;θ)
因此:损失函数:
L n ( ϕ ) = ∑ i l ( y i , f n ( x i ) ) + ∑ t n Ω ( T t ) = ∑ i l ( y i , f n ( x i ) ) + Ω ( f n ) + ∑ t n − 1 Ω ( T t ) = ∑ i l ( y i , f n − 1 ( x i ) + T n ( x ; θ ) ) + Ω ( T n ) + ∑ t n − 1 Ω ( T t ) \mathcal{L}_n(\phi)=\sum_i l(y_i, f_n(x_i)) + \sum_t^n \Omega(T_t) \\ =\sum_i l(y_i, f_n(x_i)) + \Omega(f_n) + \sum_t^{n-1} \Omega(T_t) \\ =\sum_i l(y_i, f_{n-1}(x_i)+T_n(x; \theta)) + \Omega(T_n) + \sum_t^{n-1} \Omega(T_t) Ln(ϕ)=il(yi,fn(xi))+tnΩ(Tt)=il(yi,fn(xi))+Ω(fn)+tn1Ω(Tt)=il(yi,fn1(xi)+Tn(x;θ))+Ω(Tn)+tn1Ω(Tt)
因为前n-1棵树已经训练完成,所以最后一项为常数,可以不用考虑。

对损失函数展开二阶泰勒:
L n ≃ ∑ i = 1 [ l ( y i , f n − 1 ( x i ) ) + g i T n ( x i ) + 1 2 h i T n 2 ( x i ) ] + Ω ( T n ) \mathcal{L}_n \simeq \sum_{i=1}\left[l\left(y_{i}, f_{n-1}(xi)\right)+g_{i} T_{n}\left(\mathrm{x}_{i}\right)+\frac{1}{2} h_{i} T_{n}^{2}\left(\mathrm{x}_{i}\right)\right]+\Omega\left(T_{n}\right) Lni=1[l(yi,fn1(xi))+giTn(xi)+21hiTn2(xi)]+Ω(Tn)
其中:
g i = ∂ l ( y i , f n − 1 ( x i ) ) ∂ f n − 1 ( x i ) h i = ∂ 2 l ( y i , f n − 1 ( x i ) ) ∂ 2 f n − 1 ( x i ) g_{i}={\partial \mathcal{l}(y_i, f_{n-1}(x_i)) \over \partial f_{n-1}(x_i)}\\ h_{i}={\partial^2 \mathcal{l}(y_i, f_{n-1}(x_i)) \over \partial^2 f_{n-1}(x_i)} gi=fn1(xi)l(yi,fn1(xi))hi=2fn1(xi)2l(yi,fn1(xi))
而且,因为前n-1棵树已经确定,所以损失也是确定的。损失中的第一项,已为常数,因此也可以消去。

此时,剩余的就是:
L n = ∑ i = 1 [ g i T n ( x i ) + 1 2 h i T n 2 ( x i ) ] + Ω ( T n ) \mathcal{L}_n = \sum_{i=1}\left[g_{i} T_{n}\left(\mathrm{x}_{i}\right)+\frac{1}{2} h_{i} T_{n}^{2}\left(\mathrm{x}_{i}\right)\right]+\Omega\left(T_{n}\right) Ln=i=1[giTn(xi)+21hiTn2(xi)]+Ω(Tn)
然后就是定义惩罚项,惩罚项表示的是模型的复杂度:
Ω ( f n ) = γ T + 1 2 λ ∑ j = 1 T w j 2 \Omega\left(f_{n}\right) = \gamma T+\frac{1}{2} \lambda \sum_{j=1}^{T} w_{j}^{2} Ω(fn)=γT+21λj=1Twj2
其中,T是决策树的叶子节点的个数。KaTeX parse error: Undefined control sequence: \w at position 1: \̲w̲_j^2是叶子节点j的输出。

综合一下后:
L n = ∑ i = 1 [ g i T n ( x i ) + 1 2 h i T n 2 ( x i ) ] + γ T + 1 2 λ ∑ j = 1 T w j 2 = ∑ j = 1 T [ ( ∑ i ∈ I j g i ) w q ( x i ) + 1 2 ( ∑ i ∈ I j h i + λ ) w j 2 ] + γ T \mathcal L_n = \sum_{i=1}\left[g_{i} T_{n}\left(\mathrm{x}_{i}\right)+\frac{1}{2} h_{i} T_{n}^{2}\left(\mathrm{x}_{i}\right)\right] + \gamma T+\frac{1}{2} \lambda \sum_{j=1}^{T} w_{j}^{2} \\ = \sum_{j=1}^{T}[(\sum _{i \in I_j}g_i)w_{q(x_i)} + {1 \over 2}(\sum _{i \in I_j} h_i + \lambda)w_j^2] + \gamma T Ln=i=1[giTn(xi)+21hiTn2(xi)]+γT+21λj=1Twj2=j=1T[(iIjgi)wq(xi)+21(iIjhi+λ)wj2]+γT
我们可以看出,这是一个关于 w w w的二次式。

然后,我们可以选用精确贪心算法,来选择分裂的节点。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值