数据挖掘中的利器--XGBoost理论篇

标签: 机器学习
1889人阅读 评论(3) 收藏 举报
分类:

  XGBoost是各种数据挖掘或机器学习算法类比赛中每个团队都会使用且精度相对最好的算法之一(Deep Learning算法除外)。也就是说,对于刚转向机器学习领域的同胞们,在掌握数据挖掘的基本常识概念之后,要想在比赛中有所收获,掌握XGBoost算法也是当务之急。

1、XGBoost算法优点

  XGBoost 是 Extreme Gradient Boosting的简称。它是Gradient Boosting Machine的一个C++实现.创建之初为受制于现有库的计算速度和精度,XGBoost最大的特点,它能够自动利用CPU的多线程进行并行,同时,在算法上加以改进提高了精度[1]。

  传统的GBDT(Gradient Boosted Decision Trees)模型,在1999年,由Jerome Friedman提出,最早Yahoo将GBDT模型应用于CTR预估。GBDT是一个加权回归模型,通过Boosting迭代弱学习器,相对于LR的优势是不需要做特征的归一化,可以自动进行特征选择,模型可解释性较好,可以适应多种损失函数如SquareLoss,LogLoss等[2]。但作为非线性模型,其相对线性模型的缺点比较明显,Boosting是串行的过程,不能并行化,计算复杂度较高,同时其不太适合高维稀疏特征,通常采用稠密的数值特征。

  XGBoost不同于传统的GBDT只利用了一阶导数的信息,而XGBoost对损失函数做了二阶泰勒展开,并在目标函数中加入了正则项,整体求最优解,用以权衡目标函数和模型的复杂程度,防止过拟合。

除理论与传统GBDT存在差别外, XGBoost的设计理念主要有如下几点优点:

1. 速度快。让一个程序在必要时占领一台机器,并且在所有迭代的时候一直跑到底,防止重新分配资源的开销。机器内部采用单机多线程方式来并行加速,机器之间通信基于Rabit实现的All Reduce的同步接口。

2. 可移植,少写代码。大多数分布式机器学习算法的结构都是分布数据,在每个子集上面算出一些局部的统计量,然后整合出全局的统计量,然后再分配给每个计算节点进行下一轮的迭代。根据算法本身的需求,抽象出合理的接口,如All Reduce,并通过通用的Rabit库让平台实现接口的需求,最终使得各种比较有效的分布式机器学习抽象地实现在各个平台上。

3. 可容错。Rabit版本的All Reduce有一个很好的性质,支持容错,而传统的MPI不支持。由于All Reduce中,每一个节点最后拿到相同的结果,这意味着可以让一部分节点记住结果,当有节点挂掉重启的时候,可以直接向还活着的节点索要结果。

2、XGBoost算法与目标函数

  XGBoost算法是基于树的Boosting算法,并在其优化目标函数中加了正则化项,其目标函数为:

这里写图片描述

式中Lm表示第m次迭代中生成树模型fm的叶子节点数,

这里写图片描述

表示fm各个叶子节点的输出值。Ƴ和λ是正则化系数,从公式中能看出这两个值控制着模型的复杂度和目标函数的输出,当Ƴ和λ都为零时,只含有损失函数部分,即生成树的规模和叶子节点的输出值不受限制。加了正则化项,使得算法会选择简单而性能较好的模型fm,公式中的正则化项只是抑制在迭代过程中弱学习器fm(X)过拟合,并不参与最终模型的集成。式中应至少满足是二阶连续可导的凸函数。

  XGBoost算法跟Gradient Boosting算法一样采用分步前向加性模型,区别在于,Gradient Boosting算法是学习一个弱学习器fm(X)来近似损失函数在点Pm-1=Fm-1(X)处的负梯度,而XGBoost算法是先求损失函数在该点的二阶泰勒近似值,然后最小化该近似损失函数来训练弱学习器fm(X),得到

这里写图片描述

式中

这里写图片描述

表示损失函数假设在点Pm-1(X)处的第i个分量Fm-1(xi)的一阶偏导数,

这里写图片描述

为损失函数在点Pm-1(X)处的第i个分量Fm-1(xi)的二阶偏导数,使用上式作为近似优化目标函数。对上式变形,得到

这里写图片描述

式中第一项在每次迭代过程中是常数,不会影响优化目标函数的结果,因此,最终优化目标函数变为

这里写图片描述

3、具体代码实例

  扯了一大推理论,感觉还是来点干货靠谱(题外之话了,大家在应用每一个算法之前,最好理解算法的原理,这样才能在使用算法过程中,调好算法的每一个参数)。

Python代码:

这里写图片描述


  对机器学习,人工智能感兴趣的小伙伴可以加我微信JeemyJohn,我拉你进我的机器学习群(群里很多高手哦!),或者扫描二维码!当然你也可以关注我的公众号,点击链接:燕哥带你学算法公众号团队简介

这里写图片描述

参考文献:

[1] Chen T, Guestrin C. Xgboost: A scalable tree boosting system[C]//Proceedings of the 22Nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. ACM, 2016: 785-794.

[2] Friedman J H. Greedy function approximation: a gradient boosting machine[J]. Annals of statistics, 2001: 1189-1232.

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    我的公众号

    关注微信公众号,专

    为机器学习入门者
    个人资料
    • 访问:146324次
    • 积分:3350
    • 等级:
    • 排名:第10749名
    • 原创:86篇
    • 转载:6篇
    • 译文:4篇
    • 评论:765条
    博客专栏
    最新评论