XGBoost分析总结

本文探讨了XGBoost在机器学习中的广泛应用及其优势,特别是其在处理稀疏数据和实现并行及分布式计算的创新算法。通过对原始论文和代码的研究,阐述了XGBoost的树学习算法、权重量化概要和优化策略,如列块并行学习、缓存意识访问和数据分片压缩。同时,总结了XGBoost在系统实现层面的关键思想,为数据科学家提供处理大规模数据的指导。
摘要由CSDN通过智能技术生成

认识XGBoost是在参加kaggle网站的机器学习比赛上接触到的。听一些过来者说用xgboost,分分钟上top10%。然而我用过之后发现并没有显著提升,一定是理解不够。要知道在2015年的时候29个kaggle比赛,17个用到了xgboost,其中8个是只用xgboost就达到第一的名次。相对的第二流行的是神经网络的方法。而在KDDcup2015编程比赛中,前十的队伍都用了XGboost。作为一个开源的如此受欢迎的软件,认真研读是必须的。

然而网上的帖子大都知识碎片化,并不能深刻的理解其含义,于是下载了arxiv上的原始论文,以及github上的原始代码进行研读。相信这样的一步可以系统上的掌握boost的方法,真正理解其内涵。


1.Introduction

Boosting方法的基本思路是用多个决策树来得到更好的效果。每个决策树可能分类效果不好,但是综合多个分类(弱分类器)的多个结果肯定会得到更准确的预测。Gradient tree boosting方法有多个别名,gradient boosting machine (GBM),gradient boosted regression tree (GBRT),GBDT等等,都是类似的。而XGboost之所以被广泛推崇,主要在实现上进行了算法优化。然boosting能在普通的pc机上面的速度提高10倍以上,可以让数据处理,特别是参加比赛的队伍能够快速方便的使用。并且该实现由很强的可拓展性(scalability)。方便了XGboost在其他开发环境中的使用。具体算法实现上,在文章中给出了主要改进的地方:
      对稀疏的数据非常好的分类优化
对损失函数的规划项进行的调整
增加了分布式并行计算的支持

 The scalability of XGBoost is dueto several important systems and algorithmic optimizations.These innovations include: a novel tree learning algorithmis for handling sparse data; a theoretically justified weighted quantile sketch procedure enables handling instance weights in approximate tree learning. Parallel and distributed computing makes learning faster which enables quicker model ex-ploration. More importantly, XGBoost exploits out-of-core computation and enables data scientists to process hundredmillions of examples on a desktop. 

文中提到, While there are some existing works on parallel tree boost-ing [ 22 , 23 , 19 ], the directions such as out-of-core computation, cache-aware and sparsity-aware learning have notbeen explored. 现在的boosting的方法中,后面三个算法还没有实现,但不是科班出身的我对后面的三个意思并太清楚具体含义,往大家指正。
论文内容的安排为,第二章回顾了boosting方法,第三章和第四章分别介绍了程序的实现的方法和系统设计。相关工作的讨论放在第五章。第六章对程序实现进行了具体展示。第七章进行简短总结。

2. Tree boosting in a nutshell

Classification And Regression Tree(CART) 是决策树的一种实现方法(相关方法,ID3, C4.5, C5.0),是机器学习的十大算法之一。下面是大神的ppt的介绍,三张ppt让你认识Tree Ensemble 的精髓。对于一个树结构而很好的展示了模型和目标函数。 在损失函数中,xgboost包含两项,一个是表示树叶的树叶,另一个与一般机器学习算法相同,表示叶子得分的模的平方。
上图中,是一个决策树的简单示意,那么第i个实例,预测结果就是K个树预测结果的叠加,即上面第一个式子。对上面这一颗树来说,对leaf1的预测结果就是w1=2.


而后 对一个Tree ensemble来说,目标函数是每个树的组合得到。第一项就是传统的loss function, 第二项是regularization 项,用于防止过拟合。 常见的Random和boosted tree和tree ensemble有什么关系呢?RF和boosted tree的模型都是tree ensemble,只是构造(学习)模型参数的方法不同。
error=bias+variance
Boosting Tree weak  learners (high bias, low variance)
Random Forest : fully grown decision trees (low bias, high variance),RF grows trees in parallel


传统的梯度下降的方法速度优先,不能并行计算。在xgboost中,损失函数被展开到二级,最后的形式为红色椭圆标记。这里比较复杂,想理解的可以参考原文,作者在52cs上的帖子描述的更加清楚。基于我的理解,思路是这样的。因为我们的目标是优化损失函数,在xgboost中下一次预测的yt值可以表达成上一次预测值加上一个修正即yt= yt-1 + f(x),(这个方法用到的是additive training的思想)带入到图二中的损失函数中,泰勒展开到二次,然后进行参数的定义 将目标函数进行改写(这个地方涉及到具体的数学公式,需要有一定基础的人认真研读原文),可以得到图3中的目标函数。下面考虑如何求解目标函数的最小值。

最终的目标函数是

Obj(t)
XGBoost(eXtreme Gradient Boosting)是一种基于梯度提升树的机器学习算法。它是由陈天奇在2016年提出的,并且在各种机器学习任务中表现出色。 XGBoost的原理基于集成学习中的梯度提升算法。梯度提升是一种迭代的决策树构建方法,通过递归地将弱学习器(即决策树)添加到模型中,并逐步优化模型的预测能力。XGBoost通过优化目标函数来构建决策树,同时利用了梯度提升的思想。 具体而言,XGBoost的目标函数包括两部分:损失函数和正则化项。损失函数度量了模型预测值与真实值之间的差异,而正则化项则控制模型的复杂度,避免过拟合。 XGBoost通过迭代地添加决策树来构建模型。在每一次迭代中,它首先计算当前模型对样本的预测值,并计算预测值与真实值之间的梯度。然后,它使用这些梯度来拟合一个新的决策树,使得损失函数最小化。为了进一步优化模型的性能,XGBoost还引入了正则化项,用于控制决策树的复杂度。 在模型构建完成后,XGBoost使用一种称为“提升”的策略来组合多个决策树的预测结果。提升通过将多个决策树的预测结果进行加权求和,得到最终的预测结果。为了进一步提高模型的泛化能力,XGBoost还使用了一种称为“剪枝”的技术来减小决策树的复杂度。 总结来说,XGBoost通过迭代地优化目标函数来构建决策树,并通过提升和剪枝等技术来组合多个决策树的预测结果。这种方式使得XGBoost在各种机器学习任务中表现出色,并成为了许多数据科学竞赛中的常用算法之一。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值