XGBoost

XGBoost

WHAT

XGBoost的介绍

XGBoost是2016年由华盛顿大学陈天奇老师带领开发的一个可扩展机器学习系统。严格意义上讲XGBoost并不是一种模型,而是一个可供用户轻松解决分类、回归或排序问题的软件包。它内部实现了梯度提升树(GBDT)模型,并对模型中的算法进行了诸多优化,在取得高精度的同时又保持了极快的速度,在一段时间内成为了国内外数据挖掘、机器学习领域中的大规模杀伤性武器。

更重要的是,XGBoost在系统优化和机器学习原理方面都进行了深入的考虑。毫不夸张的讲,XGBoost提供的可扩展性,可移植性与准确性推动了机器学习计算限制的上限,该系统在单台机器上运行速度比当时流行解决方案快十倍以上,甚至在分布式系统中可以处理十亿级的数据。

XGBoost的主要优点:

简单易用。相对其他机器学习库,用户可以轻松使用XGBoost并获得相当不错的效果。
高效可扩展。在处理大规模数据集时速度快效果好,对内存等硬件资源要求不高。
鲁棒性强。相对于深度学习模型不需要精细调参便能取得接近的效果。
XGBoost内部实现提升树模型,可以自动处理缺失值。
XGBoost的主要缺点:

相对于深度学习模型无法对时空位置建模,不能很好地捕获图像、语音、文本等高维数据。
在拥有海量训练数据,并能找到合适的深度学习模型时,深度学习的精度可以遥遥领先XGBoost。

XGboost的应用

XGBoost在机器学习与数据挖掘领域有着极为广泛的应用。据统计在2015年Kaggle平台上29个获奖方案中,17只队伍使用了XGBoost;在2015年KDD-Cup中,前十名的队伍均使用了XGBoost,且集成其他模型比不上调节XGBoost的参数所带来的提升。这些实实在在的例子都表明,XGBoost在各种问题上都可以取得非常好的效果。

同时,XGBoost还被成功应用在工业界与学术界的各种问题中。例如商店销售额预测、高能物理事件分类、web文本分类;用户行为预测、运动检测、广告点击率预测、恶意软件分类、灾害风险预测、在线课程退学率预测。虽然领域相关的数据分析和特性工程在这些解决方案中也发挥了重要作用,但学习者与实践者对XGBoost的一致选择表明了这一软件包的影响力与重要性。

HOW

// An highlighted block
var foo = 'bar';
// An highlighted block
var foo = 'bar';
// An highlighted block
var foo = 'bar';

链接: 一文搞定 GBDT、Xgboost 和 LightGBM 的面试.

xgboost对传统GBDT算法做了很多细节改进,包括损失函数、正则化、切分点查找算法优化、稀疏感知算法、并行化算法设计等等。

Xgboost 原理

目前已有的 GBDT 工具基本都是基于预排序的方法(pre-sorted)的决策树算法(如 xgboost)。这种构建决策树的算法基本思想是:   
1,对所有特征都按照特征的数值进行预排序。   
2,在遍历分割点的时候用O(#data)的代价找到一个特征上的最好分割点。   
3,找到一个特征的分割点后,将数据分裂成左右子节点。

这样的预排序算法的优点是:能精确地找到分割点

xgboost与传统GBDT的区别,优点

xgboost是boosting Tree的一个很牛的实现,它 有以下几个优良的特性:
1、显示的把树模型复杂度作为正则项加到优化目标中。
2、公式推导中用到了二阶导数,用了二阶泰勒展开。
3、实现了分裂点寻找近似算法。
4、利用了特征的稀疏性。
5、数据事先排序并且以block形式存储,有利于并行计算。
6、实现做了面向体系结构的优化,针对cache和内存做了性能优化。

XGBoost 与 GBDT 异同

1、
传统 GBDT 以 CART 作为基分类器,XGboost 还支持线性分类器,这时 XGboost 相当于带 L1 和 L2 正则化项的逻辑回归(分类问题)或者线性回归(回归问题)
2、
传统 GBDT 在优化时只用到一阶导数信息,xgboost 则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。xgboost 还支持支持自定义代价函数,只要函数可一阶和二阶求导。
3、
XGboost 在代价函数里加入了正则项,用于控制模型的复杂度正则项里包含了树的叶子节点个数、每个叶子节点上输出的 score 的 L2 模的平方和。降低了模型的variance,使学习来的模型更加简单,防止过拟合。
4、
Shrinkage(缩减),相当于学习速率(xgboost 中的 eta)。xgboost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。(补充:传统 GBDT 的实现也有学习速率)
5、
列抽样(column subsampling)。xgboost 借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是 xgboost 异于传统 gbdt 的一个特性。
6、
传统的GBDT没有设计对缺失值进行处理,XGBoost能够自动学习出缺失值的处理策略,将缺失值捆绑分别放在左边和右边,取信息增益大的那边
7、
可并行的近似直方图算法。三分位数。实际上XGBost不是简单地按照样本个数进行分位,而是以二阶导数值作为权重。
8、
xgboost 支持并行。xgboost 的并行是在特征粒度上的。训练之前,预先对数据进行了排序,然后保存为 block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。

LightGBM 与 XGBoost 的不同点
1、
由于在决策树在每一次选择节点特征的过程中,要遍历所有的属性的所有取值并选择一个较好的。
~XGBoost 使用的是近似算法,先对特征值进行预排序 Pre-sort,然后根据二阶梯度进行分桶,能够更精确的找到数据分隔点;但是复杂度较高。
~LightGBM 使用的是 histogram 算法,这种只需要将数据分割成不同的段即可,不需要进行预先的排序。占用的内存更低,数据分割的复杂度更低。
2、
决策树生长策略,XGBoost 采用的是 Level-wise 的树生长策略,LightGBM 采用的是 leaf-wise 的生长策略,以最大信息增益为导向。后者进度更高,容易过拟合,所以要控制最大深度。
3、
并行策略对比,
XGBoost 的并行主要集中在特征并行上,
LightGBM 的并行策略分特征并行,数据并行以及投票并行。

tree-base模型是否了解,决策树和随机森林区别是什么,树节点的分裂都有哪些策略?

随机森林是很多棵决策树组成的,一定程度上能避免过拟合问题。
树节点分裂:
ID3 : 以信息增益大小来建立。
C4.5 :以信息增益率大小来建立。
CART:以基尼系数大小来建立。
ID3和C4.5是分类型决策树,只处理离散型的,CART分类回归都可以做的决策树,支持所有类型

XGBoost 缺点:

1、空间消耗大。这样的算法需要保存数据的特征值,还保存了特征排序的结果(例如排序后的索引,为了后续快速的计算分割点),这里需要消耗训练数据两倍的内存。

2、时间上也有较大的开销,在遍历每一个分割点的时候,都需要进行分裂增益的计算,消耗的代价大。

3、 cache 优化不友好。在预排序后,特征对梯度的访问是一种随机访问,并且不同的特征访问的顺序不一样,无法对 cache 进行优化。同时,在每一层长树的时候,需要随机访问一个行索引到叶子索引的数组,并且不同特征访问的顺序也不一样,也会造成较大的 cache miss。

资料

XGBoost文献:
原始论文XGBoost: A Scalable Tree Boosting System.
XGBoost Parameters (official guide).

XGBoost博客:
xgboost: 速度快效果好的 boosting 模型.
XGBoost Plotting API以及GBDT组合特征实践.
Complete Guide to Parameter Tuning in XGBoost with codes in Python.

WHY

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值