机器学习——XGBoost


以下内容均为个人理解,如有错误,欢迎指出


什么是XGBoost

以下内容摘自一文读懂机器学习大杀器XGBoost原理

XGBoost是boosting算法的其中一种。Boosting算法的思想是将许多弱分类器集成在一起形成一个强分类器(为什么是弱分类器待会会解释)。因为XGBoost是一种提升树模型,所以它是将许多树模型集成在一起,形成一个很强的分类器。对于回归问题,所用到的树模型则是CART回归树模型。

本文讲解的是回归类的XGBoost

CART回归树模型可查看我之前的文章机器学习——决策树(ID3、C4.5、CART)


XGBoost的推导过程


XGBoost的目标函数

K个学习器的目标函数为
O b j = ∑ i = 1 n l ( y i , y ^ i ) + ∑ k = 1 K Ω ( f k ) Obj=\sum_{i=1}^nl(y_i,\hat y_i)+\sum_{k=1}^K \Omega(f_k) Obj=i=1nl(yi,y^i)+k=1KΩ(fk)
目标函数由损失函数和正则项构成, O b j = ∑ i = 1 n l ( y i , y ^ i ) Obj=\sum_{i=1}^nl(y_i,\hat y_i) Obj=i=1nl(yi,y^i)为损失函数,用于衡量预测值与真实值之间的差距, y i y_i yi为真实值, y ^ i \hat y_i y^i为预测值,依据自己的需要定义损失函数 l ( y i , y ^ i ) l(y_i,\hat y_i) l(yi,y^i),i表示第几个样本, ∑ k = 1 K Ω ( f k ) \sum_{k=1}^K \Omega(f_k) k=1KΩ(fk)为正则化项,正则化项包含两部分——叶子节点个数与叶子节点的值,即
Ω ( f k ) = γ T k + λ 1 2 ∣ ∣ w k ∣ ∣ 2 \Omega(f_k)=\gamma T_k+\lambda \frac{1}{2}||w_k||^2 Ω(fk)=γTk+λ21wk2
T k T_k Tk表示第k个学习器的叶子节点的个数, w k w_k wk表示第k个学习器的叶子节点的分数, γ 、 λ \gamma、\lambda γλ为事先指定的值


模型学习与训练误差

符号表

符号名含义
y ^ i ( i ) \hat y_i^{(i)} y^i(i)前i个学习器在第i个样本上的预测值之和
f i ( x i ) f_i(x_i) fi(xi)第i个学习器在第i个样本上的残差预测值
O b j ( t ) Obj^{(t)} Obj(t)加入第t个学习器后的目标函数值

XGBoost是集成学习的一种算法,从定义可知,其将许多弱分类器集成在了一起,它将多棵树的得分累加得到最终的预测得分,其过程如下:
在这里插入图片描述

