机器学习——XGboost原理及python实现

本文详细讲解了XGBoost算法的原理,包括CART回归树、数学推导(目标函数、正则项处理)、确定树结构的方法,以及优化策略如列采样和特征分桶。此外,还涉及Python实现和实战步骤,如数据加载、模型训练和验证。

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

原理

1 xgb是什么

XGBoost 算法是boost 集成算法中的一种,Boosting 算法的思想是将许多弱分类器集成在一起形成一个强分类器。XGBoost 是一种提升树模型,是将许多树模型集成在一起,形成强分类器。XGBoost 中使用的弱分类器为CART (classification and regression tree)回归树。

xgboost并没有提出一种新的机器学习算法,而是基于现有的GBDT/lambdaMART等tree boosting算法在系统及算法层面(主要是系统层面)进行了改进;

  • 系统层面改进点包括:
  1. 带权重的分位点分割算法(weighted quantile sketch)
  2. 稀疏特征的处理(sparsity-aware splitting)
  3. 缓存(cache-aware access)
  4. out-of-core computation
  5. 特征并行
  6. 基于rabit的分布式训练等

这些改进使得xgboost无论是在单机训练还是分布式训练上的耗时都比pGBRT/scikit-learn/spark MLLib/R gbm等有至少几倍的提升;

  • 算法层面的改进主要包括:
    1. L1/L2正则化
    2. 目标函数二阶导的应用等;

1.1 CART 回归树

CART 回归树是一种二叉树,而可用于分类也可用于回归,其每一个节点只对是否进行判断,通过自上而下的分裂不断对样本集合的特征进行分裂。XGBoost 是通过不断添加CART ,不断使特征进行分裂完成CART 若分类器的集成。每一颗新的树的学习任务是去拟合原有树的拟合残差,使得生成的树的预测结果与真实值更加接近,可以认为XGBoost 的计算结果为多颗二叉树的计算结果加和。

1.2 应用

1.3 目标函数

在这里插入图片描述
可推导为:
在这里插入图片描述

2 xgb数学推导

2.1 回归树

在这里插入图片描述

每个样本根据节点值走到叶子节点。
节点集合与样本间测映射关系为Ij={i|q(xi)=j}
即q(Xi)=j。j表示第几个叶子节点
那就可以给Wq(xi)=Wj获取样本的值
所以,最终叶子结点的值的公式表达为:T(θjXi)=Wq(xi)
注意,不能表达结构,只能表达叶子节点的值

2.2 加法模型

由T个基学习器累加起来,基学习器即回归树
i是第i个样本,Xi是特征
这里的T是树的棵数
在这里插入图片描述

2.3 前向分步算法

加法模型和前向分步算法在adaboost里介绍了
采用前向分布法逐步优化每一个基学习器
前向分布算法是采用贪心策略,逐棵树逐棵树的优化
假设当前需要优化的是第t棵树,表达为
在这里插入图片描述

2.4 目标函数

定义好模型后,写目标函数。把问题转化为求目标函数最优解问题。求出基学习器里的参数。

将N个损失函数累加起来,再加上正则项Ω,Ω是树的复杂度
在这里插入图片描述
优化目标就是arg最小
前t-1棵树已经使定值,第t棵树需要确定的就是叶子节点的值W。
m是叶子节点的个数
在这里插入图片描述

2.5 正则项处理

在这里插入图片描述
Ω(ft)=γT+1/2λ∑j=1 Twj^2
T:叶子结点个数
γ,λ:超参数,可以控制惩罚的力度
∑j=1 Twj^2:叶子节点的值平方再求和

  • 树越深就越容易出现过拟合,即节点数越多,所以要进行惩罚,惩罚的力度由γ控制
  • 如果节点值w比较大的话,就代表这棵回归树再所有树的占比比较大。比如5棵回归树,80%的值由一棵树贡献,那过拟合的风险是比较高的。所以要进行惩罚,惩罚的力度由λ控制
  • 那么优化目标就为
    前t-1棵树的正则项是常数,在优化过程中没用,可以去掉
    在这里插入图片描述
  • 代入Ω(ft),得到
    在这里插入图片描述
    当前要优化的正则项部分,只跟当前优化的这棵树的w,T有关

2.6 损失函数的处理

回顾回归树的工作流程:
5个样本,2个特征,真实值y
数据进来后,每一个样本都会被划分到属于它自己的叶子节点,得到预测值
在这里插入图片描述
在这里插入图片描述
假定损失是平方误差损失

损失和L1+L2+…+L5

  • 将求损失最小值转化为求每个叶子节点的损失的最小值
    在这里插入图片描述
    比如L节点1=L3+L5
    在这里插入图片描述
    求最小值,一元二次

  • 因此,obj可以从按样本方式遍历转化为按照叶子节点方式遍历
    在这里插入图片描述
    和后面的正则项合并,得到
    在这里插入图片描述
    (这里写错了,中括号应该包括到最后)

  • 泰勒二阶展开:
    损失函数没法提前给定,找到方法可以无视损失函数继续推导
    泰勒二阶展开公式
    在这里插入图片描述
    在这里插入图片描述

  • 做优化,去掉常量部分,用gi和hi表示损失函数的一阶梯度和二阶梯度
    在这里插入图片描述
    代入obj,合并,得到
    在这里插入图片描述
    gi,hi是常量,样本拿到就可以算出来,

  • 目标函数就变为
    在这里插入图片描述

  • 最优wj与最优obj:
    在这里插入图片描述
    在这里插入图片描述

代入obj,得到最小值
在这里插入图片描述

  • 所以,拿到样本,先计算gi,hi,再计算G,H。就可以算出每个叶子节点的值Wj,最小损失也可以计算出来。
    在这里插入图片描述<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值