目 录
- XGBoost的提出
- 基础知识
- XGBoost论文解读
- XGBoost代码实现
1. XGBoost的提出
作者:陈天奇(卡内基梅隆大学,助理教授,2020年秋季),2014年提出
解决问题:GBDT算法的高效实现,成功运用于 商品销售预测、事件分类、网页文本分类、顾客行为预测、情感挖掘、广告点击率预测、恶意软件分类、物品分类、风险评估、大规模在线课程退学率预测。
全称:eXtreme Gradient Boosting
地位:决策树上的最佳算法
适用:分类、回归
论文:https://arxiv.org/pdf/1603.02754
XGBoost的前辈和后继者
- 1984:CART - Classification and Regression Trees, Breiman
- 1986:ID3 - Iterative Dichotomizer3, Ross Quinlan (ITERATIVE: doing something again and again, usually to improve it)
- 1993:C4.5 - Ross Quinlan (C4.5 is an extension of Quinlan's earlier ID3 algorithm.)
- 1995:Adaboost - Adaptive Boosting, Freund and Schapire
- 1996:Bootstrap aggregating, also called bagging, Freund and Schapire (reduces variance and helps to avoid overfitting)
- 1999:Gradient Boosting, Friedman
- 2001:Random Forests, Breiman
- 2014:XGBoost - eXtreme Gradient Boosting, Tianqi Cheng
- 2016:LightGBM - call our new GBDT implementation with GOSS and EFBLightGBM, Microsoft
- 2017:CatBoost - Categorical and Boosting, Yandex
2. 基础知识
2.1 站在信息熵之上的决策树,又托起Boosting算法的天下,集成学习大成者:XGBoost, LightGBM, CatBoost.
CatBoost > LightGBM > XGBoost > Random Forests > GB , Adaboost >= Desicion Tree = CART + ID3 +C4.5 > Gini Index, Information Gain Ratio, Information Gain >= Entropy ( Conditional Entropy, Relative Entropy = Kullback-Leibler Divergence, Cross Entropy ).
2.2 Information Entropy 相关概念
- 信息量,度量的是一个具体事件发生了所带来的信息,即 不确定性的多少。
- 信息熵,是衡量随机变量分布的混乱程度,是随机分布各事件发生的信息量的期望值,随机变量的取值个数越多,状态数也就越多,信息熵就越大,混乱程度就越大。
- 当随机分布为均匀分布时,熵最大;信息熵推广到多维领域,则可得到联合信息熵;条件熵表示的是在 X给定条件下, Y的条件概率分布的熵对 X的期望。
- 相对熵,用来衡量两个概率分布之间的差异。
- 交叉熵,衡量在给定的真实分布下,使用非真实分布所指定的策略消除系统的不确定性所需要付出的努力的大小。
具体细节,请参考:遍地胡说_2018.04.05_博客园-https://www.cnblogs.com/kyrieng/p/8694705.html
2.3 Decision Tree 相关概念
- 决策树是一种树型结构,其中每个内部结点表示在一个属性上的测试,每个分支代表一个测试输出,每个叶结点代表一种类别。
- 决策树学习:采用自顶向下的递归的方法,基本思想是以信息熵为度量构造一棵熵值下降最快的树,到叶子节点处熵值为0(每个叶节点叶中的实例都属于一类),以实例为基础的归纳学习。
- 了解几个重要的基本概念:根节点(最重要的特征);父节点与子节点是一对,先有父节点,才会有子节点;叶节点(最终标签)。
- 决策树思想,实际上就是寻找最纯净的划分方法,如ID3算法使用信息增益作为不纯度;C4.5算法使用信息增益率作为不纯度;CART算法使用基尼系数作为不纯度。
- 决策树要达到寻找最纯净划分的目标要干两件事,建树和剪枝。
- CART算法:既可以做分类,也可以做回归。只能形成二叉树。使用基尼系数作为分裂规则。比较分裂前的gini和分裂后的gini减少多少,减少的越多,则选取该分裂规则,这里的求解方法只能是离散穷举。
- ID3算法:使用信息增益作为分裂的规则,信息增益越大,则选取该分裂规则。多分叉树。信息增益可以理解为,有了x以后对于标签p的不确定性的减少,减少的越多越好,即信息增益越大越好。
- C4.5算法:使用信息增益率作为分裂规则(需要用信息增益除以 该属性本身的熵),此方法避免了ID3算法中的归纳偏置问题,因为ID3算法会偏向于选择类别较多的属性(形成分支较多会导致信息增益大)。多分叉树。连续属性的分裂只能二分裂,离散属性的分裂可以多分裂,比较分裂前后信息增益率,选取信息增益率最大的。
- 决策树对训练属于有很好的分类能力,但对未知的测试数据未必有好的分类能力,泛化能力弱,即可能发生过拟合现象。解决方法:剪枝,或 随机森林。
2.4 集成学习
集成学习(ensemble learning)是现在非常火爆的机器学习方法,本身不是一个单独的机器学习算法,而是通过构建并结合多个机器学习器来完成学习任务。集成学习可以用于分类问题集成,回归问题集成,特征选取集成,异常点检测集成等等。
集成学习有两个问题要解决,第一是如何得到若干个体学习器,第二是如何选择一种结合策略,将这些个体学习器集合成一个强学习器。第一个问题就是如何得到若干个个体学习器:这里有两种选择。第一种就是所有的个体学习器都是一个种类的,或者说是同质的,比如都是决策树个体学习器,或者都是神经网络个体学习器。第二种是所有的个体学习器不全是一个种类的,或者说是异质的。比如 有一个分类问题,对训练集采用支持向量机个体学习器,逻辑回归个体学习器和朴素贝叶斯个体学习器来学习,再通过某种结合策略来确定最终的分类强学习器。
目前来说,同质个体学习器的应用是最广泛的,常说的集成学习的方法都是指的同质个体学习器,使用最多的模型是CART决策树和神经网络,决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型可解释强等。同质个体学习器按照个体学习器之间是否存在依赖关系可以分为两类,第一个是个体学习器之间存在强依赖关系,一系列个体学习器基本都需要串行生成,代表算法是boosting系列算法,第二个是个体学习器之间不存在强依赖关系,一系列个体学习器可以并行生成,代表算法是bagging和随机森林(Random Forest)系列算法。
具体,请参考 博客园 - 刘建平老师2016-12-04_https://www.cnblogs.com/pinard/p/6131423.html.
2.5 随机森林-Bagging算法
单决策树又有一些不好的地方,比如说容易over-fitting,目前解决办法:抽样、提升。
抽样:代表算法是bagging和随机森林(Random Forest)系列算法。
bagging算法,例如随机森林,对样本随机抽样建立很多树,每棵树之间没有关联,这些树组成森林,构成随机森林模型。
先谈 Bagging策略,之后 提出 随机森林。
- 从样本集中重采样(有重复的)选出n个样本
- 在所有属性上,对这n个样本建立分类器(ID3、C4.5、CART、SVM、Logistic回归等)
- 重复以上两步m次,即获得了m个分类器
- 将数据放在这m个分类器上,最后根据这m个分类器的投票结果,决定数据属于哪一类
bagging方法,针对 样本不均衡的常用处理方法
- 假定样本数目A类比B类多,且严重不平衡:
- A类欠采样-Undersampling
- 随机欠采样
- A类分成若干子类,分别与B类进入ML模型
- 基于聚类的A类分割
- B类过采样-Oversampling
- 避免欠采样造成的信息丢失
- B类数据合成-Synthetic Data Generation
- 随机插值得到新样本
- SMOTE(Synthetic Minority Over-sampling Technique)
- 代价敏感学习-Cost Sensitive Learning
- 降低A类权值,提高B类权值
随机森林的提出
随机森林在bagging基础上做了修改。
- 从样本集中用Bootstrap采样选出n个样本;
- 从所有属性中随机选择k个属性,选择最佳分割属性作为节点建立CART决策树;
- 重复以上两步m次,即建立了m棵CART决策树;
- 这m个CART形成随机森林,通过投票表决结果,决定数据属于哪一类。
随机森林 与 决策树 的关系
- 使用决策树作为基本分类器,也可用SVM、Logistic回归等其他分类器;
- 习惯上,这些分类器组成的“总分类器”,仍然叫做随机森林。
应用建议
- 决策树/随机森林的代码清晰、逻辑简单,在胜任分类问题的同时,往往也可以作为对数据分布探索的首要尝试算法;
- 随机森林的集成思想也可用在其他分类器的设计中。
具体细节,请参考 fionaplanet_2016_09_21-博客园 决策树与随机森林 - fionaplanet - 博客园
2.6 Boosting 算法
boosting是一个机器学习技术,可以用于回归和分类问题,它每一步产生一个弱预测模型(如决策树),并加权累加到总模型中;如果每一步的弱预测模型生成都是依据损失函数的梯度方向,则称之为梯度提升(Gradient boosting)。
Boosting系列算法里最著名算法主要有AdaBoost算法和提升树(boosting tree)系列算法。提升树系列算法里面应用最广泛的是梯度提升树(Gradient Boosting Tree)。梯度提升算法首先给定一个目标损失函数,它的定义域是所有可行的弱函数集合(基函数);提升算法 通过迭代的选择一个负梯度方向上的基函数来逐渐逼近局部极小值。这种在函数域的梯度提升观点对 机器学习的很多领域有深刻影响。
Boost的理论意义: 如果一个问题存在弱分类器,则 可以通过提升的办法得到强分类器。
关于Boost算法、AdaBoost算法、GBDT算法 和 XGBoost 算法简介 和对比,
请参考 EamonLiao—2019-07-01:EamonLiao:机器学习算法八:Boosting及AdaBoost,GDBT,XGBoost算法。
2.7 泰勒展开式
泰勒公式(英语:Taylor's Formula)是一个用函数在某点的信息描述其附近取值的公式。这个公式来自于微积分的泰勒定理(Taylor's theorem)。Wikipedia。
https://zh.wikipedia.org/wiki/%E6%B3%B0%E5%8B%92%E5%85%AC%E5%BC%8Fzh.wikipedia.org泰勒定理描述了一个可微函数,如果函数足够光滑的话,在已知函数在某一点的各阶导数值的情况之下,泰勒公式可以用这些导数值做系数构建一个多项式来近似函数在这一点的邻域中的值,这个多项式称为泰勒多项式(Taylor polynomial)。
泰勒公式的初衷是用多项式来近似表示函数在某点周围的情况。
3. XGBoost论文解读
- XGBoost: A Scalable Tree Boosting System
- PDF地址:https://arxiv.org/pdf/1603.02754
boosting集成后一个模型,是对前一个模型产生误差的矫正。gradient boost更具体,是指每个新模型的引入是为了减少上个模型的残差(residual),而为了消除残差,在残差减少的梯度(Gradient)方向上建立一个新的模型。
如果基础模型是决策树,那么这样的模型就被称为Gradient Boost Decision Tree(GBDT)。
GBDT可以看做是个框架,最早的一种实现方法由Friedman 在论文Greedy function approximation: a gradient boosting machine. XGBoost(eXtreme Gradient Boosting)是2014年提出的一个新的GBDT实现,由陈天奇提出,在Kaggle、KDD Cup等数据挖掘比赛中大方异彩,成为冠军队伍的标配,另外很多大公司,如腾讯、阿里、美团已在公司里面部署。
3.1 XGBoost有如下优点:
- 显示的把树模型复杂度作为正则项加到优化目标中。
- 公式推导中用到了二阶导数,用了二阶泰勒展开。
- 实现了分裂点寻找近似算法。
- 利用了特征的稀疏性。
- 数据事先排序并且以block形式存储,有利于并行计算。
- 基于分布式通信框架rabit,可以运行在MPI和yarn上。
- 实现做了面向体系结构的优化,针对cache和内存做了性能优化。
XGBoost应用于监督学习问题,使用训练数据(有很多特征)xi来预测目标yi。 监督学习的三要素:模型、参数和目标函数。
3.2 GBDT框架
论文二章,回顾基于CART算法的boosting算法。
具体思路:以cart算法基础,推出集合 ,从而设定变量、目标函数。