第i个学习器拟合前i-1个学习器拟合的误差,例如二维坐标上的第i个样本为(1,9),前i-1个学习器的拟合值为7,则对于第i个样本,第i个学习器需要拟合的值为2,即对于第i个学习器,第i个样本变为(1,2),正是因为不断通过新的学习器拟合误差,所以XGBoost在训练样本上的误差会不断降低,基于此,我们将加入第t个学习器后的目标函数变为
O b j t = ∑ i = 1 n l ( y i , y ^ i ( t ) ) + ∑ k = 1 K Ω ( f k ) = ∑ i = 1 n l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) + Ω ( f t ) + c o n s t ( 式 1.0 ) \begin{aligned} Obj^{t}=&\sum_{i=1}^n l(y_i,\hat y_i^{(t)})+\sum_{k=1}^K \Omega(f_k) =& \sum_{i=1}^n l(y_i,\hat y_i^{(t-1)}+f_t(x_i))+\Omega(f_t)+const(式1.0) \end{aligned} Objt=i=1nl(yi,y^i(t))+k=1KΩ(fk)=i=1nl(yi,y^i(t1)+ft(xi))+Ω(ft)+const1.0
const为常数,由于前 t − 1 t-1 t1个学习器的正则项已知,故为常数, y i y_i yi表示第i个样本的真实值, y ^ i ( t − 1 ) \hat y_i^{(t-1)} y^i(t1)表示前 t − 1 t-1 t1个学习器在第i个样本上的预测值之和,对于 l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) l(y_i,\hat y_i^{(t-1)}+f_t(x_i)) l(yi,y^i(t1)+ft(xi)),由于 y i y_i yi是常数,在正式训练以前, y ^ i ( t − 1 ) \hat y_i^{(t-1)} y^i(t1)的值是一个变量,故我们可设 f ( y ^ i ( t − 1 ) ) = l ( y i , y ^ i ( t − 1 ) ) f(\hat y_i^{(t-1)})=l(y_i,\hat y_i^{(t-1)}) f(y^i(t1))=l(yi,y^i(t1)),若将 f t ( x i ) f_t(x_i) ft(xi)看为 Δ y ^ i ( t − 1 ) \Delta \hat y_i^{(t-1)} Δy^i(t1),则 l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) l(y_i,\hat y_i^{(t-1)}+f_t(x_i)) l(yi,y^i(t1)+ft(xi))可表示为 f ( y ^ i ( t − 1 ) + Δ y ^ i ( t − 1 ) ) f(\hat y_i^{(t-1)}+\Delta \hat y_i^{(t-1)}) f(y^i(t1)+Δy^i(t1)),我们对其进行二阶泰勒展开(泰勒展开请自行google,为什么进行泰勒展开原因后面解释),二阶泰勒展开式长这样 f ( x + Δ x ) ≈ f ( x ) + f ′ ( x ) Δ x + 1 2 f ′ ′ ( x ) Δ x 2 f(x+\Delta x)\approx f(x)+f'(x)\Delta x+\frac{1}{2}f''(x)\Delta x^2 f(x+Δx)f(x)+f(x)Δx+21f(x)Δx2
基于此,式1.0可表示为
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 k ) + c o n s t ( 式 1.1 ) Obj^{(t)}\approx \sum_{i=1}^n[l(y_i,\hat y_i^{t-1})+g_if_t(x_i)+\frac{1}{2}h_if_t^2(x_i)]+\Omega(f_k)+const (式1.1) Obj(t)i=1n[l(yi,y^it1)+gift(xi)+21hift2(xi)]+Ω(fk)+const(1.1)
其中
g i = ∂ l ( y i , y ^ i t − 1 ) ∂ y ^ i t − 1 h i = ∂ 2 l ( y i , y ^ i t − 1 ) ∂ ( y ^ i t − 1 ) 2 g_i=\frac{\partial l(y_i,\hat y_i^{t-1})}{\partial \hat y_i^{t-1}}\\ h_i=\frac{\partial^2 l(y_i,\hat y_i^{t-1})}{\partial (\hat y_i^{t-1})^2} gi=y^it1l(yi,y^it1)hi=(y^it1)22l(yi,y^it1)
一般情况下, l ( y i , y ^ i ) l(y_i,\hat y_i) l(yi,y^i)为凸函数(想一想均方误差),所以 h i > 0 h_i>0 hi>0,对于CART决策树,每一个样本最终会落到其中一个叶子节点上,我们用 w q ( x i ) 2 w_{q(x_i)}^2 wq(xi)2表示第i个样本所处的叶子,在此基础上,代入正则项,假设第t个决策树具有T个叶子节点,则式1.1可变为
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 k ) + c o n s 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 ( 式 1.2 ) \begin{aligned} Obj^{(t)}\approx & \sum_{i=1}^n[l(y_i,\hat y_i^{t-1})+g_if_t(x_i)+\frac{1}{2}h_if_t^2(x_i)]+\Omega(f_k)+const\\ = & \sum_{i=1}^n[g_iw_{q(x_i)}+\frac{1}{2}h_iw_{q(x_i)}^2]+\gamma T+\lambda \frac{1}{2}\sum_{j=1}^T w_j^2(式1.2) \end{aligned} Obj(t)=i=1n[l(yi,y^it1)+gift(xi)+21hift2(xi)]+Ω(fk)+consti=1n[giwq(xi)+21hiwq(xi)2]+γT+λ21j=1Twj21.2
∑ i = 1 n [ g i w q ( x i ) + 1 2 h i w q ( x i ) 2 ] \sum_{i=1}^n[g_iw_{q(x_i)}+\frac{1}{2}h_iw_{q(x_i)}^2] i=1n[giwq(xi)+21hiwq(xi)2]展开,将位于同一个叶子节点上的样本合并在一起,用 I j I_j Ij表示落在叶子点j上面样本的集合,则式1.2可变为
O b j ( t ) ≈ ∑ j = 1 T [ ∑ i ϵ I i g i w j + 1 2 ( ∑ i ϵ I j h i + λ ) w j 2 ] + γ T ( 式 1.3 ) Obj^{(t)}\approx \sum_{j=1}^T[ \sum_{i\epsilon I_i} g_i w_j+\frac{1}{2}(\sum_{i\epsilon I_j}h_i+\lambda)w_j^2]+\gamma T(式1.3) Obj(t)j=1T[iϵIigiwj+21(iϵIjhi+λ)wj2]+γT1.3
由于 h j > 0 , λ > 0 h_j>0,\lambda>0 hj>0λ>0,所以式1.3是一个凸函数,设 G j = ∑ i ϵ I j g i , H j = ∑ i ϵ I j h i G_j=\sum_{i\epsilon I_j}g_i,H_j=\sum_{i\epsilon I_j}h_i Gj=iϵIjgiHj=iϵIjhi,则式1.3可表示为
O b j ( t ) ≈ ∑ j = 1 T [ G j w j + 1 2 ( H j + λ ) w j 2 ] + γ T ( 式 1.4 ) Obj^{(t)}\approx \sum_{j=1}^T[G_jw_j+\frac{1}{2}(H_j+\lambda)w_j^2]+\gamma T(式1.4) Obj(t)j=1T[Gjwj+21(Hj+λ)wj2]+γT(1.4)
w j w_j wj求导置为0可得
w j ∗ = − G j H j + λ w_j^*=-\frac{G_j}{H_j+\lambda} wj=Hj+λGj
将其代入式1.4可得
O b j = − 1 2 ∑ j = 1 T G j 2 H j + λ + γ T ( 式 1.5 ) Obj=-\frac{1}{2}\sum_{j=1}^T\frac{G_j^2}{H_j+\lambda}+\gamma T(式1.5) Obj=21j=1THj+λGj2+γT(1.5)
现在回头看看我们为什么使用泰勒展开式进行推导,可以看到整个推导过程都未涉及到损失函数的具体值,只是假定损失函数为凸函数(一般都是凸函数),因此使用泰勒展开式推导的式1.5对于不同的损失函数具有通用性

