机器学习总结二:boosting之GBDT、XGBT原理公式推导

本文详细介绍了Boosting方法中的决策树、GBDT和XGBoost原理,包括损失函数计算、模型构建流程、泰勒展开优化以及XGBoost中正则化的运用。通过实例和公式推导,深入剖析了如何通过负梯度和结构分数求解最优模型。

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

一、Bagging之决策树、随机森林原理与案例

二、boosting之GBDT、XGBT原理推导与案例

三、SVM原理推导与案例

四、逻辑回归与反欺诈检测案例

五、聚类之K-means


Boosting

1. 简介

  • 通过在数据上构建多个弱评估器,汇总所有弱评估器的建模结果,以取得比单个模型更好的分类或回归表现。
  • 加法模型,前向分步计算学习。

2. 基本元素

  • 弱评估器f(x):一般为决策树(cart树),不同boosting算法建立新树的过程不同

  • 损失函数L(x,y):衡量模型预测结果与真实结果的差异

  • 集成结果H(x):汇总所用弱评估器的结果进行输出

3. 算法提升流程

    1. 依据上一个弱评估器集成的结果,计算损失函数L(x,y)

L ( y , ∑ k = 1 t − 1 f k ( x ) ) L(y,\sum_{k=1}^{t-1} f_k(x)) L(y,k=1t1fk(x))

    1. 使用L(x,y)自适应的影响下一个弱评估器的构建

f k = t ( x ) f_{k=t}(x) fk=t(x)

    1. 更新弱评估器集成的结果

H ( x ) = ∑ k = 1 t − 1 f k ( x ) + f ( x ) t H(x)=\sum_{k=1}^{t-1} f_k(x)+f(x)_t H(x)=k=1t1fk(x)+f(x)t

注意:

  • 各种boosting算法的不同之处在于使用不同的方式影响后续评估器的构建

4. GBDT原理

  • 4.1 优化目标:新建的树使目标函数越来越小
  • 4.2 泰勒一阶展开式

