机器学习高级算法梳理三 —— XGBoost

本文介绍了XGBoost算法,涉及泰勒公式、CART分类回归树。阐述其算法原理,即不断添加树拟合残差。还说明了损失函数、分裂节点算法、正则化方法及缺失值处理方式。分析了该算法的优缺点,最后提及了sklearn参数。

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

一、泰勒公式

  • 泰勒公式:一个用函数在某点的信息描述其附近取值的公式,其初衷是用多项式来近似表示函数在某点周围的情况
  • 比如: e x e^x ex在x=0处的展开: e x = ∑ n = 0 ∞ x n n ! e^x = \sum_{n=0}^{\infty} \frac{x^n}{n!} ex=n=0n!xn
    实际函数值和多项式的偏差称为泰勒公式的余项
  • 对于一般的函数,泰勒公式的系数的选择依赖于函数在一点的各阶导数值,函数f(x)在x0处的基本形式如下:
    在这里插入图片描述
    在这里插入图片描述

二、CART

  • 分类回归树CART:假设要判断一个人是否喜欢电脑游戏,输入为年龄,性别职业等特征。可以得到如下的回归树:
    在这里插入图片描述
  • 单棵CART拟合能力有限,通过之前的集成学习,可以使用多棵树。比如下图用两棵树一起进行预测,样本的预测结果就是两棵树的和:
    在这里插入图片描述
    “一起预测”的学习方法又分为随机森林和提升树
    多棵树即我们的模型: y ^ i = ∑ t = 1 K f t ( x i ) ,    f t ∈ F \hat y_i = \sum_{t=1}^Kf_t(x_i),\ \ f_t \in\mathcal{F} y^i=t=1Kft(xi),  ftF
    假设有K棵树,f是回归树,而F对应了所有回归树组成的函数空间

三、算法原理

  • 算法思想
    不断地添加树,不断地进行特征分裂来生长一棵树,每次添加一个树,其实是学习一个新函数,去拟合上次预测的残差。当我们训练完成得到k棵树,我们要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数,最后只需要将每棵树对应的分数加起来就是该样本的预测值。
    在这里插入图片描述
  • 算法原理
    在这里插入图片描述

参考:XGBoost原理

四、损失函数(目标函数)

每一轮训练一棵树,都是为了使得损失函数能够极小化,也就是每一棵树训练要达到的目标。XGBoost的损失函数(目标函数)与GBDT不同,它不仅仅是衡量了模型的拟合误差,还增加了正则化项,即对每棵树树复杂度的惩罚项,来限制树的复杂度,防止过拟合

如何学习模型?定义目标函数,然后去优化目标函数!
在这里插入图片描述

五、分裂节点算法

在这里插入图片描述

六、正则化

XGBoost有几种防止过拟合的正则化方法:

  1. 在目标函数中,不仅包含了模型的拟合误差函数,还增加了关于每棵树复杂度的惩罚项,即叶子节点的个数以及叶子节点分数的平方项,限制了树的复杂度
  2. 像GBDT那样,可以对每个模型乘上一个步长a,a∈(0,1],用来降低每个模型对预测的贡献
  3. 可以行采样与列采样,与随机森林类似

七、缺失值处理

XGBoost在选择最优分裂点的时候,不考虑该特征的缺失样本,但在后面对样本划分中,会分别将该特征的缺失样本放到左、右节点中,分别计算Gain值,哪边大就把该样本划分到哪一边。如果在训练集中,该特征没有出现缺失样本,但在预测的时候出现缺失样本了,则默认将该样本划分到右节点中

八、优缺点

优点

  1. 高度灵活性
    xgboost支持线性分类器;xgboost对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数
  2. 正则化
    xgboost在代价函数里加入了正则项,用于控制模型的复杂度,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合
  3. Shrinkage(缩减)
    xgboost在进行完一次迭代后,会将叶子节点的权重乘上该系数(eta),主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把eta设置得小一点,然后迭代次数设置得大一点
  4. 剪枝
    当分裂时遇到一个负损失时,GBM会停止分裂,因此GBM实际上是一个贪心算法,XGBoost会一直分裂到指定的最大深度(max_depth),然后回过头来剪枝
  5. 缺失值处理
    对缺失值的处理。对于特征的值有缺失的样本,XGBoost内置处理缺失值的规则,可以自动学习出它的分裂方向
  6. 并行操作
    可并行的近似直方图算法:树节点在进行分裂时,我们需要计算每个特征的每个分割点对应的增益,即用贪心法枚举所有可能的分割点,当数据无法一次载入内存或者在分布式情况下,贪心算法效率就会变得很低,所以xgboost还提出了一种可并行的近似直方图算法,用于高效地生成候选的分割点
    缺点
    容易出现过拟合,防止过拟合方法:
    目标函数的正则项, 叶子节点数+叶子节点数输出分数的平方和 Ω ( 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
    行抽样和列抽样:训练的时候只用一部分样本和一部分特征
    可以设置树的最大深度
    η: 可以叫学习率、步长或者shrinkage
    Early stopping:使用的模型不一定是最终的ensemble,可以根据测试集的测试情况,选择使用前若干棵树​

九、sklearn参数

sklearn参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值