对于式1.5的计算,我们来举一个例子,假定现在有五个样本,求加入第t个CART回归决策树决后式1.5的值,我们可以计算出每个样本在t-1个CART回归决策树上的 g i 、 h i g_i、h_i gihi,则有
在这里插入图片描述

到这里,我们把目标函数推导完了,也知道针对某一个新加入的具体的CART决策树后如何计算式1.5,那么接下来,CART决策树如何生成?XGBoost的作者给出了两种方案,此处只介绍其中一个,该方案使用贪心策略,与CART回归决策树的分裂方式类似,只是将基尼指数改为了下式
在这里插入图片描述
对于某个节点,每次选择能使Gain最高的特征与特征划分点(例如有样本在第j个特征上的取值为1,2,3,4,5,假设特征划分点为3.5,则第j个特征取值为1,2,3的样本被分到左子树,4,5被分到右子树)进行划分,为什么说这是贪心策略呢?

对于某一个节点来说,由于 ( G L + G H ) 2 H L + H R + λ 、 γ \frac{(G_L+G_H)^2}{H_L+H_R+\lambda}、\gamma HL+HR+λ(GL+GH)2γ是常数,Gain最大,意味着在所有划分方案中,此时对应的 − 1 2 [ G L 2 H L + λ + G R 2 H R + λ ] + γ -\frac{1}{2}[\frac{G_L^2}{H_L+\lambda}+\frac{G_R^2}{H_R+\lambda}]+\gamma 21[HL+λGL2+HR+λGR2]+γ最小,即对于某个节点,不同的分裂方式,式1.5有不同的取值,我们取其中的最小,并用其对应的方案进行分裂,最终满足某个临界条件,此时停止分裂,每个叶子节点的取值为 − G j H j + λ -\frac{G_j}{H_j+\lambda} Hj+λGj,那么临界条件是什么呢?这个方案比较多,具体而言

  1. 当引入的分裂带来的增益小于设定阀值的时候,我们可以忽略掉这个分裂,所以并不是每一次分裂loss function整体都会增加的,有点预剪枝的意思,阈值参数为(即正则项里叶子节点数T的系数);
  2. 当树达到最大深度时则停止建立决策树,设置一个超参数max_depth,避免树太深导致学习局部样本,从而过拟合;
  3. 当样本权重和小于设定阈值时则停止建树。什么意思呢,即涉及到一个超参数-最小的样本权重和min_child_weight,和GBM的 min_child_leaf 参数类似,但不完全一样。大意就是一个叶子节点样本太少了,也终止同样是防止过拟合;
  4. 貌似看到过有树的最大数量的…
    以上内容摘自通俗理解kaggle比赛大杀器xgboost
    这几个参数在Python的XGBoost包上也有,接下来,我们解释一下为什么XGBoost要使用弱分类器

