机器学习训练营——机器学习爱好者的自由交流空间(入群联系qq:2279055353)

介绍

梯度提升(Gradient Boosting)是一种用于回归和分类问题的机器学习技术。它集成弱预测模型,典型的是决策树,产生一个强预测模型。该方法分阶段建立弱模型,在每个阶段通过优化一个任意可微的损失函数建立弱模型。下面,我们以简单的最小二乘回归解释梯度提升法的原理。

最小二乘法的目标是,通过最小化均方误差 1n∑i=1n(yi−y^i)2\dfrac{1}{n}\sum\limits_{i=1}^n (y_i-\hat{y}_i)^2n1​i=1∑n​(yi​−y^​i​)2, “教”一个模型 FFF 预测 y^=F(x)\hat{y}=F(x)y^​=F(x).

在梯度提升的每一个阶段 m, 1≤m≤Mm,\,1\le m\le Mm,1≤m≤M, 假设有一个不完美的模型 FmF_mFm​, 然后在 FmF_mFm​ 上增加一个估计量 hhh 改善它。即,Fm+1(x)=Fm(x)+h(x)F_{m+1}(x)=F_m(x)+h(x)Fm+1​(x)=Fm​(x)+h(x). 一个完美的 hhh 应该满足
Fm+1(x)=Fm(x)+h(x)=yF_{m+1}(x)=F_m(x)+h(x)=yFm+1​(x)=Fm​(x)+h(x)=y, 或者,等价地,h(x)=y−Fm(x)h(x)=y-F_m(x)h(x)=y−Fm​(x). 因此,梯度提升将在残差
y−Fm(x)y-F_m(x)y−Fm​(x) 上拟合 hhh. 将这种统计思想从均方误差推广到损失函数,残差是均方误差损失函数
12(y−F(x))2\dfrac{1}{2}(y-F(x))^221​(y−F(x))2 关于 F(x)F(x)F(x) 的负梯度(negative gradients). 因此,梯度提升实际上是一种梯度下降算法。

算法

在很多有监督学习的问题里,假设输出变量 yyy, 由输入变量组成的向量 xxx, 对应的分布 P(x,y)\mathcal{P}(x, y)P(x,y). 训练集 {(x1,y1),(x2,y2),…,(xn,yn)}\{(x_1, y_1), (x_2, y_2), \dots, (x_n, y_n)\}{(x1​,y1​),(x2​,y2​),…,(xn​,yn​)}.
假设损失函数 L(y,F(x))L(y, F(x))L(y,F(x)), 我们的目标是找到 F(x)F(x)F(x) 的近似 F^(x)\hat{F}(x)F^(x), 使得
F^=arg⁡min⁡FEx,y[L(y,F(x))]\hat{F}=\arg\min_{F}\mathbb{E}_{x, y}[L(y, F(x))]F^=argFmin​Ex,y​[L(y,F(x))]

梯度提升方法寻找的近似 F^(x)\hat{F}(x)F^(x) 是 hi(x)h_i(x)hi​(x) 的加权和:
F^(x)=∑i=1Mγihi(x)+const\hat{F}(x)=\sum\limits_{i=1}^M \gamma_i h_i(x) + constF^(x)=i=1∑M​γi​hi​(x)+const

称这些 hi(x)∈Hh_i(x)\in \mathcal{H}hi​(x)∈H 为基学习器或弱学习器(weak learns)。

根据经验风险最小化原则,该方法试图找到 F^(x)\hat{F}(x)F^(x), 使得在训练集上最小化损失函数的平均值,即,最小化经验风险。具体上说,从一个常函数 F0(x)F_0(x)F0​(x) 开始,逐渐优化:

F0(x)=arg⁡min⁡γ∑i=1nL(yi,γ),F_0(x)=\arg\min_{\gamma}\sum\limits_{i=1}^n L(y_i, \gamma),F0​(x)=argγmin​i=1∑n​L(yi​,γ),

