Boost是集成学习方法中的代表思想之一,核心的思想是不断的迭代。boost通常采用改变训练数据的概率分布,针对不同的训练数据分布调用弱学习算法学习一组弱分类器。在多次迭代的过程中,当前次迭代所用的训练数据的概率分布会依据上一次迭代的结果而调整。也就是说训练数据的各样本是有权重的,这个权重本身也会随着迭代而调整。Adaboost(后面补一篇介绍这个的文章吧)在迭代的过程中通过不断调整数据分布的权重来达到提高性能的目的,GBM(Gradient Boosting Machine)则是在迭代的过程中,新的模型建立在之间建立模型损失函数的梯度下降方向上,为什么这么做是有效的,数学语言是最严谨的,让我们从数学的角度出发理解一下。

  从数值优化的角度入手。对于加性模型$F(X|\Theta) $,我们通过优化$\Theta$得到模型的最优解

$$ \theta^* = \mathop{\arg\min}_{\theta} \ \mathrm{L} (\theta).$$

其中,$\mathrm{L}(\theta) = E_(y,x)\mathrm{L}(y,F(X|\Theta))$ ,那么对于$F(X|\Theta) $其最优解为$F^*(x) =F(x|\Theta^*) $ 。由于$F(X|\Theta) $是个加性模型,通常有$P^* = \sum_{i = 0}^m p_i$。在优化P的过程中,对于迭代的第m步骤,我们以前获得了m-1个模型,在计算第m个模型的时候,我们要对前m-1个模型的集成求梯度,$g_m$为求得的梯度如下所示$$g_m=\{g_{jm}\} = \{{\big[\frac{\partial{\phi(P)}}{\partial{P_j}}\big]_{p = p_{(m-1)}}}\}$$其中$$P_{m-1} = \sum_{i=0}^{m-1} P_i$$求出梯度之后,我们更新$$p_m = -\rho_mg_m$$其中,$$\rho_m = \mathop{\arg\min}_\rho\ L(P_{m-1}-\rho{g_m})$$

简单整理一下,对于加性模型$F(X|\Theta) $,我们通过对损失函数$L(\theta)$求得$\theta$沿着最优解下降的方向$g_m$,为了确定下降的步长,也就是$\rho$,我们构造一个关于$P_{m-1}+p_m$的损失函数,其中$p_m = -\rho{g_m}$。确定了梯度$g_m$以及在该梯度下的步长$\rho$,$p_m$也就求解出来了。

  上述的推导过程中,建立在训练的数据集是连续无穷的情况下,对于有限的数据集合在计算$g_m$的过程中,求出的最优解$F^*(X)$对应的点不一定是我们训练集中的点。简单来说就是对于前m-1个模型计算出来的梯度对于有限的训练数据集,并不能直接作为新的基学习器的梯度方向。为了解决这个问题,论文预先假设一个先验分布$h(x_i;a)$,通过最小化损失函数的方式让$h(x_i;a)$逼近预先计算好的梯度$g_m$,论文中用的损失函数是MSE,过程如下所示$$a_m=\mathop{\arg\min}_{a,\beta} \sum_{i=1}^N[{-g_m(x_i)-\beta{h(x_i;a)}}]^2 $$

整体的GBM算法流程如下所示

第三步对应的便是求前m-1个模型的梯度, 第四步根据球出来的梯度通过最小化损失函数的方法让基模型(h(x;a))逼近梯度下降的方向,第五步也是通过最小化集成的函数预测结果与label的损失也确定第k个基模型的权重。

紧扣最小化似然函数这个过程就不难理解这么做的缘由了。

2019.9.7 在实际理解GBM的调参过程中发现对CART如何学习以及

如何影响CART的参数的学习并没有理解清楚.
首先要弄清楚CART学习的参数究竟是什么,这里指的是最优分裂属性以及分裂属性值的选择,外界的干预通过label影响最优划分属性的选择,具体的介绍见:https://blog.csdn.net/niuniuyuh/article/details/76922210
 
 



















