XGBoost + Boosting 原理简介

本文深入解析XGBoost的工作原理,从Boosting方法出发,详细介绍XGBoost的目标函数、模型参数化、寻找最佳分裂点等核心内容。适用于有一定机器学习基础的读者。

XGBoost原理简介

1. 背景

今天听了贪心学院主办,李文哲老师主讲的《XGBoost的技术剖析》直播,让我对XGB的原理有了一些了解。于是我想写一篇笔记整理一下听课的内容。

老师讲得挺通俗易懂的,不过由于XGB本身具有一定的复杂性,要看懂这篇笔记需要有如下的背景知识:

  1. 决策树的原理
  2. 泰勒级数
  3. 损失函数
  4. 惩罚函数

如果对这些概念不太了解,推荐阅读复旦大学邱锡鹏老师的开源书《神经网络与深度学习》还有人民邮电出版社的《机器学习实战》,泰勒级数可以参考高数课本和网络资料。

2. Boosting

XGBoost 这个名字就能看出来,这个模型使用了 Boosting 的方法,那么我们就来先了解一下 Boosting 它是个啥玩意儿。

Bagging vs Boosting

Figure 1. Bagging vs Boosting \text{Figure 1. Bagging vs Boosting} Figure 1. Bagging vs Boosting

老师的PPT中对比了 BaggingBoosting 两种常用的集成学习方法。

  • Bagging:利用多个过拟合的弱学习器来获得更好的效果。典型的算法有随机森林。

  • Boosting:利用多个欠拟合的弱学习器来获得更好的效果。典型的算法有GBDT/GBRT,Adaboost,XGBoost和LightGBM。

Boosting 本身在不同算法中的具体应用也不完全相同,而从 XGBoost 1论文 中我们能够了解到,它主要借鉴了 GBDTBoosting 方法

为了加深对 Boosting 的了解,我把 GBDT 2论文也找出来看了一下。

2.1. 建立映射

首先,我们通过公式 ( 1 ) (1) (1)建立从 x \mathbf{x} x y y y 的映射。

y ^ = F ( x ; { β m , a m } 1 M ) = ∑ m = 1 M β m h ( x ; a m ) (1) \widehat{y} = F\left(\mathbf{x} ;\left\{\beta_{m}, \mathbf{a}_{m}\right\}_{1}^{M}\right)=\sum_{m=1}^{M} \beta_{m} h\left(\mathbf{x} ; \mathbf{a}_{m}\right) \tag{1} y =F(x;{ βm,am}1M)=m=1Mβmh(x;am)(1)

这里的 x \mathbf{x} x a m \mathbf{a}_{m} am 用粗体显示,表示它们都是向量, y ^ \widehat{y} y 表示模型的预测值。

公式 ( 1 ) (1) (1)中的 h ( x ; a m ) h\left(\mathbf{x} ; \mathbf{a}_{m}\right) h(x;am) 表示一个个弱分类器, a m \mathbf{a}_{m} am 是弱分类器的参数, β m \beta_m βm 是其权重, { β m , a m } 1 M \left\{\beta_{m}, \mathbf{a}_{m}\right\}_{1}^{M} { βm,am}1M a m \mathbf{a}_{m} am β m \beta_m βm M M M 个组合。 M M M表示弱分类器的数量。

公式 ( 1 ) (1) (1)表示 GBDT 是通过对多个弱分类器结果进行线性加权求和从而求出最终结果的。

2.2. 计算参数

建立了 x \mathbf{x} x y y y 的映射之后,我们就需要考虑如何去计算函数中的参数。

( β m , a m ) = arg ⁡ min ⁡ β , a ∑ i = 1 N L ( y i , F m − 1 ( x i ) + β h ( x i ; a ) ) (2) \left(\beta_{m}, \mathbf{a}_{m}\right)=\arg \min _{\beta, \mathbf{a}} \sum_{i=1}^{N} L\left(y_{i}, F_{m-1}\left(\mathbf{x}_{i}\right)+\beta h\left(\mathbf{x}_{i} ; \mathbf{a}\right)\right) \tag{2} (βm,am)=argβ,amini=1NL(yi,Fm1(xi)+βh(xi;a))(2)

公式 ( 2 ) (2) (2) 中, arg ⁡ min ⁡ β , a \displaystyle\arg \min _{\beta, \mathbf{a}} argβ,amin 表示使其右边的表达式最小的 ( β , a ) (\beta, \mathbf{a}) (β,a) 组合, L ( y i , y i ^ ) L(y_i, \hat{y_i}) L(yi,yi^) 为损失函数。

公式 ( 2 ) (2) (2) 说明参数 ( β m , a m ) \left(\beta_{m}, \mathbf{a}_{m}\right) (βm,am)是通过使得损失函数最小化计算出来的,具体如何计算就取决于我们使用什么具体的损失函数和优化器了。

同时, 我们还可以推出公式 ( 3 ) (3) (3)

F m ( x ) = F m − 1 ( x ) + β m h ( x ; a m ) (3) F_{m}(\mathbf{x})=F_{m-1}(\mathbf{x})+\beta_{m} h\left(\mathbf{x} ; \mathbf{a}_{m}\right) \tag{3} Fm(x)=Fm1(x)+βmh(x;am)(3)

公式 ( 3 ) (3) (3) F m ( x ) F_{m}(\mathbf{x}) Fm(x) 是训练完 m m m 个弱分类器以后,模型的输出结果。

公式 ( 3 ) (3) (3) 说明 GBDT 在训练每第 m m m 个弱分类器时,我们需要先将前 m − 1 m-1 m1 个弱分类器的预测结果求和,从而获得一个新的预测结果,在此基础上对第 m m m 个弱分类器进行训练和预测。即新的弱分类器是在已有模型的残差上进行训练的。

可理解为如下公式。

β m h ( x ; a m ) → ( y i − ∑ k = 1 m − 1 β k h ( x ; a k ) ) (4) \beta_{m} h\left(\mathbf{x} ; \mathbf{a}_{m}\right) \to (y_i - \sum_{k=1}^{m-1} \beta_{k} h\left(\mathbf{x} ; \mathbf{a}_{k}\right)) \tag{4} βmh(x;am)(yik=1m1βkh(x;ak))(4)

即第 m m m 个弱分类器的训练目标是输出趋近于 y i y_i yi 和 前 m − 1 m - 1 m1 个弱分类器的结果之和的差值。

再结合老师PPT中的例子,应该就能够很好地理解 Boosting 的作用。

Boost Tree

Figure 2. Boost Tree \text{Figure 2. Boost Tree} Figure 2. Boost Tree

Model Predict

Figure 3. Model Predict \text{Figure 3. Model Predict} Figure 3. Model Predict

3. XGBoost的目标函数

了解了 Boosting 之后,我们就可以开始学习 XGBoost 了,首先从它的目标函数开始分析。

Object Function

Figure 4. Object Function \text{Figure 4. Object Function} Figure 4. Object Function

我们一般使用树模型来作为弱分类器,假设有 K K K 颗树,对第 i i i 个输入,它们的预测值为 y ^ i \widehat{y}_i y

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值