Fm(x)=Fm−1(x)+arg⁡min⁡hm∈H[∑i=1nL(yi,Fm−1(xi)+hm(xi)]F_m(x)=F_{m-1}(x)+\arg\min_{h_m\in\mathcal{H}}[\sum\limits_{i=1}^n L(y_i, F_{m-1}(x_i)+h_m(x_i)]Fm​(x)=Fm−1​(x)+arghm​∈Hmin​[i=1∑n​L(yi​,Fm−1​(xi​)+hm​(xi​)]

对任意损失函数 LLL, 在每一步选择出最优的 hhh 是计算上不可行的优化问题。因此,我们给出一个简化的过程。它的思想是使用梯度下降法(gradient descent)解决这个最小化的问题。

如果考虑连续的情况,即,H\mathcal{H}H 是 R\mathbb{R}R 上的可微函数集,我们根据下面的方程优化模型:

Fm(x)=Fm−1(x)−γm∑i=1n▽Fm−1L(yi,Fm−1(xi)),F_m(x)=F_{m-1}(x)-\gamma_m\sum\limits_{i=1}^n\triangledown_{F_{m-1}}L(y_i, F_{m-1}(x_i)),Fm​(x)=Fm−1​(x)−γm​i=1∑n​▽Fm−1​​L(yi​,Fm−1​(xi​)),
γm=arg⁡min⁡γ∑i=1nL(yi,Fm−1(xi)−γ▽Fm−1L(yi,Fm−1(xi)))\gamma_m=\arg\min_{\gamma}\sum\limits_{i=1}^n L(y_i, F_{m-1}(x_i)-\gamma\triangledown_{F_{m-1}}L(y_i, F_{m-1}(x_i)))γm​=argγmin​i=1∑n​L(yi​,Fm−1​(xi​)−γ▽Fm−1​​L(yi​,Fm−1​(xi​)))

注意到,该方法是一个启发式的(heuristic), 因此不能产生一个精确解,而是一个近似解。下面,我们把该方法写成伪代码:

梯度提升树

梯度提升算法普遍使用决策树(特别是分类与回归树)作为基学习器。具体上说,在算法的第 mmm 步,在伪残差上拟合一棵决策树 hm(x)h_m(x)hm​(x). 令 JmJ_mJm​ 是树的叶子节点数量,树将输入空间分割成
JmJ_mJm​ 个不交的区域 R1m,R2m,…,RJm,mR_{1m}, R_{2m}, \dots, R_{J_m,m}R1m​,R2m​,…,RJm​,m​, 在每个区域预测一个常数值,输出

hm(x)=∑j=1Jmbjm1Rjm(x)h_m(x)=\sum\limits_{j=1}^{J_m}b_{jm}\mathbf{1}_{R_{jm}}(x)hm​(x)=j=1∑Jm​​bjm​1Rjm​​(x)

其中,bjmb_{jm}bjm​ 是在区域 RjmR_{jm}Rjm​ 上的预测值。

树的规模

树的叶子节点数 JJJ, 作为模型的参数可以随数据调整。它控制模型里的变量的最大可容许交互水平。J=2J=2J=2时,不允许变量之间交互;J=3J=3J=3 时,模型可以包括的交互效应至多两个变量,以此类推。

Gradient Boosting算法理论相关推荐

  1. python 梯度提升树_梯度提升方法(Gradient Boosting)算法案例

    GradientBoost算法 python实现,该系列文章主要是对<统计学习方法>的实现. 完整的笔记和代码以上传到Github,地址为(觉得有用的话,欢迎Fork,请给作者个Star) ...

  2. Gradient Boosting算法

    1. 简介 GBDT是boosting的一种方法 1.1 基本原理 训练一个模型m1,产生错误e1 针对e1训练一个模型m2,产生错误e2 针对e2训练第三个模型m3,产生错误e3 - 最终预测结果是 ...

  3. 3. 机器学习中为什么需要梯度下降_梯度提升(Gradient Boosting)算法

    本文首发于我的微信公众号里,地址:梯度提升(Gradient Boosting)算法 本文禁止任何形式的转载. 我的个人微信公众号:Microstrong 微信公众号ID:MicrostrongAI ...

  4. 机器学习笔记之集成学习(四)Gradient Boosting

    机器学习笔记之集成学习--Gradient Boosting 引言 回顾: Boosting \text{Boosting} Boosting算法思想与 AdaBoost \text{AdaBoost ...

  5. 机器学习 —— Boosting算法

    Boosting算法(提升法) 算法的三个要素 (1)函数模型:Boosting的函数模型是叠加型的,即 F(x)=∑i=1kfi(x;θi)F(x)=∑i=1kfi(x;θi) F(x)=\sum_ ...

  6. boosting算法的分类

    https://www.cnblogs.com/liuq/p/9947764.html 另外高维回归,L2boosting的结果和lasso相近,可能说明L2boosting可以解释为某种L1正则化的 ...

  7. 机器学习实战之路 —— 4 Boosting算法

    机器学习实战之路 -- 4 Boosting算法 1. Boosting算法概述 2. 主要算法实现 2.1 AdaBoost 2.2 GBDT 2.3 XGBoost 3. 实战 - 鸢尾花数据集分 ...

  8. R语言使用caret包构建gbdt模型(随机梯度提升树、Stochastic Gradient Boosting )构建回归模型、通过method参数指定算法名称

    R语言使用caret包构建gbdt模型(随机梯度提升树.Stochastic Gradient Boosting )构建回归模型.通过method参数指定算法名称 目录

  9. 复盘:GBDT,梯度提升决策树,Gradient Boosting Decision Tree,堪称最好的算法之一

    复盘:GBDT,梯度提升决策树,Gradient Boosting Decision Tree,堪称最好的算法之一 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以 ...

  10. GBDT(Gradient Boosting Decision Tree

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

最新文章

  1. UICollectionView的headerView、footerView使用以及与UITableView加载headerView、footerView的区别...
  2. ggplot01:R语言坐标轴离散、连续与图例离散连续的区分
  3. Apache+Tomcat+Mysql+php整合jsp,php
  4. JavaScript单行代码
  5. 正则表达式(Regular Expressions)
  6. java io字符输出流_JAVA IO 字符输入流与输出流总结说明
  7. SAP GUI security setting on local file access
  8. 安卓TCP通信版本2
  9. 【报告分享】2020巨量引擎营销通案.pdf(附下载链接)
  10. JAVA常用算法一:二分查找【递归 or 非递归】
  11. 在InstallShield中发布单一的Setup.exe文件
  12. 易用性强的数据库管理工具DBeaverEE v22.0.1
  13. GB2312简体中文编码表(转)
  14. SSO单点登录原理详解(从入门到精通)
  15. matlab画区间柱状图,科学网—Matlab画柱状图 - 高淑敏的博文
  16. java poi 自动行高,20191012——POI设置单元格自动行高(思路)
  17. Arcpy ERROR 999999: 执行函数时出错解决方法
  18. 笔记本电脑计算机里面怎么管理,笔记本电脑如何分区,详细教您笔记本电脑怎么分区...
  19. Flowable工作流之查询历史流程信息
  20. 错误 bpbrm(PID=7552) 从客户端 - Script exited with status = 1 the requested operat

热门文章

  1. Linux常见问题解答--如何修复“tar:Exiting with failure status due to previous errors”
  2. C++中如何使类不能继承
  3. “形象代言人”与“抽风式管理”
  4. AjaxUpload
  5. ASP.NET2.0(学习第一天)
  6. 华为/华三IS-IS单区域配置
  7. hash通信(python多线程应用)采用md5加密
  8. tomcat安全加固配置手册
  9. JVM-绘图展现字节码执行引擎执行过程
  10. Linux/Unix/Mac OS下的远程访问和文件共享方式