数据挖掘中的利器--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 条评论
登录 后参与评论

相关文章

来自专栏月色的自留地

从锅炉工到AI专家(5)

1414
来自专栏机器学习算法与Python学习

Machine Learning -- Naive Bayes(朴素贝叶斯)

1.1、摘要 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。将首先介绍分类问题,对分类问题进行一个正式的定义。然后,介...

3375
来自专栏AI研习社

语义分割研究党福利来袭,谷歌宣布开源 DeepLabv3+

DeepLab 是一种用于图像语义分割的顶尖深度学习模型,其目标是将语义标签(如人、狗、猫等)分配给输入图像的每个像素。 经过三年左右的发展,目前 DeepLa...

4157
来自专栏人工智能LeadAI

神经网络瘦身:SqueezeNet

今年二月份,UC Berkeley和Stanford一帮人在arXiv贴了一篇文章: SqueezeNet: AlexNet-level accuracy wi...

37013
来自专栏黄安埠的专栏

连接机器与大脑的桥梁: 解密深度学习在智能推荐系统的实践与应用

本文是深度学习在推荐系统实践应用系列文章的第一篇,详细介绍了如何把受限玻尔兹曼机应用到我们当前线上的推荐系统中,包括RBM的原理,在推荐系统的应用及其并行化实现...

4710
来自专栏大数据挖掘DT机器学习

R语言与机器学习(分类算法)神经网络

人工神经网络(ANN),简称神经网络,是一种模仿生物神经网络的结构和功能的数学模型或计算模型。神经网络由大量的人工神经元联结进行计算。大多数情况下人工神经网络...

4515
来自专栏机器之心

斯坦福博士韩松毕业论文:面向深度学习的高效方法与硬件

3199
来自专栏阅读笔记

CVPR 2018|Best paper: Taskonomy 学习笔记

Taskonomy通过量化不同视觉任务之间的关联、并利用这些关联最优化学习策略。(如果两视觉任务A,B之间具有关联性,那么我们在A中学习到的表达理应可以为解决任...

290
来自专栏AI科技评论

学界 | 上海交通大学团队与高文院士ICCV录用论文:精度保证下的新型深度网络压缩框架

AI科技评论按:ICCV 全称为 IEEE International Conference on Computer Vision,即国际计算机视觉大会)与计算...

3424
来自专栏机器学习、深度学习

二值人脸对齐--Binarized Convolutional Landmark Localizers for Human Pose Estimation and Face Alignment

Binarized Convolutional Landmark Localizers for Human Pose Estimation and Face A...

2495

扫码关注云+社区