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. socket简单实践

    目录 socket模块: family(socket家族) fileno=None 请忽略,特殊用途 socket模块: 把tcp/ip协议层的各种数据封装啦.数据发送.接收等通过代码已经给你封装 应 ...

  2. Docker快速部署gitlab应用实战

    Gitlab是一个用于仓库管理系统开源项目,使用Git作为代码管理工具,并在此基础上搭建的web服务,可通过web界面进行访问公开或者私人项目,拥有类似于GIthub类似的功能,能够浏览源代码,可管理 ...

  3. CNN中各类卷积总结:残差、shuffle、空洞卷积、变形卷积核、可分离卷积等

    CNN从2012年的AlexNet发展至今,科学家们发明出各种各样的CNN模型,一个比一个深,一个比一个准确,一个比一个轻量.我下面会对近几年一些具有变革性的工作进行简单盘点,从这些充满革新性的工作中 ...

  4. Remind Me

    创建2d人物:live2d 创建3d人物:adobe fuse

  5. 第06组 Beta冲刺(2/5)

    队名:拾光组 组长博客链接 作业博客链接 团队项目情况 燃尽图(组内共享) 组长:宋奕 过去两天完成了哪些任务 维护后端代码 学习后端架构 GitHub签入记录 接下来的计划 维护后端代码,跟进组员完 ...

  6. PokemonGo-LBS AR项目实战

    <Pokemon GO>在2016年发布,立即成为一款现象级手游,时至今日也是最成功的AR游戏!<Pokemon GO>目前仍旧吸引全球范围内大批玩家入驻,而这也使得该款游戏创 ...

  7. Java-JUC(十四):SimpleDateFormat是线程不安全的

    SimpleDateFormat是Java提供的一个格式化和解析日期的工具类,日常开发中应该经常会用到,但是由于它是线程不安全的,多线程公用一个SimpleDateFormat实例对日期进行解析.格式 ...

  8. Nginx配置简单基于域名的虚拟主机

    首先修改hosts文件,让浏览器在看到a.com或是www.a.com的网址时知道上哪里去找: # Copyright (c) 1993-2009 Microsoft Corp. # # This i ...

  9. LD SCore计算基因多效性、遗传度、遗传相关性(the LD Score regression intercept, heritability and genetic correlation)

    这篇文章是对之前啊啊救救我,为何我的QQ图那么飘(全基因组关联分析)这篇文章的一个补坑. LD SCore除了查看显著SNP位点对表型是否为基因多效性外,还额外补充了怎么计算表型的遗传度和遗传相关性. ...

  10. EIGENSTRAT计算PCA的显著性

    之前我写过一篇文章群体遗传分析分层校正,该选用多少个PCA?,里面提到可以通过EIGENSTRAT软件确定显著的主成分,后续就可以将显著的主成分加入协变量中. 这篇文章主要是讲如何通过EIGENSTR ...