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

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的设计理念主要有如下几点优点:

  • 速度快。让一个程序在必要时占领一台机器,并且在所有迭代的时候一直跑到底,防止重新分配资源的开销。机器内部采用单机多线程方式来并行加速,机器之间通信基于Rabit实现的All Reduce的同步接口。
  • 可移植,少写代码。大多数分布式机器学习算法的结构都是分布数据,在每个子集上面算出一些局部的统计量,然后整合出全局的统计量,然后再分配给每个计算节点进行下一轮的迭代。根据算法本身的需求,抽象出合理的接口,如All Reduce,并通过通用的Rabit库让平台实现接口的需求,最终使得各种比较有效的分布式机器学习抽象地实现在各个平台上。
  • 可容错。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代码:

参考文献:

[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.

原文发布于微信公众号 - 机器学习算法全栈工程师(Jeemy110)

原文发表时间:2017-08-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏新智元

【干货】用反卷积网络合成超逼真人脸:理解深度学习如何思考

【新智元导读】本文中介绍的深度学习架构能够基于选定的人的身份、情绪和方位,生成真实的脸部图像。你只要给网络提供你希望描绘的东西的原始参数,模型就能完成,但是生成...

5066
来自专栏应兆康的专栏

20. 偏差和方差

1591
来自专栏AI科技大本营的专栏

他在Google Brain实习了一年,总结出这么些心得

作者 | Ryan Dahl 去年,在我研究TensorFlow出了一番成果后,我开始申请Google Brain的首届见习项目(Google Brain Re...

35714
来自专栏机器之心

业界 | 腾讯 AI Lab 正式开源PocketFlow,让深度学习放入手机!

项目访问地址:https://github.com/Tencent/PocketFlow

1103
来自专栏机器学习算法原理与实践

强化学习(三)用动态规划(DP)求解

    在强化学习(二)马尔科夫决策过程(MDP)中,我们讨论了用马尔科夫假设来简化强化学习模型的复杂度,这一篇我们在马尔科夫假设和贝尔曼方程的基础上讨论使用动...

1293
来自专栏CreateAMind

代码--深度网路场景位置记忆效果惊人-视频-论文

1032
来自专栏UDNZ

后端视角的高性能、高可用设计概要

应用开发,不只是实现什么功能,完成什么算法,使用了什么技术就好的,还应当有产品级的意识。理论落地到实际使用,转化为生产力才有意义。作为产品,首先是可用。不可用的...

2065
来自专栏机器之心

深度神经网络全面概述:从基本概念到实际模型和硬件基础

选自arxiv 作者:Joel Emer等 机器之心编译 深度神经网络(DNN)所代表的人工智能技术被认为是这一次技术变革的基石(之一)。近日,由 IEEE F...

50719
来自专栏新智元

DeepMind提出快速调参新算法PBT,适用GAN训练(附论文)

来源: DeepMind 编译:马文 【新智元导读】DeepMind在最新的一篇论文 Population Based Training of Neural N...

4119
来自专栏目标检测和深度学习

你可能不知道的7个深度学习实用技巧

深度学习已经成为解决许多具有挑战性的现实世界问题的方法。对目标检测,语音识别和语言翻译来说,这是迄今为止表现最好的方法。许多人将深度神经网络(DNNs)视为神奇...

2829

扫码关注云+社区