关于xgboost的一些理解

xgboost将梯度提升树方法带到了一个极致,在很多比赛上都是首选的算法,本文总结一下自己对xgboost的一些理解。关于xgboost在算法上的优化这里就不再介绍,网上有很多好的文章,百度一下就可以找到。

精确贪心算法

在单机版本下xgboost支持精确贪心算法,树学习方法最重要的点就是选择最优的分割点,关于精确就是将每个特征按特征值预排序,然后枚举所有特征上所有可能的分割,计算增益,然后选择增益最大的值作为分割点,由于这里需要遍历每个特征值,因此计算开销在数据量很大时非常大。也是建树过程中最耗时的地方。在xgboost中寻找最优切分点这步是可以并行的。

在这里插入图片描述

关于贪心算法我的理解是,从树的第一层开始,对每一个树节点,都进行分割为左子树和右子树,是一种按层生长(level-wise)的决策树生长策略。lightGBM在这里进行了改进,使用了带有深度限制的按叶子生长 (leaf-wise)算法。

近似算法

精确贪心算法确实很强大,但是当数据不能全部读入内存时,这种方法的效率并不高。在分布式处理时也会有同样的问题,因此,需要有一种近似算法。这里有兴趣的可以去看论文,我对这块算法处理并不了解。论文

正则化

xgboost ppt

陈天奇ppt中的这句话令我印象深刻,xgboost不仅在目标函数中加入了正则化项,而且在每个弱学习器前都加上了收缩率 ϵ \epsilon ϵ,为了防止过拟合。
y ( t ) = y ( t − 1 ) + ϵ f t ( x i ) y^{(t)} = y^{(t-1)} + \epsilon f_t(x_i) y(t)=y(t1)+ϵft(xi)

稀疏值处理

  1. presence of missing values in the data;
  2. frequent zero entries in the statistics;
  3. artifacts of feature engineering such as one-hot encoding。
    It is important to make the algorithm aware of the sparsity pattern in the data. In order to do so, we propose to add a default direction in each tree node, which is shown in Fig. 4.
    Fig.4
    稀疏值处理

当特征存在缺失值时,xgboost预先给每个节点都设置了一个默认方向,缺失值,会进入该方向。该方向如何产生呢?最好的默认方向肯定是从数据种学习得到的,先将缺失值先全部归入右子树,枚举所有存在的特征值寻找的最优分割节点,再将缺失值全部归入左子树,枚举所有存在的特征值寻找的最优分割节点。从而获得缺失值情况下,最优分割节点,作为该节点默认方向。

剪枝

回忆下 G a i n = G L 2 H L + γ + G R 2 H R + γ − ( G R + G L ) 2 H R + H L + γ − γ Gain = \frac{G_L^2}{H_L + \gamma} +\frac{G_R^2}{H_R + \gamma} - \frac{(G_R + G_L)^2}{H_R + H_L + \gamma} -\gamma Gain=HL+γGL2+HR+γGR2HR+HL+γ(GR+GL)2γ可以是负的,当训练损失减少小于 γ \gamma γ

  • 早停(Pre-stopping ) 在最优分割点存在负增益时停止分割,该分割可能之后的分割有好处,给学习器带来了欠拟合的风险

  • 后剪枝(Post-Prunning )让一棵树生长到最大深度,然后递归修剪掉所有负增益的叶子节点。一般情况下后剪枝欠拟合风险小,泛化能力强。

特征重要性

关于xgboost特征重要性可以参见这篇文章
xgboost特征重要性指标: weight, gain, cover

调参

关于xgboost调参可以参见这篇文章
XGBoost类库使用小结

小节

关于模型训练效率方面的优化,我并没有系统学习过数据结构和算法,这里也就不总结了。

[1] https://www.jianshu.com/p/2920c97e9e16

[2] https://www.cnblogs.com/pinard/p/11114748.html

[3] 周志华,机器学习[M]. 清华大学出版社 ,2016.