XGBoost为什么要使用弱分类器

我们知道集成学习中的Bagging的基学习器是强学习器,Boosting的基学习器是弱学习器,同样是决策树,Bagging的决策树深度将大于Boosting,这一节,我们将从一定条件下对此进行简单解释,在此之前,先理解什么是机器学习中的偏差,什么是方差

偏差:模型的预测结果与真实结果之间的差距
方差:即模型的泛化能力,方差大的模型,对于不同的测试数据产生的结果差别较大,即对训练数据拟合过高,方差小的模型,对于不同测试数据产生的结果差别不大,一般来说,弱学习器的泛化能力较强,对于决策树来说,由于叶子节点较少,对于不同的测试数据,产生的结果自然差距不大,假设这个决策树只有五种结果(五个叶子),与具有几百种结果的决策树相比,对于不同测试数据产生的结果自然差距不大

在本节集成学习的讨论中,我们有以下假设

  1. 我们用期望来侧面反映偏差,若测试数据的期望与预测数据的期望近似,我们就认为模型的偏差小
  2. 基模型的权重 γ i \gamma_i γi、方差 δ i 2 \delta_i^2 δi2以及两两之间的相关系数 ρ i \rho_i ρi相等,分别用 γ 、 δ 2 、 ρ \gamma、\delta^2、\rho γδ2ρ表示
  3. Boosting的各个基学习器之间的相关系数 ρ = 1 \rho=1 ρ=1

由于Bagging与Boosting都是将基学习器用线性方式组成,假设有m个基础学习器,第i个学习器的输出用 f i f_i fi表示,第i个学习器的权重用 γ i \gamma_i γi表示,则集成学习器的输出 F F F可近似表示为
F = ∑ i = 1 m γ i f i F=\sum_{i=1}^m \gamma_if_i F=i=1mγifi
对于n分类任务,可以把一个基分类器的输出想成一个n维向量,每一个维度表示一个类别,样本属于该类别,则置为1,某则置为0,此时上式可看成是这些向量的加权和,之所以用近似,是因为分类任务最终的输出将是一个有n-1个维度取值为0,只有一个维度取值为1的n维向量,我们假定上式近似代表这个向量,即某个维度取值近似1,其余维度近似0的向量

推导过程将会用到以下公式
E ( A X ) = A E ( X ) E ( ∑ i = 1 n X i ) = ∑ i = 1 n E ( X i ) V a r ( ∑ i = 1 n X i ) = ∑ i = 1 n ∑ j = 1 n C o v ( X i , X j ) = ∑ i = 1 n V a r ( X i ) + 2 ∑ 1 ≤ i &lt; ≤ n C o v ( X i , X j ) V a r ( A X ) = A 2 V a r ( X ) 相 关 系 数 ρ = C o v ( X i , X j ) V a r ( X i ) V a r ( X j ) \begin{aligned} E(AX)=&amp;AE(X)\\ E(\sum_{i=1}^n X_i)=&amp;\sum_{i=1}^n E(X_i)\\ Var(\sum_{i=1}^n X_i)=&amp;\sum_{i=1}^n\sum_{j=1}^nCov(X_i,X_j)=\sum_{i=1}^n Var(X_i)+2\sum_{1\leq i&lt;\leq n}Cov(X_i,X_j)\\ Var(AX)=&amp;A^2Var(X)\\ 相关系数\rho=&amp;\frac{Cov(X_i,X_j)}{\sqrt {Var(X_i)} \sqrt {Var(X_j)}} \end{aligned} E(AX)=E(i=1nXi)=Var(i=1nXi)=Var(AX)=ρ=AE(X)i=1nE(Xi)i=1nj=1nCov(Xi,Xj)=i=1nVar(Xi)+21i<nCov(Xi,Xj)A2Var(X)Var(Xi) Var(Xj) Cov(Xi,Xj)