论文笔记:GREEDY FUNCTION APPROXIMATION: A GRADIENT BOOSTING MACHINE的更多相关文章

  1. Greedy Function Approximation:A Gradient Boosting Machine

    https://statweb.stanford.edu/~jhf/ftp/trebst.pdf page10 90% to 95% of the observations were often de ...

  2. 论文笔记:LightGBM: A Highly Efficient Gradient Boosting Decision Tree

    引言 GBDT已经有了比较成熟的应用,例如XGBoost和pGBRT,但是在特征维度很高数据量很大的时候依然不够快.一个主要的原因是,对于每个特征,他们都需要遍历每一条数据,对每一个可能的分割点去计算 ...

  3. Tree - Gradient Boosting Machine with sklearn source code

    This is the second post in Boosting algorithm. In the previous post, we go through the earliest Boos ...

  4. Python中Gradient Boosting Machine(GBM)调参方法详解

    原文地址:Complete Guide to Parameter Tuning in Gradient Boosting (GBM) in Python by Aarshay Jain 原文翻译与校对 ...

  5. 机器学习--Gradient Boosting Machine(GBM)调参方法详解

    一.GBM参数 总的来说GBM的参数可以被归为三类: 树参数:调节模型中每个决策树的性质 Boosting参数:调节模型中boosting的操作 其他模型参数:调节模型总体的各项运作 1.树参数 现在 ...

  6. 机器学习中的数学(3)-模型组合(Model Combining)之Boosting与Gradient Boosting

    版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...

  7. 模型组合(Model Combining)之Boosting与Gradient Boosting

    版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...

  8. A Gentle Introduction to the Gradient Boosting Algorithm for Machine Learning

    A Gentle Introduction to the Gradient Boosting Algorithm for Machine Learning by Jason Brownlee on S ...

  9. How to Configure the Gradient Boosting Algorithm

    How to Configure the Gradient Boosting Algorithm by Jason Brownlee on September 12, 2016 in XGBoost ...

随机推荐

  1. PyCharm中Dictionary与Python package的区别

    Dictionary Dictionary在pycharm中就是一个文件夹,放置资源文件,对应于在进行JavaWeb开发时用于放置css/js文件的目录,或者说在进行物体识别时,用来存储背景图像的文件 ...

  2. 农场派对(party)(信息学奥赛一本通 1497)

    [题目描述] N(1≤N≤1000)头牛要去参加一场在编号为 x(1≤x≤N) 的牛的农场举行的派对.有 M(1≤M≤100000) 条有向道路,每条路长 Ti(1≤Ti≤100):每头牛都必须参加完 ...

  3. Java两个数的和

    给你一个整数数组, 返回两个数的指数,使他们加起来等于给定的数. 你可以假设只有一个解, 并且相同的元素不会用两次. 比如: 给定数组 = [2, 7, 11, 15], 目标数 = 9, 因为[0] ...

  4. mysql 字段拼接

    mysql> select concat(name,"**",id) as test from test; +----------------+ | test | +---- ...

  5. hotspot编译

    "AA=="1",==", /usr/bin/make -s VERBOSE="-s" LOG_LEVEL="warn" ...

  6. 刷题记录:[De1CTF 2019]SSRF Me

    目录 刷题记录:[De1CTF 2019]SSRF Me 一.涉及知识点 1.MD5长度扩展攻击 2.Python 2.x - 2.7.16 urllib.fopen支持local_file导致LFI ...

  7. [C++] namespace命名空间和using用法

    命名空间namespace:指标识符的各种可见范围. C++标准程序库中的所有标识符都被定义在一个std的namespace,这就是程序开始添加 using namespace std; 的原因. 很 ...

  8. SpringMVC(中)

    一.传值方式 (1)Map Controller @Controller public class MyController { @RequestMapping("first") ...

  9. 第06组 Alpha冲刺(4/4)

    队名:福大帮 组长博客链接:https://www.cnblogs.com/mhq-mhq/p/11913386.html 作业博客 :https://edu.cnblogs.com/campus/f ...

  10. C# System.Web.Mail.MailMessage 发邮件

    C# System.Web.Mail.MailMessage 发邮件 新建控制台Console项目,然后添加 System.Web引用 代码如下: using System; using System ...