[4] https://arxiv.org/pdf/1603.02754.pdf

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: XGBoost(eXtreme Gradient Boosting)是一种机器学习算法,通过集成多个弱学习器的预测结果来构建强学习器。它基于梯度提升框架,使用变种的决策树作为弱学习器,并在训练过程中优化损失函数。 XGBoost的核心思想是迭代地增加决策树的规模,每次新建一个决策树并进行训练,在训练过程中,根据之前决策树的预测结果与真实标签之间的差异,调整模型参数,使得模型能够更好地拟合训练数据。同时,为了防止过拟合,XGBoost采用了正则化方法。 在训练过程中,XGBoost使用了梯度提升技术优化损失函数。梯度提升是通过最小化损失函数的负梯度来逐步优化模型的方法。XGBoost在每次迭代中,计算损失函数的一阶导数和二阶导数,以此来训练新建的决策树,并通过梯度提升的方式将新决策树集成到模型中。 XGBoost还引入了一些创新的技术来提高模型性能,例如,使用特定的数据结构(稠密压缩列存储)存储训练数据以优化内存使用;通过按特征排序的方式加速特征分裂的搜索;使用分布式计算框架进行大规模训练等。 总的来说,XGBoost是一种强大且高效的机器学习算法,能够处理各种类型的数据,并在许多机器学习竞赛中取得了优异的成绩。它的优点包括可解释性强、鲁棒性好、可扩展性强等,在工业界和学术界都得到了广泛应用。 ### 回答2: XGBoost(eXtreme Gradient Boosting)是一种广泛应用于机器学习领域的集成学习算法。它的基本原理是通过多个弱学习器的集成来构建一个更强大的模型。 XGBoost的主要特点包括: 1. 高度灵活:XGBoost可以应用在各种数据和任务上,包括分类、回归和排序等。 2. 高效性能:XGBoost采用了并行计算技术,使得模型训练和预测速度都非常快。 3. 可解释性:XGBoost提供了特征重要性排序功能,可以帮助我们理解模型的决策过程。 4. 鲁棒性:XGBoost通过正则化项和剪枝方法,可以有效地减少过拟合的风险。 XGBoost的工作原理如下: 1. 初始化:首先,将一个简单的模型作为初始模型,一般是选择一个常数作为初始预测。 2. 偏差修正:计算初始预测与实际目标之间的差异,得到残差。然后,使用回归树来拟合这些残差。 3. 加法模型:将拟合的回归树与初始模型进行加权相加,得到新的预测。即将之前的预测与回归树的预测相加,得到新的预测。 4. 更新残差:计算新的预测与实际目标之间的差异,得到新的残差。 5. 迭代:重复上述过程,不断迭代生成新的回归树,并更新预测和残差,直到模型收敛或达到预设的迭代次数。 在每一轮迭代中,XGBoost通过梯度和近似的海森矩阵对目标函数进行优化,选择最佳的分割点和叶子权重来构建回归树。同时,通过正则化项对树的复杂度进行控制,避免过拟合现象。 总之,XGBoost通过迭代的方式不断优化模型的预测能力,同时考虑了数据结构、特征重要性和模型复杂度等因素,使得其在各种机器学习任务中表现出色。 ### 回答3: XGBoost(eXtreme Gradient Boosting)是一种机器学习算法,是基于决策树的集成学习方法。它通过多个弱分类器的集成来构建一个强分类器。 XGBoost的核心思想是通过不断迭代训练,通过添加弱分类器并纠正先前的错误来提高整体模型的准确率。在每轮迭代中,XGBoost会计算每个样本的梯度信息,并使用这些信息来训练下一个弱分类器。新的弱分类器将根据梯度信息来修正上一轮分类器的错误。 与传统的Gradient Boosting算法相比,XGBoost通过引入一些改进来提高模型的性能。其中一个改进是使用了正则化项,以避免模型过拟合。另一个改进是引入了二阶梯度信息,以更准确地估计每个样本的预测误差。 XGBoost还使用了一种特殊的数据结构,称为"分布式虚拟内存",以在大规模数据集上高效地进行训练。此外,XGBoost还具有并行计算能力,可以利用多核处理器和分布式计算资源来加速训练过程。 XGBoost在多个机器学习竞赛中取得了显著的成绩,并被广泛应用于实际问题中。它可以用于分类问题和回归问题,还可以处理缺失和异常XGBoost具有较高的预测准确性和鲁棒性,同时也具备良好的解释性,可以帮助我们理解特征的重要性和模型的逻辑。 总之,XGBoost是一种强大的机器学习算法,它通过集成多个弱分类器来构建一个准确性较高的分类器。它的优点包括高性能、良好的鲁棒性和解释性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值