Task 06(XGBoost, LightGBM

本文探讨了梯度提升决策树(GBDT)与XGBoost的关系和区别,包括它们的目标损失函数、近似方法和分裂依据。GBDT通过梯度下降更新参数,而XGBoost引入了正则项并使用一阶和二阶导数进行近似。XGBoost的损失函数通常要求二阶导数为正,以确保优化过程的稳定性。此外,还提到了LightGBM的两种优化技术,GOSS减少了小梯度样本的处理,EFB通过特征绑定实现降维。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Task 08

侧边栏练习

【练习7】请写出 L ( m ) ( F i ( m ) ) L^{(m)}(F_i^{(m)}) L(m)(Fi(m)) F i ( m ) = F i ( m − 1 ) F_i^{(m)} = F_i^{(m-1)} Fi(m)=Fi(m1)处的二阶展开。
L ( m ) ( F i ( m ) ) = γ T + 1 2 λ ∑ j = 1 T w j 2 + ∑ i = 1 N [ ∂ L ∂ h i ∣ h i = 0 h i + ∂ 2 L ∂ h i 2 ∣ h i = 0 h i 2 ] + c o n s t a n t = γ T + 1 2 λ ∑ j = 1 T w j 2 + ∑ i = 1 N [ ∂ L ∂ F i ( m − 1 ) ∣ F i ( m ) = F i ( m − 1 ) ( F i ( m ) − F i ( m − 1 ) ) + ∂ 2 L ∂ ( F i ( m − 1 ) ) 2 ∣ F i ( m ) = F i ( m − 1 ) ( F i ( m ) − F i ( m − 1 ) ) 2 ] + c o n s t a n t \begin{aligned} L^{(m)}(F_i^{(m)}) &= \gamma T + \cfrac{1}{2} \lambda \sum_{j=1}^T w_j^2 + \sum_{i=1}^N [\cfrac{\partial L}{\partial h_i}|_{h_i=0}h_i + \cfrac{\partial^2 L}{\partial h_i^2}|_{h_i=0} h_i^2] + constant \\ &= \gamma T + \cfrac{1}{2} \lambda \sum_{j=1}^T w_j^2 + \sum_{i=1}^N [\cfrac{\partial L}{\partial F_i^{(m-1)}}|_{F_i^{(m)} = F_i^{(m-1)}}(F_i^{(m)} - F_i^{(m-1)}) + \cfrac{\partial^2 L}{\partial (F_i^{(m-1)})^2}|_{F_i^{(m)} = F_i^{(m-1)}} (F_i^{(m)} - F_i^{(m-1)})^2 ] + constant \end{aligned} L(m)(Fi(m))=γT+21λj=1Twj2+i=1N[hiLhi=0hi+hi22Lhi=0hi2]+constant=γT+21λj=1Twj2+i=1N[Fi(m1)LFi(m)=Fi(m1)(Fi(m)Fi(m1))+(Fi(m1))22LFi(m)=Fi(m1)(Fi(m)Fi(m1))2]+constant

其中constant为 ∑ i = 1 N L ( y i , F i ( m − 1 ) ) \sum_{i=1}^N L(y_i, F_i^{(m-1)}) i=1NL(yi,Fi(m1))​.

【练习8】试说明不将损失函数展开至更高阶的原因。

展开到更高,所需要的计算量也就会更大,为了平衡准确率以及计算量,我们一般选择展开到二阶。

【练习9】请写出平方损失下的近似损失。

假设损失函数为:
L ( y , y ^ ) = 1 2 ∑ i = 1 N ( y i − y ^ i ) 2 L(y, \hat{y}) = \cfrac{1}{2} \sum_{i=1}^N (y_i - \hat{y}_i)^2 L(y,y^)=21i=1N(yiy^i)2

h i = y i − y ^ i h_i = y_i - \hat{y}_i hi=yiy^i​, 则损失函数 L ( y , y ^ ) L(y, \hat{y}) L(y,y^)​的一节导数, 二阶导数分别为 p i = h i p_i = h_i pi=hi​​, q i = 1 q_i = 1 qi=1

L ~ ( m ) ( m ) = γ T + 1 2 ∑ j = 1 T w j 2 + ∑ i = 1 N [ p i h i + 1 2 q i h i 2 ] = γ T + 1 2 λ ∑ j = 1 T w j 2 + ∑ i = 1 N [ h i 2 + 1 2 h i 2 ] = γ T + 1 2 λ ∑ j = 1 T w j 2 + 3 2 ∑ i = 1 N h i 2 = γ T + 1 2 λ ∑ j = 1 T w j 2 + 3 2 ∑ j = 1 T [ ( ∑ i ∈ I j 1 ) w i 2 ] = γ T + 1 2 ∑ j = 1 T [ ( λ + 3 ∑ i ∈ I j 1 ) w i 2 ] \begin{aligned} \tilde{L}^{(m)}(\textbf{m}) &= \gamma T + \cfrac{1}{2} \sum_{j=1}^T w_j^2 + \sum_{i=1}^N [p_i h_i + \cfrac{1}{2} q_i h_i^2] \\ &= \gamma T + \cfrac{1}{2} \lambda \sum_{j=1}^T w_j^2 + \sum_{i=1}^N[h_i^2 + \cfrac{1}{2} h_i^2] \\ &= \gamma T + \cfrac{1}{2} \lambda \sum_{j=1}^T w_j^2 + \cfrac{3}{2} \sum_{i=1}^Nh_i^2 \\ &= \gamma T + \cfrac{1}{2} \lambda \sum_{j=1}^T w_j^2 + \cfrac{3}{2} \sum_{j=1}^T[(\sum_{i \in I_j} 1) w_i^2] \\ &= \gamma T + \cfrac{1}{2} \sum_{j=1}^T [(\lambda +3 \sum_{i \in I_j} 1)w_i^2] \end{aligned} L~(m)(m)=γT+21j=1Twj2+i=1N[pihi+21qihi2]=γT+21λj=1Twj2+i=1N[hi2+21hi2]=γT+21λj=1Twj2+23i=1Nhi2=γT+21λj=1Twj2+23j=1T[(iIj1)wi2]=γT+21j=1T[(λ+3iIj1)wi2]

【练习10】在下列的三个损失函数 L ( y , y ^ ) L(y, \hat{y}) L(y,y^)中,请选出一个不应作为XGBoost损失的函数并说明理由。

  • Root Absolute Error: ∣ y − y ^ ∣ \sqrt{|y - \hat{y}|} yy^
  • Squared Log Error: 1 2 [ log ⁡ ( y + 1 y ^ + 1 ) ] 2 \cfrac{1}{2}[\log (\cfrac{y + 1}{\hat{y} + 1})]^2 21[log(y^+1y+1)]2
  • Pseudo Huber Error: δ 2 ( 1 + ( y − y ^ δ ) 2 − 1 ) \delta^2(\sqrt{1 + (\cfrac{y - \hat{y}}{\delta})^2} - 1) δ2(1+(δyy^)2 1)

第二个。因为第二个的损失函数关于 y − y ^ y - \hat{y} yy^​的二阶导数是关于 y ^ \hat{y} y^的函数,而是说存在有零点的。

【练习11】请求出顶点最大度(即最多邻居数量)为 d d d​的无向图在最差和最好情况下需要多少种着色数,同时请构造对应的例子。

不会无向图… 学了来补

【练习12】在最差情况下LightGBM会生成几族互斥特征?这种情况的发生需要满足什么条件?
也不会。。。

知识回顾

1\ GBDT和梯度下降方法有什么联系?

GBDT 的参数的更新使用的时梯度下降法。
对损失函数关于参数求导,得到梯度,利用梯度下降法的更新公式来更新参数,使得损失函数朝着梯度的方向最速下降。

2、 请叙述GBDT用于分类问题的算法流程。

(a) 建立M颗决策树(迭代M次
(b) 表示对函数估计值F(x) 进行losgistic变换, 进行softmax归一化
© for m in 1… M
1、计算属于第k类的概率为 e F k i ∑ c = 1 K e F c i \cfrac{e^{F_{ki}}}{\sum_{c=1}^K e^{F_{ci}}} c=1KeFcieFki,
2、令 y i = [ y 1 i , ⋯   , y K i ] \textbf{y}_i = [y_{1i}, \cdots, y_{Ki}] yi=[y1i,,yKi]为第i个样本的类别独热编码,记 F i = [ F 1 i , ⋯   , F K i ] \textbf{F}_i = [F_{1i}, \cdots, F_{Ki}] Fi=[F1i,,FKi]
3、对每个样本计算损失:
L ( y i , F i ) = − ∑ c = 1 K y c i log ⁡ e F c i ∑ c ~ = 1 K e F c ~ i L(\textbf{y}_i, \textbf{F}_i) = - \sum_{c=1}^K y_{ci} \log \cfrac{e^{F_{ci}}}{\sum_{\tilde{c}=1^K e^{F_{\tilde{c}i}}}} L(yi,Fi)=c=1Kycilogc~=1KeFc~ieFci
​ 4、对 F i ∗ ( m ) F_i^{*(m)} Fi(m)进行梯度更新

5、 $h_i = F_i^{(m)} - F_i^{(m-1)}$,最后更新的学习学习器为$F_i^{(m-1)} + \eta h_i^{*(m)}$为更新之后的学习器​

(d) 将 F i ( M ) F_i^{(M)} Fi(M)作为最终的分类器输出

3、 XGBoost和GBDT树有何异同?(可从目标损失、近似方法、分裂依据等方面考虑)

目标损失:
GBDT: 使用的是预测值和真实值之间的差距度量的损失函数
G ( w ) = ∑ i = 1 N L ( y i , F i ( m ) ) = ∑ i = 1 N L ( y i , F i ( m − 1 ) + w i ) \begin{aligned} G(\textbf{w}) &= \sum_{i=1}^N L(y_i, F_i^{(m)}) \\ &= \sum_{i=1}^N L(y_i, F_i^{(m-1)} + w_i) \end{aligned} G(w)=i=1NL(yi,Fi(m))=i=1NL(yi,Fi(m1)+wi)
其中 w i w_i wi​为我们要拟合的一颗树,这棵树使得 F i ( m − 1 ) + h m ( X i ) F_i^{(m-1)} + h_m(X_i) Fi(m1)+hm(Xi)​与 y i y_i yi之间的损失尽可能小。

XGBoost: 损失函数 + 正则项
L ( m ) = γ T + 1 2 λ ∑ j = 1 T w j 2 + ∑ i = 1 N L ( y i , F i ( m ) ) L^{(m)} = \gamma T + \cfrac{1}{2} \lambda \sum_{j=1}^T w_j^2 + \sum_{i=1}^N L(y_i, F_i^{(m)}) L(m)=γT+21λj=1Twj2+i=1NL(yi,Fi(m))

其中损失函数 L ( y i , F i ( m ) ) L(y_i, F_i^{(m)}) L(yi,Fi(m))一般为我们定义的一个二阶导数恒为正的损失函数.

近似方法:
GBDT: 使用梯度下降来更新参数,即利用泰勒展开式的一阶导数来对目标函数进行拟合。
XGBoost: 使用一阶导数和二阶导数来对目标函数进行拟合,其展开式为:
$$
\begin{aligned}
L^{(m)}(\textbf{h}) &=
\gamma T + \cfrac{1}{2} \lambda \sum_{j=1}^T w_j^2

  • \sum_{i=1}^N[
    \cfrac{\partial L}{\partial h_i} |_{hi=0} h_i
  • \cfrac{1}{2} \cfrac{\partial^2L}{\partial h_i^2} |_{h_i=0} + constant
    ]
    \end{aligned}
    $$

其中 c o n s t a n t = ∑ i = 1 N L ( y i , F i ( m − 1 ) ) constant = \sum_{i=1}^N L(y_i, F_i^{(m-1)}) constant=i=1NL(yi,Fi(m1))

分裂依据:

GBDT: 按照信息增益或者CART树的gini指数来进行分裂
XGBoost: 将损失函数作为信息增益的另一种表现形式,对所有的特征,分别找到对应的分裂节点,将使得损失函数下降最大的分裂节点,以及分裂节点所对应的特征,作为我们用于分裂的特征和节点。

4\ 请叙述LightGBM中GOSS和EFB的作用及算法流程。

GOSS作用:
减少只具有小梯度的数据实例,便于在计算信息增益的时候, 只利用高梯度的数据. 这比XGBoost遍历所有特征值少了不少时间和空间上的开销.

GOSS算法流程
(a) 输入训练数据, 迭代的次数, 对大梯度数据采样的比例a,对小梯度数据采样的比例b, 定义损失函数
(b) i代表迭代次数, 从1 到 d开始迭代
对训练样本的梯度的绝对值进行降序排序
对降序后的结果选取钱a * 100%的样本生成一个大梯度样本点的子集
对剩下的集合(1-a) * 100% 的样本,随机的选取 1 − a b \cfrac{1-a}{b} b1a​ 个样本点,生成一个小梯度样本点的集合
将大梯度样本和采样的梯度样本合并
将小梯度样本乘上一个权重系数
使用上述的采样样本,学习一个新的学习器
直到 步骤达到d,或者收敛为止
EFB作用:
将许多互斥的特征绑定为一个特征, 这样达到了降维的目的.

EFB算法流程:
(a) 构造一个加权无向图,顶点是特征,变有权重,其权重与两个特征见冲突相关
(b) 根据节点的度进行降序排序,度越大,与其它特征的冲突越大
© 遍历每个特征,将它分配给先右的特征组合,或者构建一个新的特征组合, 来使得总体冲突最小


最后,代码我又没有写…我之后补上

### LightGBMXGBoost 的异同点及性能对比 #### 不同点 1. **树增长策略** XGBoost采用的是Level-wise(层序遍历)的树增长方式,即逐层构建决策树。这种方式的优点是实现简单,但在大规模数据场景下可能会带来较高的时间开销[^2]。相比之下,LightGBM采用了Leaf-wise(叶子优先)的增长策略,每次选择分裂增益最大的叶节点进行分裂,这种策略可以更早地降低损失函数值,从而减少不必要的计算量[^4]。 2. **内存使用和效率** LightGBM通过对直方图算法的进一步优化以及引入了Gradient-based One-Side Sampling (GOSS) 和 Exclusive Feature Bundling (EFB),显著降低了内存消耗并提高了训练速度[^4]。而XGBoost虽然也支持直方图算法,但默认情况下并未完全优化到这一程度,因此在某些特定的大规模数据集上,LightGBM表现出更高的效率[^3]。 3. **特征预处理和支持** XGBoost内置了一些针对稀疏矩阵的支持机制,并能很好地处理缺失值,默认会将缺失值分配给最优方向。然而,LightGBM通过EFB技术实现了对独占特征的有效捆绑,减少了特征维度,进而提升了模型运行效率[^4]。 4. **分布式计算能力** 虽然两者都具备良好的多核并行计算功能[XGBoost],但LightGBM还特别强调了其高效的分布式训练框架设计,使其更适合超大规模的数据环境下的应用需求[^4]。 #### 相同点 1. **基础理论一致** 无论是XGBoost还是LightGBM,它们的基础都是基于梯度提升(Gradient Boosting)的思想来逐步建立弱分类器组合成强预测模型[^1]。 2. **目标函数形式相似** 它们的目标函数均包含了损失项与正则化项两部分结构,只是具体表达式略有差异而已。 3. **适用范围广泛** 这两种工具都可以应用于回归、分类等多种类型的机器学习任务当中,并且提供了丰富的调参选项供用户灵活调整以适应不同的业务场景需求[^3]。 ```python import lightgbm as lgb from sklearn.datasets import load_boston data = load_boston() train_data = lgb.Dataset(data.data, label=data.target) params = { 'task': 'train', 'boosting_type': 'gbdt', 'objective': 'regression', 'metric': {'l2'}, } bst = lgb.train(params, train_data, num_boost_round=10) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值