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

原创 2017年08月18日 21:50:22

  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.

版权声明:本文为博主原创文章,未经博主允许不得转载。

xgboost特征选择

Xgboost在各大数据挖掘比赛中是一个大杀器,往往可以取得比其他各种机器学习算法更好的效果。数据预处理,特征工程,调参对Xgboost的效果有着非常重要的影响。这里介绍一下运用xgboost的特征选...

isolation forest算法思路与实现

网上看了下isolation forest,想自己实现,先把思路理清楚:1 isolation forest是由很多树组成,最后的结果是综合各个tree的结果,在这里叫itree2 在训练阶段,itr...

机器学习中的数据不平衡解决方案大全

在机器学习任务中,我们经常会遇到这种困扰:数据不平衡问题。       数据不平衡问题主要存在于有监督机器学习任务中。当遇到不平衡数据时,以总体分类准确率为学习目标的传统分类算法会过多地关注多数类,从...

数据挖掘读书心得(理论篇)

整理整理最近的学习心得,理论和实践各写一文。本文是对理论的整理。主要知识来自于以下两本书1.《数据挖掘基础教程》(印)K.P.Soman Shyam Diwakar2.《数据挖掘技术-- 市场营销、销...

数据挖掘(pandas&xgboost)

类别特征处理1、利用pd.get_dummies方法将类别特征进行编码。使用get_dummies进行one-hot编码(查看时间字段的类型,如果不是datetime类型需要to_datetime转化...

Libsvm,模式识别与数据挖掘利器

  • 2013年06月04日 21:55
  • 600KB
  • 下载

突破R内存限制的企业级大数据挖掘利器:Microsoft R Server 快速上手

Microsoft R Server 是一款基于R的企业级大数据分析平台. 支持各种大数据统计分析,预测性模型和机器学习功能 支持基于R的全套数据分析过程-探索、分析、可视化和建模等. 通过利用和扩...

基于机器学习和数据挖掘理论的生物信息学札记:自序

生物信息学(bioinformatics)是个华裔(Hwa A.Lim)在八十年代末造的词。不过它的源头可以追溯到泡林(现代化学之父)老爷子提出分子进化理论的1962年。所谓生物信息学就是biolog...

【学堂在线数据挖掘:理论方法笔记】第二天(3.18)

11::36-12:06 30 分钟

机器学习和数据挖掘(6):雷蒙保罗MAPA泛化理论

泛化理论上一章中提到的生长函数mH(N)m_{\mathcal H}(N)的定义:假设空间在NN个样本点上能产生的最大二分(dichotomy)数量,其中二分是样本点在二元分类情况下的排列组合。上一章...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据挖掘中的利器--XGBoost理论篇
举报原因:
原因补充:

(最多只允许输入30个字)