梯度提升决策树GBDT及其优秀改进XGBoost的浅析
梯度提升决策树
英文是Gradient Boosting Decision Tree (GBDT)。是一种迭代的决策树算法,由多棵决策树组成,将所有树的结论累加起来做最终答案。值得注意的是,GBDT中的树都是回归树,不是分类树。GBDT主要用于回归问题(包括线性和非线性),但也可以用于分类问题。
我们在已经搞清楚决策树(DT)部分的前提下,可以简单看看梯度迭代(GB)。GB核心的思想就是每一棵树都在学习之前所有树结论和的残差。
输入
训练集数据D={(xi,yi)}i=1ND = \{(x_i,y_i)\}_{i=1}^ND={(xi,yi)}i=1N。损失函数L(y,f(x))L(y, f(x))L(y,f(x))。我们令树的数量为MMM,用mmm表示当前树的序号。
步骤
初始化f0(x)=argminγ∑i=1NL(yi,γ)f_0(x) = argmin_\gamma \sum_{i=1}^N L(y_i, \gamma)f0(x)=argminγ∑i=1NL(yi,γ)
对于m=1∼Mm = 1 \sim Mm=1∼M:
a) 对于每一个观测i=1∼Ni = 1 \sim Ni=1∼N计算伪残差(pseudo-residuals)
rim=−[∂L(yi,fm−1(xi))∂fm−1(xi)]r_{im} = -[\frac{\partial L(y_i, f_{m-1}(x_i))}{\partial f_{m-1}(x_i)}] \\\\ rim=−[∂fm−1(xi)∂L(yi,fm−1(xi))]
b) 对数据集{(xi,rim)i=1N}\{(x_i, r_{im})_{i=1}^N\}{(xi,rim)i=1N}拟合一棵回归树hm(x)h_m(x)hm(x)来学习残差。
c) 对于一维优化问题,计算
γm=argminγ∑i=1NL(yi,fm−1(xi)+γhm(xi))\gamma_{m} = argmin_\gamma \sum_{i=1}^N L(y_i, f_{m-1}(x_i) + \gamma h_m(x_i)) γm=argminγi=1∑NL(yi,fm−1(xi)+γhm(xi))
d) 更新当前树的函数
fm(x)=fm−1(x)+γmhm(x)f_m(x) = f_{m-1}(x) + \gamma_{m} h_m(x) fm(x)=fm−1(x)+γmhm(x)
- 输出最终的函数y^=fM(x)\hat y = f_M(x)y^=fM(x)
解释如下:
1、初始化,估计使损失函数极小化的常数值,它是只有一个根节点的树,即γ\gammaγ是一个常数值。使用常数值的原因是常数是拟合数据集最差的模型(直接假设xxx和yyy直接没有关系),模型可以通过不断迭代找到更好的模型。
2、
(a)计算损失函数的负梯度在当前模型的值,将它作为残差的估计
(b)估计回归树叶节点区域,以拟合残差的近似值
(c)利用线性搜索估计叶节点区域的值,使损失函数极小化
(d)更新回归树
3、得到输出的最终模型 f(x)f(x)f(x)。
场景
近年来多被用于搜索排序。
优点
- 通过迭代学习残差,提高模型精确度
缺点
- 耗时较长,模型无法并行运行
- 超参数MMM即决策树的数量非常重要,不好调整
- 容易出现过拟合
Xgboost
英文是eXtreme Gradient Boosting (XGBoost)。针对传统GBDT算法做了很多细节改进,包括损失函数、正则化、切分点查找算法优化、稀疏感知算法、并行化算法设计等等。
输入
训练集数据D=(xi,yi)i=1ND = {(x_i,y_i)}_{i=1}^ND=(xi,yi)i=1N。损失函数L(y,f(x))L(y, f(x))L(y,f(x))。我们令树的数量为MMM,用mmm表示当前树的序号。
限定条件为,
f(x)=∑j=1Mhj(x)f(x)m=∑j=1mhj(x)f(x) = \sum_{j=1}^M h_j(x) \\\\ f(x)_m = \sum_{j=1}^m h_j(x) \\\\ f(x)=j=1∑Mhj(x)f(x)m=j=1∑mhj(x)
目标函数
J=∑i=1NL(yi,f(xi))+∑m=1MΩ(fm)J = \sum_{i=1}^N L(y_i, f(x_i)) + \sum_{m=1}^M \Omega(f_m)J=∑i=1NL(yi,f(xi))+∑m=1MΩ(fm)。
前一部分就是普通的损失函数,一般是MSE或者Logistic Loss。后一部分是惩罚函数,用于控制树的复杂度,帮助抑制过拟合。
步骤
我们浅析其计算过程。
y^i(0)=0y^i(1)=f1(xi)=y^i(0)+f1(xi)y^i(0)=f1(xi)+f2(xi)=y^i(1)+f2(xi)...y^i(t)=∑k=1mfk(xi)=y^i(m−1)+fm(xi)\hat y_i^{(0)} = 0 \\\\ \hat y_i^{(1)} = f_1(x_i) = \hat y_i^{(0)} + f_1(x_i) \\\\ \hat y_i^{(0)} = f_1(x_i) + f_2(x_i) = \hat y_i^{(1)} + f_2(x_i) \\\\ ...\\\\ \hat y_i^{(t)} = \sum_{k=1}^m f_k(x_i) = \hat y_i^{(m-1)} + f_m(x_i) \\\\ y^i(0)=0y^i(1)=f1(xi)=y^i(0)+f1(xi)y^i(0)=f1(xi)+f2(xi)=y^i(1)+f2(xi)...y^i(t)=k=1∑mfk(xi)=y^i(m−1)+fm(xi)
由于这是个树模型,传统SGD不太适用。所以我们使用增量训练(additive training)。我们需要对目标函数进行泰勒展开,这要求损失函数至少二阶可导。这里不详细介绍。
重要参数
根据经验,介绍模型中最需要调整的参数。
常规参数General Parameters
booster: 默认是gbtree;也可以Dart模式,类似Dropout的思想
树参数Tree Parameters
max_depth:树的深度,最重要的参数,过深的话容易过拟合。
eta: 学习率learning_rate,0.01~0.2
gamma:在树的叶子节点上进行进一步分区所需的最小损失减少。利用CV进行微调
min_child_weight: 每一支需要的观测实例的最小权重(hessian),利用CV进行微调
学习任务参数Learning Task Parameters
eval_metric:评判标准,根据数据的不同进行设置
场景
优点
- 不需要过多特征工程
- 能够得到特征重要性
- 鲁棒性强,较少受到异常点(outliers)的影响
- 速度快
缺点
- 难以可视化
- 模型参数多,难以进行微调
Reference
- NLP实战高手课,第三章,王然,极客时间
- GBDT: 梯度提升决策树,Siyue Lin,简书
- Demystifying Maths of Gradient Boosting, Krishna Kumar Mahto, towards data science
梯度提升决策树GBDT及其优秀改进XGBoost的浅析相关推荐
- 机器学习 の04 梯度提升决策树GBDT
机器学习 の04 梯度提升决策树GBDT GBDT的背景知识 集成学习(ensemble learning) Bagging(Bootstrap Aggregating)算法 Boosting提升算法 ...
- 简单易学的机器学习算法——梯度提升决策树GBDT
梯度提升决策树(Gradient Boosting Decision Tree,GBDT)算法是近年来被提及比较多的一个算法,这主要得益于其算法的性能,以及该算法在各类数据挖掘以及机器学习比赛中的卓越 ...
- [机器学习]梯度提升决策树--GBDT
概述 GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由 ...
- 机器学习之梯度提升决策树(GBDT)
1.GBDT算法简介 GBDT(Gradient Boosting Decision Tree)是一种迭代的决策树算法,由多棵决策树组成,所有树的结论累加起来作为最终答案,我们根据其名字(Gradie ...
- 【机器学习】深入剖析梯度提升决策树(GBDT)分类与回归
1. 梯度提升决策树概述 梯度提升决策树(Gradient Boosting Decision Tree,GBDT)是以决策树为基学习器的一种Boosting算法,它在每一轮迭代中建立一个决策树,使当 ...
- 梯度提升决策树(GBDT)与XGBoost、LightGBM
20211224 [机器学习算法总结]XGBoost_yyy430的博客-CSDN博客_xgboost xgboost参数 默认:auto.XGBoost中使用的树构造算法.可选项:auto,exac ...
- 3. 梯度提升决策树(GBDT)详解
一.提升树 以决策树为基函数的提升方法称为提升树.其中,分类问题采用二叉分类树,回归问题采用二叉回归树.sklearn中的提升树采用的是CART树.模型可以表示为决策树的加法模型: 其中,表示决策树, ...
- GBDT:梯度提升决策树
From http://blog.csdn.net/suranxu007/ AND http://www.jianshu.com/p/005a4e6ac775 综述 GBDT(Grad ...
- 机器学习-集成学习-梯度提升决策树(GBDT)
目录 1. GBDT算法的过程 1.1 Boosting思想 1.2 GBDT原理 需要多少颗树 2. 梯度提升和梯度下降的区别和联系是什么? 3. GBDT的优点和局限性有哪些? 3.1 优点 3. ...
最新文章
- riverplot绘制桑基图
- 总结 - 沉寂了大半年后的又一次
- ASIO协程彻底转变你的思维
- 在数据段DATA中有两个字数据X和Y, 假设X=1122H, Y=3344H, 编程求两个字的和,结果存放到Z单元中.
- oracle_j000,Process J000 died, kkjcre1p: unable to spawn jobq slave process引起的宕机
- 如何解决Android SDK无法下载Package的问题(.net)
- Spring 框架学习 —— 容器
- git创建分支合并到master分支步骤
- AI市场需求变化了,应届生们却还停留在几年前的认知上...
- SpringBoot-Learning-作者:翟永超
- 使用Apache搭建Web网站服务器
- 一级b仅html格式保存,一级B考试模拟试题-第一套,DOS版本:6.0
- Linux系统配置及服务管理_02章_文件和用户管理
- 挺带劲!这款免费开源的监控系统真强大~
- 厦门大学437社会工作实务考研参考书目
- 数学之英文写作——基本中英文词汇(一般术语、算术与代数的常用词汇)
- 万字长文详解 Go 程序是怎样跑起来的?| CSDN 博文精选
- java中文数字与阿拉伯数字相互转换
- 使用OpenDNS解决DNS域名劫持
- 区块链技术之共识机制
热门文章
- 浅谈JS原型与原型链(一)
- ios 工具大全,最全框架
- python smtp模块发送邮件
- Oracle 分区表的新增、修改、删除、合并。普通表转分区表方法
- CXF发布restful WebService的入门例子(服务器端)
- 《Sibelius 脚本程序设计》连载(四十七) - 4.17 BracketsAndBraces 与 Bracket
- NA,NP,IE学习之路
- 如何安装apache服务器最新,云服务器如何安装apache
- Xilinx_ISE 14.7在Win10下选择“open project”崩溃闪退的问题
- 利用do文件方式进行modelsim仿真