f ( x + △ x ) ≈ f ( x ) + f ′ ( x ) △ x f(x+\triangle x) \approx f(x)+f'(x)\triangle x f(x+x)f(x)+f(x)x

  • 4.3 GBDT目标函数求解过程

    1. 设定目标函数
      o b j = ∑ i = 1 n L ( y i , y i ^ ) obj =\sum_{i=1}^nL(y_i,\widehat{y_i}) obj=i=1nL(yi,yi )

      n : 所有样本的个数; i : 代表每个样本 n: 所有样本的个数;i:代表每个样本 n:所有样本的个数;i:代表每个样本

    2. 代入树模型
      o b j = ∑ i = 1 n L ( y i , f ( x i ) t − 1 + f ( x i ) t ) obj =\sum_{i=1}^nL(y_i,f(x_i)_{t-1}+f(x_i)_t) obj=i=1nL(yi,f(xi)t1+f(xi)t)

      f ( x i ) t − 1 : 代表前 t − 1 棵树的结果; f ( x i ) t : 代表本轮要新建的树模型 f(x_i)_{t-1}:代表前t-1棵树的结果;f(x_i)_t :代表本轮要新建的树模型 f(xi)t1:代表前t1棵树的结果;f(xi)t:代表本轮要新建的树模型

    3. 将目标函数进行一阶泰勒展开
      o b j ≈ ∑ i = 1 n [ L ( y i , f ( x i ) t − 1 ) + δ ′ L ( y i , f ( x i ) t − 1 ) δ f ( x i ) t − 1 ∗ f ( x i ) t ] obj \approx \sum_{i=1}^n[L(y_i,f(x_i)_{t-1})+ \frac{\delta'L(y_i,f(x_i)_{t-1})}{\delta f(x_i)_{t-1}}*f(x_i)_t] obji=1n[L(yi,f(xi)t1)+δf(xi)t1δL(yi,f(xi)t1)f(xi)t]

      f ( x i ) t : 相当于泰勒泰勒展开式中的 △ x f(x_i)_t:相当于泰勒泰勒展开式中的\triangle x f(xi)t:相当于泰勒泰勒展开式中的x

    4. 因为L(y_i,f(x_i)_{t-1})是定值,新树要使obj减小的必要条件为:
      δ ′ L ( y i , f ( x i ) t − 1 ) δ f ( x i ) t − 1 ∗ f ( x i ) t ≤ 0 \frac{\delta'L(y_i,f(x_i)_{t-1})}{\delta f(x_i)_{t-1}}*f(x_i)_t \leq 0 δf(xi)t1δL(yi,f(xi)t1)f(xi)t0

    5. 上述不等式成立的充分非必要条件为:
      f ( x i ) t = − δ ′ L ( y i , f ( x i ) t − 1 ) δ f ( x i ) t − 1 f(x_i)_t = -\frac{\delta'L(y_i,f(x_i)_{t-1})}{\delta f(x_i)_{t-1}} f(xi)t=δf(xi)t1δL(yi,f(xi)t1)

      即建立的新树拟合结果为前 t − 1 轮预测结果对应的目标函数的负梯度 即建立的新树拟合结果为前t-1轮预测结果对应的目标函数的负梯度 即建立的新树拟合结果为前t1轮预测结果对应的目标函数的负梯度

    6. 最终新树模型生成要求

      • 新树模型拟合上一轮结果的负梯度

      • 使用基尼系数或信息熵,进行最佳分裂点

5. XGBT原理

  • 5.1 优化目标:新建的树使目标函数越来越小
  • 5.2 泰勒二阶展开式

f ( x + △ x ) ≈ f ( x ) + f ′ ( x ) △ x + 1 2 f ′ ′ ( x ) △ x 2 f(x+\triangle x) \approx f(x)+f'(x)\triangle x + \frac{1}{2} f''(x)\triangle x^2 f(x+x)f(x)+f(x)x+21f′′(x)x2

  • 5.3 XGBT目标函数求解过程

    1. 设定目标函数
      o b j = ∑ i = 1 n L ( y i , y i ^ ) + ∑ k = 1 t Ω ( f k ) obj =\sum_{i=1}^nL(y_i,\widehat{y_i})+\sum_{k=1}^t\Omega(f_k) obj=i=1nL(yi,yi )+k=1tΩ(fk)

      i : 代表每个样本; n : 代表样本个数; k : 代表每一个树模型 Ω :代表第 K 颗树的复杂度 i:代表每个样本; n:代表样本个数; k:代表每一个树模型 Ω:代表第K颗树的复杂度 i:代表每个样本;n:代表样本个数;k:代表每一个树模型Ω:代表第K颗树的复杂度

    2. 代入树模型f(x)
      o b j = ∑ i = 1 n L ( y i , f ( x i ) t − 1 + f ( x i ) t ) + ∑ k = 1 t − 1 Ω ( f k ) + Ω f t obj =\sum_{i=1}^nL(y_i,f(x_i)_{t-1}+f(x_i)_t)+\sum_{k=1}^{t-1}\Omega(f_k)+\Omega f_t obj=i=1nL(yi,f(xi)t1+f(xi)t)+k=1t1Ω(fk)+Ωft

    3. 使用二阶泰勒展开优化目标函数
      o b j ≈ ∑ i = 1 n [ L ( y i , f ( x i ) t − 1 ) + δ ′ L ( y i , f ( x i ) t − 1 ) δ f ( x i ) t − 1 ∗ f ( x i ) t + 1 2 δ ′ ′ L ( y i , f ( x i ) t − 1 ) δ f ( x i ) t − 1 ∗ f 2 ( x i ) t ] + ∑ k = 1 t − 1 Ω ( f k ) + Ω f t obj \approx \sum_{i=1}^n[L(y_i,f(x_i)_{t-1})+ \frac{\delta'L(y_i,f(x_i)_{t-1})}{\delta f(x_i)_{t-1}}*f(x_i)_t+\frac{1}{2}\frac{\delta''L(y_i,f(x_i)_{t-1})}{\delta f(x_i)_{t-1}}*f^2(x_i)_t]+\sum_{k=1}^{t-1}\Omega(f_k)+\Omega f_t obji=1n[L(yi,f(xi)t1)+δf(xi)t1δL(yi,f(xi)t1)f(xi)t+21δf(xi)t1δ′′L(yi,f(xi)t1)f2(xi)t]+k=1t1Ω(fk)+Ωft

    4. 公式太长,看着太复杂,设定:
      g i = δ ′ L ( y i , f ( x i ) t − 1 ) δ f ( x i ) t − 1 g_i= \frac{\delta'L(y_i,f(x_i)_{t-1})}{\delta f(x_i)_{t-1}} gi=δf(xi)t1δL(yi,f(xi)t1)

      h i = δ ′ ′ L ( y i , f ( x i ) t − 1 ) δ f ( x i ) t − 1 h_i= \frac{\delta''L(y_i,f(x_i)_{t-1})}{\delta f(x_i)_{t-1}} hi=δf(xi)t1δ′′L(yi,f(xi)t1)

      则: o b j ≈ ∑ i = 1 n [ L ( y i , f ( x i ) t − 1 ) + g i ∗ f ( x i ) t + 1 2 h i ∗ f 2 ( x i ) t ] + ∑ k = 1 t − 1 Ω ( f k ) + Ω f t 则:obj \approx \sum_{i=1}^n[L(y_i,f(x_i)_{t-1})+ g_i*f(x_i)_t+\frac{1}{2}h_i*f^2(x_i)_t]+\sum_{k=1}^{t-1}\Omega(f_k)+\Omega f_t 则:obji=1n[L(yi,f(xi)t1)+gif(xi)t+21hif2(xi)t]+k=1t1Ω(fk)+Ωft

      ∑ k = 1 t − 1 Ω ( f k ) : 前 t − 1 颗树的模型夫复杂度,定值; L ( y i , f ( x i ) t − 1 ) :第 t − 1 轮迭代后的损失,定值 \sum_{k=1}^{t-1}\Omega(f_k):前t-1颗树的模型夫复杂度,定值;L(y_i,f(x_i)_{t-1}):第t-1轮迭代后的损失,定值 k=1t1Ω(fk):t1颗树的模型夫复杂度,定值;L(yi,f(xi)t1):第t1轮迭代后的损失,定值

    5. 去除常数项(不影响求解最小目标函数)
      o b j ≈ ∑ i = 1 n [ g i ∗ f ( x i ) t + 1 2 h i ∗ f 2 ( x i ) t ] + Ω f t obj \approx \sum_{i=1}^n[g_i*f(x_i)_t+\frac{1}{2}h_i*f^2(x_i)_t]+\Omega f_t obji=1n[gif(xi)t+21hif2(xi)t]+Ωft

    6. 每颗树模型的模型结果为叶子节点上的权重
      f ( x i ) t = w q ( x i ) f(x_i)_t=w_{q(x_i)} f(xi)t=wq(xi)

      w q ( x i ) : 样本 x i 所在树模型叶子节点的权重 w_{q(x_i)}:样本x_i所在树模型叶子节点的权重 wq(xi):样本xi所在树模型叶子节点的权重

      则: o b j ≈ ∑ i = 1 n [ g i ∗ w q ( x i ) + 1 2 h i ∗ w q ( x i ) 2 ] + Ω f t 则:obj \approx \sum_{i=1}^n[g_i*w_{q(x_i)}+\frac{1}{2}h_i*w^2_{q(x_i)}]+\Omega f_t 则:obji=1n[giwq(xi)+21hiwq(xi)2]+Ωft

    7. 设定树模型复杂度
      Ω f t = γ T + 1 2 λ ∑ j = 1 T ∣ w j ∣ 2 \Omega f_t =\gamma T+\frac{1}{2}\lambda\sum_{j=1}^{T}|w_j|^2 Ωft=γT+21λj=1Twj2

    T : 叶子节点的个数 T:叶子节点的个数 T:叶子节点的个数

    W j :每个叶子的权重的平方, L 2 正则化 Wj:每个叶子的权重的平方,L2正则化 Wj:每个叶子的权重的平方,L2正则化

    则: o b j ≈ ∑ 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 则:obj \approx \sum_{i=1}^n[g_i*w_{q(x_i)}+\frac{1}{2}h_i*w^2_{q(x_i)}]+\gamma T+\frac{1}{2}\lambda\sum_{j=1}^{T}|w_j|^2 则:obji=1n[giwq(xi)+21hiwq(xi)2]+γT+21λj=1Twj2

    1. 不同样本落在同一个叶子节点上预测得分是一样的
      ∑ i = 1 n w q ( x i ) = ∑ j = 1 T w j \sum_{i=1}^nw_{q(x_i)}=\sum_{j=1}^Tw_j i=1nwq(xi)=j=1Twj

      ∑ i = 1 n g i = ∑ i ∈ I j g i − 每一个叶子节点上样本的一阶导数和 \sum_{i=1}^ng_i=\sum_{i\in I_j}g_i- 每一个叶子节点上样本的一阶导数和 i=1ngi=iIjgi每一个叶子节点上样本的一阶导数和

      ∑ i = 1 n h i = ∑ i ∈ I j h i − 每一个叶子节点上样本的二阶导数和 \sum_{i=1}^nh_i=\sum_{i\in I_j}h_i-每一个叶子节点上样本的二阶导数和 i=1nhi=iIjhi每一个叶子节点上样本的二阶导数和

      则: o b j ≈ ∑ j = 1 T [ w j ( ∑ i ∈ I j g i ) + 1 2 w j 2 ( ∑ i ∈ I j h i ) ] + γ T + 1 2 λ ∑ j = 1 T ∣ w j ∣ 2 则:obj \approx \sum_{j=1}^T[w_j(\sum_{i\in I_j}gi)+\frac{1}{2}w^2_j(\sum_{i\in I_j}hi)]+\gamma T+\frac{1}{2}\lambda\sum_{j=1}^{T}|w_j|^2 则:objj=1T[wj(iIjgi)+21wj2(iIjhi)]+γT+21λj=1Twj2

    2. 合并模型复杂度和损失函数
      o b j ≈ ∑ j = 1 T [ w j ( ∑ i ∈ I j g i ) + 1 2 w j 2 ( ( ∑ i ∈ I j h i ) + λ ) ) ] + γ T obj \approx \sum_{j=1}^T[w_j(\sum_{i\in I_j}gi)+\frac{1}{2}w^2_j((\sum_{i\in I_j}hi)+\lambda))]+\gamma T objj=1T[wj(iIjgi)+21wj2((iIjhi)+λ))]+γT

    3. 简化目标函数
      设 G j = ∑ i ∈ I j g i 叶子节点 J 所包含的所用样本一阶导累计之和,是常量 设G_j=\sum_{i\in I_j}gi 叶子节点J所包含的所用样本一阶导累计之和,是常量 Gj=iIjgi叶子节点J所包含的所用样本一阶导累计之和,是常量

      设 H j = ∑ i ∈ I j h i 叶子节点 J 所包含的所用样本二阶导累计之和,是常量 设H_j=\sum_{i\in I_j}hi 叶子节点J所包含的所用样本二阶导累计之和,是常量 Hj=iIjhi叶子节点J所包含的所用样本二阶导累计之和,是常量

      则: o b j ≈ ∑ j = 1 T [ w j G j + 1 2 w j 2 ( H j + λ ) ] + γ T 则:obj \approx \sum_{j=1}^T[w_jG_j+\frac{1}{2}w^2_j(H_j+\lambda)]+\gamma T 则:objj=1T[wjGj+21wj2(Hj+λ)]+γT

    4. 对wj求一阶导,求obj极值(最小二乘法)
      δ ′ ( w j G j + 1 2 w j 2 ( H j + λ ) ) δ w j = G j + w j ( H j + λ ) = 0 \frac{\delta'(w_jG_j+\frac{1}{2}w^2_j(H_j+\lambda))}{\delta w_j}=G_j+w_j(H_j+\lambda)=0 δwjδ(wjGj+21wj2(Hj+λ))=Gj+wj(Hj+λ)=0

      得: w j = − G j H j + λ 得:w_j=-\frac{G_j}{H_j+\lambda} 得:wj=Hj+λGj

    5. 简化后obj带入wj
      o b j ≈ ∑ j = 1 T [ w j G j + 1 2 w j 2 ( H j + λ ) ] + γ T = − 1 2 ∑ j = 1 T G j 2 H j + λ + γ T obj \approx \sum_{j=1}^T[w_jG_j+\frac{1}{2}w^2_j(H_j+\lambda)]+\gamma T=-\frac{1}{2}\sum_{j=1}^T\frac{G^2_j}{H_j+\lambda}+\gamma T objj=1T[wjGj+21wj2(Hj+λ)]+γT=21j=1THj+λGj2+γT

      最终目标函数只与一阶导和二阶导、树的节点个数相关 , 又叫结构分数 最终目标函数只与一阶导和二阶导、树的节点个数相关,又叫结构分数 最终目标函数只与一阶导和二阶导、树的节点个数相关,又叫结构分数

  • 5.4 使用贪心思想求解最优的一棵新树,即每一节点分叉最优

    1. 某个节点是否继续分叉,计算分叉后的节点结构分数是否小于分裂前,类似信息增益

    g a i n = − 1 2 G L 2 H L + λ + γ − 1 2 G R 2 H R + λ + γ − ( − 1 2 G l 2 + G R 2 H L + H R + λ + γ ) < 0 gain = -\frac{1}{2}\frac{G^2_L}{H_L+\lambda}+\gamma -\frac{1}{2}\frac{G^2_R}{H_R+\lambda}+\gamma-(-\frac{1}{2}\frac{G^2_l+G^2_R}{H_L+H_R+\lambda}+\gamma)<0 gain=21HL+λGL2+γ21HR+λGR2+γ(21HL+HR+λGl2+GR2+γ)<0

    1. 去除符号
      g a i n = 1 2 [ G L 2 H L + λ + G R 2 H R + λ − G l 2 + G R 2 H L + H R + λ ] − γ > 0 gain = \frac{1}{2}[\frac{G^2_L}{H_L+\lambda} +\frac{G^2_R}{H_R+\lambda}-\frac{G^2_l+G^2_R}{H_L+H_R+\lambda}]-\gamma>0 gain=21[HL+λGL2+HR+λGR2HL+HR+λGl2+GR2]γ>0

    附录:xgbt手动推导
    原作者链接(https://zhuanlan.zhihu.com/p/511130662)
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

### Python 极度梯度提升(XGBoost) **XGBoost**(Extreme Gradient Boosting)是一种基于决策树的集成学习方法,它在许多机器学习竞赛中表现出色,尤其是在结构化或表格型数据方面。XGBoost 通过一系列弱分类器(通常是浅层决策树)构建出强分类器,并利用梯度提升框架优化损失函数。 以下是 XGBoost 的一些关键特点: 1. **高效性能**: 相比于传统的 GBDT 算法,在内存消耗、计算速度等方面都有显著改进; 2. **正则化项**: 内置L1/L2 正则化,防止过拟合现象发生; 3. **并行处理支持**: 支持多核 CPU 上的任务分发,极大提高了训练效率; 4. **自定义目标函数和评价指标**: 用户可以根据实际需求设计特定的目标函数以及评估标准; 5. **缺失值处理机制**: 自动检测到特征中的空缺部分并在分裂节点时作出合理判断; 安装 XGBoost 非常简单,只需运行 pip install xgboost 即可完成环境配置工作。 接下来是一个简单的例子演示如何使用 XGBoost 进行元分类任务: ```python # 导入必要的库 import xgboost as xgb from sklearn.model_selection import train_test_split from sklearn.datasets import make_classification from sklearn.metrics import accuracy_score # 创建模拟数据集 X, y = make_classification(n_samples=1000, n_features=20, n_informative=2, n_redundant=10, random_state=42) # 划分训练集与测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, stratify=y, random_state=42) # 定义DMatrix数据格式给xgboost使用 dtrain = xgb.DMatrix(X_train, label=y_train) dtest = xgb.DMatrix(X_test, label=y_test) # 设置参数字典 params = { 'objective': 'binary:logistic', # 对应于元逻辑回归的问题设置 'eval_metric': ['error'], # 错误率作为评估指标之一 } # 训练模型 model = xgb.train(params=params, dtrain=dtrain, num_boost_round=10) # 测试预测效果 y_pred_probabilities = model.predict(dtest) > 0.5 accuracy = accuracy_score(y_test, y_pred_probabilities.astype(int)) print("Accuracy:", round(accuracy * 100, 2), "%") ``` 这段代码展示了基本的工作流程 - 包括准备数据、创建 DMatrix 格式的输入文件、指定超参并通过 `train()` 函数启动迭代过程最后评估结果质量等步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值