集成学习输出的期望与方差可表示为
E ( F ) = E ( ∑ i = 1 m γ i f i ) = γ ∑ i = 1 m E ( f i ) ( 式 2.1 ) V a r ( F ) = V a r ( ∑ i = 1 m γ i f i ) = ∑ i = 1 m V a r ( γ i f i ) + ∑ i ̸ = j γ i γ j C o v ( X i , X j ) = ∑ i = 1 m γ i 2 V a r ( f i ) + ∑ i ̸ = j γ i γ j C o v ( X i , X j ) = m γ 2 δ 2 + ( m 2 − m ) γ 2 ρ δ 2 ( 对 相 关 系 数 的 计 算 公 式 进 行 变 形 , 自 己 与 自 己 的 相 关 系 数 为 1 ) = m 2 γ 2 δ 2 ρ + m γ 2 δ 2 ( 1 − ρ ) ( 式 2.2 ) \begin{aligned} E(F)=&amp;E(\sum_{i=1}^m \gamma_i f_i)\\ =&amp;\gamma \sum_{i=1}^m E(f_i)(式2.1)\\ Var(F)=&amp;Var(\sum_{i=1}^m \gamma_i f_i)\\ =&amp;\sum_{i=1}^m Var(\gamma_i f_i)+\sum_{i\not=j}\gamma_i \gamma_jCov(X_i,X_j)\\ =&amp;\sum_{i=1}^m \gamma_i^2Var(f_i)+\sum_{i\not=j}\gamma_i \gamma_jCov(X_i,X_j)\\ =&amp;m\gamma^2 \delta^2+(m^2-m)\gamma^2 \rho \delta^2(对相关系数的计算公式进行变形,自己与自己的相关系数为1)\\ =&amp;m^2\gamma^2\delta^2\rho+m\gamma^2\delta^2(1-\rho)(式2.2) \end{aligned} E(F)==Var(F)=====E(i=1mγifi)γi=1mE(fi)2.1Var(i=1mγifi)i=1mVar(γifi)+i̸=jγiγjCov(Xi,Xj)i=1mγi2Var(fi)+i̸=jγiγjCov(Xi,Xj)mγ2δ2+(m2m)γ2ρδ2(1)m2γ2δ2ρ+mγ2δ2(1ρ)2.2


Bagging的偏差与方差

对于Bagging,我们假定使用均值赋权法(即m个学习器的权重为 1 m \frac{1}{m} m1),则期望与方差为
E ( F ) = γ ∑ i = 1 m E ( f i ) = 1 m ∗ m ∗ E ( f i ) = E ( f i ) V a r ( F ) = m 2 1 m 2 δ 2 ρ + m 1 m 2 δ 2 ( 1 − ρ ) = δ 2 ρ + δ 2 ( 1 − ρ ) m \begin{aligned} E(F)=&amp;\gamma \sum_{i=1}^m E(f_i)\\ =&amp;\frac{1}{m}*m*E(f_i)\\ =&amp;E(f_i)\\ Var(F)=&amp;m^2\frac{1}{m^2}\delta^2\rho+m \frac{1}{m^2} \delta^2 (1-\rho)\\ =&amp; \delta^2 \rho+\frac{\delta^2(1-\rho)}{m} \end{aligned} E(F)===Var(F)==γi=1mE(fi)m1mE(fi)E(fi)m2m21δ2ρ+mm21δ2(1ρ)δ2ρ+mδ2(1ρ)
由此可见,Bagging模型的期望与基学习器类似,因此,基学习器常常为强学习器,此时Bagging的偏差将较小,为了降低方差,我们常常会增加基学习器的个数m


Boosting的偏差与方差

Boosting的基学习器在同一训练集上进行训练,并且基学习器之间是串型结构,对于一个训练样本,某个学习器的输出越高,意味着位于其后的学习器的输出越低,各个学习器之间的线性相关性较强,而Bagging的基学习器在具有重叠的不同训练集上进行训练,并且基学习器之间是并型结构,对于一个训练样本,某个学习器的输出越高,并不意味着其他学习器的输出越低,各个学习器之间的线性相关性较弱,而 ρ \rho ρ用于度量两个维度之间的线性相关性,因此,我们假定Boosting的 ρ = 1 \rho=1 ρ=1,则有
E ( F ) = γ ∗ ∑ i = 1 m E ( f i ) V a r ( F ) = m 2 ∗ γ 2 ∗ δ 2 \begin{aligned} E(F)=&amp;\gamma*\sum_{i=1}^mE(f_i)\\ Var(F)=&amp;m^2*\gamma^2*\delta^2 \end{aligned} E(F)=Var(F)=γi=1mE(fi)m2γ2δ2
由此可见,Boosting的方差与基学习器的方差与个数直接挂钩,而期望为基学习器的期望之和,为了让Boosting的期望尽可能趋近于训练数据的期望,我们常常增加学习器的个数,但是,这会导致模型的方差不断上升,为了缓和上升的趋势,我们常使用弱学习器,基于此。XGBoost也是弱学习器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值