梯度提升决策树

英文是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表示当前树的序号。

步骤

  1. 初始化f0(x)=argminγ∑i=1NL(yi,γ)f_0(x) = argmin_\gamma \sum_{i=1}^N L(y_i, \gamma)f0​(x)=argminγ​∑i=1N​L(yi​,γ)

  2. 对于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∑N​L(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)+γm​hm​(x)

  1. 输出最终的函数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)。

场景

近年来多被用于搜索排序。

优点

  1. 通过迭代学习残差,提高模型精确度

缺点

  1. 耗时较长,模型无法并行运行
  2. 超参数MMM即决策树的数量非常重要,不好调整
  3. 容易出现过拟合

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∑M​hj​(x)f(x)m​=j=1∑m​hj​(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=1N​L(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∑m​fk​(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:评判标准,根据数据的不同进行设置

场景

优点

  1. 不需要过多特征工程
  2. 能够得到特征重要性
  3. 鲁棒性强,较少受到异常点(outliers)的影响
  4. 速度快

缺点

  1. 难以可视化
  2. 模型参数多,难以进行微调

Reference

  • NLP实战高手课,第三章,王然,极客时间
  • GBDT: 梯度提升决策树,Siyue Lin,简书
  • Demystifying Maths of Gradient Boosting, Krishna Kumar Mahto, towards data science

梯度提升决策树GBDT及其优秀改进XGBoost的浅析相关推荐

  1. 机器学习 の04 梯度提升决策树GBDT

    机器学习 の04 梯度提升决策树GBDT GBDT的背景知识 集成学习(ensemble learning) Bagging(Bootstrap Aggregating)算法 Boosting提升算法 ...

  2. 简单易学的机器学习算法——梯度提升决策树GBDT

    梯度提升决策树(Gradient Boosting Decision Tree,GBDT)算法是近年来被提及比较多的一个算法,这主要得益于其算法的性能,以及该算法在各类数据挖掘以及机器学习比赛中的卓越 ...

  3. [机器学习]梯度提升决策树--GBDT

    概述 GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由 ...

  4. 机器学习之梯度提升决策树(GBDT)

    1.GBDT算法简介 GBDT(Gradient Boosting Decision Tree)是一种迭代的决策树算法,由多棵决策树组成,所有树的结论累加起来作为最终答案,我们根据其名字(Gradie ...

  5. 【机器学习】深入剖析梯度提升决策树(GBDT)分类与回归

    1. 梯度提升决策树概述 梯度提升决策树(Gradient Boosting Decision Tree,GBDT)是以决策树为基学习器的一种Boosting算法,它在每一轮迭代中建立一个决策树,使当 ...

  6. 梯度提升决策树(GBDT)与XGBoost、LightGBM

    20211224 [机器学习算法总结]XGBoost_yyy430的博客-CSDN博客_xgboost xgboost参数 默认:auto.XGBoost中使用的树构造算法.可选项:auto,exac ...

  7. 3. 梯度提升决策树(GBDT)详解

    一.提升树 以决策树为基函数的提升方法称为提升树.其中,分类问题采用二叉分类树,回归问题采用二叉回归树.sklearn中的提升树采用的是CART树.模型可以表示为决策树的加法模型: 其中,表示决策树, ...

  8. GBDT:梯度提升决策树

    From http://blog.csdn.net/suranxu007/   AND     http://www.jianshu.com/p/005a4e6ac775 综述   GBDT(Grad ...

  9. 机器学习-集成学习-梯度提升决策树(GBDT)

    目录 1. GBDT算法的过程 1.1 Boosting思想 1.2 GBDT原理 需要多少颗树 2. 梯度提升和梯度下降的区别和联系是什么? 3. GBDT的优点和局限性有哪些? 3.1 优点 3. ...

最新文章

  1. riverplot绘制桑基图
  2. 总结 - 沉寂了大半年后的又一次
  3. ASIO协程彻底转变你的思维
  4. 在数据段DATA中有两个字数据X和Y, 假设X=1122H, Y=3344H, 编程求两个字的和,结果存放到Z单元中.
  5. oracle_j000,Process J000 died, kkjcre1p: unable to spawn jobq slave process引起的宕机
  6. 如何解决Android SDK无法下载Package的问题(.net)
  7. Spring 框架学习 —— 容器
  8. git创建分支合并到master分支步骤
  9. AI市场需求变化了,应届生们却还停留在几年前的认知上...
  10. SpringBoot-Learning-作者:翟永超
  11. 使用Apache搭建Web网站服务器
  12. 一级b仅html格式保存,一级B考试模拟试题-第一套,DOS版本:6.0
  13. Linux系统配置及服务管理_02章_文件和用户管理
  14. 挺带劲!这款免费开源的监控系统真强大~
  15. 厦门大学437社会工作实务考研参考书目
  16. 数学之英文写作——基本中英文词汇(一般术语、算术与代数的常用词汇)
  17. 万字长文详解 Go 程序是怎样跑起来的?| CSDN 博文精选
  18. java中文数字与阿拉伯数字相互转换
  19. 使用OpenDNS解决DNS域名劫持
  20. 区块链技术之共识机制

热门文章

  1. 浅谈JS原型与原型链(一)
  2. ios 工具大全,最全框架
  3. python smtp模块发送邮件
  4. Oracle 分区表的新增、修改、删除、合并。普通表转分区表方法
  5. CXF发布restful WebService的入门例子(服务器端)
  6. 《Sibelius 脚本程序设计》连载(四十七) - 4.17 BracketsAndBraces 与 Bracket
  7. NA,NP,IE学习之路
  8. 如何安装apache服务器最新,云服务器如何安装apache
  9. Xilinx_ISE 14.7在Win10下选择“open project”崩溃闪退的问题
  10. 利用do文件方式进行modelsim仿真