对xgboost学习的一些梳理
2017-08-22 00:09
197 查看
对xgboost的一些理解
最近一直在看机器学习比赛的相关内容,发现在比赛排行榜TOP10中,好多都用到了xgboost。于是拿过来研究了一下,下面是个人这段时间的对其的一些理解,水平不足,如在后续学习过程中发现理解不当之处,会及时更正,也恳请各位指正。一、简介
xgboost也是一种boost提升方法,在这里关于提升方法这部分就先不详细介绍了。xgboost的作者是陈天奇博士。每当谈到xgboost,总是离不开性能也很优异的GBDT算法(Gradient Boosting Decision Tree),继续往基础方面挖掘,就涉及到了提升树(boosting tree)模型,最后就回归到了我们熟知的决策树(Decision Tree)。下面我们开始一窥究竟。二、提升树模型
提升方法实际采用加法模型(即基函数的线性组合)与前向分布算法,以决策树为基函数的提升方法称为提升树(boosting tree)。不过,这里的决策树都为二叉树,对于分类问题,采用分类二叉树,对于回归问题,则采用回归二叉树。提升树模型可以用决策树的加法模型来表示:fM(x)=∑m=1MT(x;Θm)
其中,T(x;Θm)表示决策树,M表示为决策树的个数,Θm表示为决策树的参数。
由于树的线性组合可以很好的拟合训练数据,即使数据中的输入与输出之间的关系很复杂也是如此。所以,提升树算法可以采用前向分步算法,算法如下:1.确定初始提升树f0(x)=0;2.第m步的模型是fm(x)=fm−1(x)+T(x;Θm),其中,fm−1(x)是当前模型,T(x;Θm)是需要通过经验风险极小化来确定的下一颗决策树的参数argmin∑Ni=1L(yi,fm−1(xi)+T(xi;Θm))。那么这个参数Θ的具体含义是什么呢?我们知道,以回归问题为例,已知一个训练数据集T=(x1,y1),(x2,y2)...(xN,yN),回归树将输入空间划分为J个互不相交的区域(R1,R2,...RJ),其中每个区域会输出一个常数cj,那么一颗决策树就可以表示为:T(x;Θ)=∑j=1JcjI(x∈Rj)参数Θ=(R1,c1),(R2,c2)...(RJ,cJ)表示了区域划分和输出常数,J是叶节点个数也称回归树的复杂度。
对于回归问题我们一般采用平方误差损失函数,可以很容易的证明:对于回归问题的提升树算法,只需拟合当前模型的残差。这里残差为:r=y−fm−1(x)。关于回归问题的提升树一个实例在李航老师的《统计学习方法》上讲的很清晰明了了。
GBDT
提升树模型是一个相当好的算法,但是当损失函数不为平方误差损失函数或者不为指数损失函数时,每一步的优化就会出现困难了。于是,Freidman就提出了梯度提升(gradient boosting)算法,其基本思想就是利用损失函数的负梯度在当前模型的值作为回归问题提升树算法中残差的近似值,以此来拟合一个回归树 。负梯度值为:−[∂L(y,f(xi))∂f(xi)]f(x)=fm−1(x)具体算法为:(此图来源gbdt的wiki)
在GBDT中,优化方式是采用的利用一阶导数的梯度下降法。在参数空间中,θt=θt−1+θt,其中θt−1是经过t-1次迭代过后的参数。θt为第t次迭代的参数增量,θt=−αtgt。映射到函数空间,Ft(x)=Ft−1(x)+Ft(x),Ft(x)=−αt(x)g(x)。
XGBoost
XGBoost与GBDT不同的是,XGBoost在损失函数上增加了正则项以减少过拟合现象,并且利用Taylor展开式,利用一二阶导数信息进行求解。XGBoost目标函数的定义为:
其中正则项Ω具体为:
T为叶子节点个数,后一项为叶节点分数ω的L2范数。
将目标函数进行二阶Taylor展开后得:
其中,
我们把ft和Ω(ft)写成树结构的形式,即:
代入目标函数中,得到
则将目标函数已经写成了按叶节点累加的形式,为了简洁,我们可以写为:
由此看来,如果树结构确定了,我们只需令目标函数的导数为0就可求得极值。此时每个节点最优预测分数为
代入目标函数得:
但是出现的一个问题为:我们不能暴力找到所有的树结构从而找到最小的,所以我们只能运用贪心算法每次尝试分裂一个叶节点,计算分裂前后的增益,选择增益最大的。那么如何选择这个增益函数?我们来观察最优目标函数值,发现右边前一项衡量了每个叶子节点对总体损失的的贡献,我们希望损失越小越好,则标红部分的值越大越好。那么我们可以这样定义增益函数:
选择使Gain最大的feature进行分割。
小结
对于GBDT和XGBoost的基本思路就先这么理一下,也会有理解不深的地方。最重要的还是模型的应用。调参是个大工程,等以后实际应用到的时候再来记录自己的体会吧。相关文章推荐
- XGBoost学习资料及Anacoda安装
- 机器学习:GBDT和XGBoost的区别
- 决策树、随机森林、GBDTxgboostfastRGF 学习笔记
- 终于在pycharm下(Python3.6.1版本)安装完成机器学习相关库文件(sklearn scikit-learn gensim xgboost tensorflow nltk )
- [转载] XGBOOST中值得学习的调参方法
- xgboost ppt(1)——监督学习的主要概念
- 树模型的学习----XGBOOST的学习2
- 树模型的学习----XGBOOST的学习
- 决策树、CART、GBDT、Xgboost学习笔记
- XGBoost学习
- xgboost学习之windows下python版本安装
- 安装xgboost过程中的一些坑
- 梳理一下学习串口过程中的一些知识点
- Sklearn,xgboost机器学习多分类实验
- 百度DMLC分布式深度机器学习开源项目(简称“深盟”)上线了如xgboost(速度快效果好的Boosting模型)、CXXNET(极致的C++深度学习库)、Minerva(高效灵活的并行深度学习引擎)以及Parameter Server(一小时训练600T数据)等产品,在语音识别、OCR识别、人脸识别以及计算效率提升上发布了多个成熟产品。
- XGBoost学习
- 学习boost的一些我的体会
- 百度DMLC分布式深度机器学习开源项目(简称“深盟”)上线了如xgboost(速度快效果好的Boosting模型)、CXXNET(极致的C++深度学习库)、Minerva(高效灵活的并行深度学习引擎)以及Parameter Server(一小时训练600T数据)等产品,在语音识别、OCR识别、人脸识别以及计算效率提升上发布了多个成熟产品。
- 学习笔记:XGBoost原理解析
- XGBoost学习日记1