关闭

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

标签: 机器学习
2631人阅读 评论(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
查看评论

xgboost入门与实战(原理篇)

xgboost入门与实战(原理篇)前言: xgboost是大规模并行boosted tree的工具,它是目前最快最好的开源boosted tree工具包,比常见的工具包快10倍以上。在数据科学方面,有大量kaggle选手选用它进行数据挖掘比赛,其中包括两个以上kaggle比赛的夺冠方案。在工业界...
  • sb19931201
  • sb19931201
  • 2016-09-16 20:26
  • 68349

xgboost 调参经验

首先 parameters 设置如下:params = { 'booster':'gbtree', 'objective':'binary:logistic', &...
  • u010414589
  • u010414589
  • 2016-04-14 21:03
  • 27479

关于树的几个ensemble模型的比较(GBDT、xgBoost、lightGBM、RF)

决策树的Boosting方法比较 原始的Boost算法是在算法开始的时候,为每一个样本赋上一个权重值,初始的时候,大家都是一样重要的。在每一步训练中得到的模型,会使得数据点的估计有对有错,我们就在每一步结束后,增加分错的点的权重,减少分对的点的权重,这样使得某些点如果老是被分错,那么就会被“严重关注...
  • xwd18280820053
  • xwd18280820053
  • 2017-03-31 17:22
  • 3659

使用xgboost进行特征选择

xgboost在各大数据挖掘比赛中是一个大杀器,往往可以取得比其他各种机器学习算法更好的效果。数据预处理,特征工程,调参对Xgboost的效果有着非常重要的影响。这里介绍一下运用xgboost的特征选择,运用xgboost的特征选择可以筛选出更加有效的特征代入Xgboost模型。 这里采用的数...
  • levy_cui
  • levy_cui
  • 2017-08-17 15:34
  • 227

xgboost特征选择

Xgboost在各大数据挖掘比赛中是一个大杀器,往往可以取得比其他各种机器学习算法更好的效果。数据预处理,特征工程,调参对Xgboost的效果有着非常重要的影响。这里介绍一下运用xgboost的特征选择,运用xgboost的特征选择可以筛选出更加有效的特征代入Xgboost模型。 这里采用...
  • qq_34264472
  • qq_34264472
  • 2016-11-27 11:22
  • 14207

转:xgboost特征选择

Xgboost在各大数据挖掘比赛中是一个大杀器,往往可以取得比其他各种机器学习算法更好的效果。数据预处理,特征工程,调参对Xgboost的效果有着非常重要的影响。这里介绍一下运用xgboost的特征选择,运用xgboost的特征选择可以筛选出更加有效的特征代入Xgboost模型。 这里采用的...
  • xuxiatian
  • xuxiatian
  • 2017-11-15 16:48
  • 253

XGBoost推导过程

XGBoost推导过程
  • xbmatrix
  • xbmatrix
  • 2017-03-04 00:35
  • 734

XGBoost设计思路与数学推导

XGBoost是由陈天奇大神设计的一套基于gbdt的可并行计算的机器学习工具。在kaggle、天池等大数据竞赛有着广泛的应用。通过阅读论文和代码,受益良多,并总结了包括公式推导、并行化设计和源码剖析等一系列笔记。本篇主要梳理了论文中的公式推导,并添加了一些推导的细节和自己的想法。如有错误,还需指正。
  • chedan541300521
  • chedan541300521
  • 2017-01-21 23:50
  • 2013

特征提取

特征提取、特征选择是特征工程中的两个重要重要问题,坊间常说:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。 相关链接: 特征选择 1.简介 对于特征提取,可以简单对问题分为两类 (1)图像、自然语言类 (2)其他(常见分类、回归问题,即没有太多原始特征) 2.第一类...
  • a819825294
  • a819825294
  • 2016-04-22 20:59
  • 4899

XGBOOST参数说明

XGBoost参数 XGBoost的参数可以分为三种类型:通用参数、booster参数以及学习目标参数 General parameters:参数控制在提升(boosting)过程中使用哪种booster,常用的booster有树模型(tree)和线性模型(linear mode...
  • wang1127248268
  • wang1127248268
  • 2016-12-11 22:13
  • 1290
    机器学习公众号

    关注微信公众号,专

    为机器学习入门者
    个人资料
    • 访问:230960次
    • 积分:4762
    • 等级:
    • 排名:第7226名
    • 原创:115篇
    • 转载:14篇
    • 译文:3篇
    • 评论:788条
    博客专栏
    最新评论