阿弥陀佛。好久没写文章,实在是受不了了。特来填坑,近期实习了(ting)解(shuo)到(le)非常多工业界经常使用的算法。诸如GBDT,CRF,topic model的一些算法等。也看了不少东西。有时间能够具体写一下,而至于实现那真的是没时间没心情再做了,等回学校了再说吧。今天我们要说的就是GBDT(Gradient Boosting Decision Tree)

=======================================================================

〇.前序

            GBDT是看一个大牛团队做推荐算法比赛的时候拿这个模型来处理最后得到的全部的feature并输出结果的模型。想到自己曾经天真地拿着SVD单模型调參參加这类比赛的时候真是……闻者伤心,听着流泪啊,别的不谈。这次讲GBDT主要是由于了解GBDT的一些前置条件我都在博客里写过,能够直接跳到关键部分开写……进入正题吧

一.前置条件

       1.决策树 

            參看我曾经的一篇博客:http://blog.csdn.net/dark_scope/article/details/13168827

            尽管里面写的都是决策分类树。而我们这次主讲的是决策回归树,只是事实上都差点儿相同,决策回归树呢就是把分到某个分支上的全部训练例子的目标值求平均或者取中位数返回而已。

       2.boosting

             一般来说哦讲boosting都以adaboost这个特例開始讲,所以你能够先看一看我的这篇博客:AdaBoost--从原理到实现

             然后我们来接着讲boosting……新开一章吧。这个事实上是主要内容

二.boosting 提升方法

         提升方法事实上是一个比adaboost概念更大的算法,由于adaboost能够表示为boosting的前向分布算法(Forward stagewise additive modeling)的一个特例。boosting终于能够表示为:

                                    

         当中的w是权重,Φ是弱分类器(回归器)的集合,事实上就是一个加法模型(即基函数的线性组合)

         前向分布算法 实际上是一个贪心的算法,也就是在每一步求解弱分类器Φ(m)和其參数w(m)的时候不去改动之前已经求好的分类器和參数:

         (图自《统计学习方法》)

       为了表示方便。我们以后用β取代w进行描写叙述了,图中的b是之前说的Φ弱分类器

        OK,这也就是提升方法(之前向分布算法)的大致结构了。能够看到当中存在变数的部分事实上就是极小化损失函数 这关键的一步了。怎样选择损失函数决定了算法的终于效果(名字)……这一步你能够看出算法的“趋势”。以后再单独把“趋势”拿出来说吧。由于我感觉理解算法的关键之中的一个就是理解算法公式的“趋势”

三.各种提升方法

        不同的损失函数和极小化损失函数方法决定了boosting的终于效果。我们如今来说几个常见的boosting:

        

        (图自 Machine Learning A Probabilistic Perspective)对于二分类问题来说:当中πi=sigm(2f(xi)) ,y~i∈{-1,+1},yi∈{0,1}

         广义上来讲,所谓的Gradient Boosting 事实上就是在更新的时候选择梯度下降的方向来保证最后的结果最好。一些书上讲的“残差”
方法事实上就是L2Boosting吧,由于它所定义的残差事实上就是L2Boosting的Derivative。接下来我们着重讲一下弱回归器(不知道叫啥了,自己编的)是决策树的情况,也就是GBDT。(不知道为何上表的Absolute被命名为了Gradient boosting,关于Gradient boosting在后面会有更仔细的介绍)

四.GBDT

         对于决策树,事实上能够把它表示为下式。即是把特征空间划分为多个区域,每一个区域返回某个值作为决策树的预測值

                                          

          当中Rj是区域,γ是返回值,I()在当中的条件成立情况下为1。否则为0.当中的參数J能够大概看做树的深度的一个表示,这是一个待调的參数

我们知道Gradient Boosting最重要的一步就是去拟合下式:

 
 

对于不同的Loss function,其梯度有不同的表达式:

(图自The Elements of Statisic Learning)

前三种相应的loss function例如以下图:当中Huber是低于某个值表现为square error,高于某个值则表现为线性

以下是GBDT的大概框架:(Gradient
Tree Boosting应该是GBDT还有一种说法,有误请指正)

(算法自The Elements of Statistical Learning )

整个框架描写叙述得事实上已经非常清晰了,就不在这里赘述了,总之所谓Gradient就是去拟合Loss function的梯度,将其作为新的弱回归树增加到总的算法中就可以。

五.尾巴

本文大概写了一下GBDT的框架和原理。兴许事实上还有涉及到參数的选择(如树的深度)。正则化(regularization)等内容。主要是在实现的时候要注意。有时间会写一份toy代码出来。

【Reference】

【1】《The Elements of Statistical Learning 》

【2】《统计学习方法》

【3】《Machine Learning A Probabilistic Perspective》

         

          

GBDT(Gradient Boosting Decision Tree) 没有实现仅仅有原理的更多相关文章

  1. GBDT(Gradient Boosting Decision Tree)算法&协同过滤算法

    GBDT(Gradient Boosting Decision Tree)算法参考:http://blog.csdn.net/dark_scope/article/details/24863289 理 ...

  2. CART分类与回归树与GBDT(Gradient Boost Decision Tree)

    一.CART分类与回归树 资料转载: http://dataunion.org/5771.html        Classification And Regression Tree(CART)是决策 ...

  3. Gradient Boosting Decision Tree学习

    Gradient Boosting Decision Tree,即梯度提升树,简称GBDT,也叫GBRT(Gradient Boosting Regression Tree),也称为Multiple ...

  4. 梯度提升树 Gradient Boosting Decision Tree

    Adaboost + CART 用 CART 决策树来作为 Adaboost 的基础学习器 但是问题在于,需要把决策树改成能接收带权样本输入的版本.(need: weighted DTree(D, u ...

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

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

  6. 后端程序员之路 10、gbdt(Gradient Boosting Decision Tree)

    1.GbdtModelGNode,含fea_idx.val.left.right.missing(指向left或right之一,本身不分配空间)load,从model文件加载模型,xgboost输出的 ...

  7. Gradient Boosting Decision Tree

    GBDT中的树是回归树(不是分类树),GBDT用来做回归预测,调整后也可以用于分类.当采用平方误差损失函数时,每一棵回归树学习的是之前所有树的结论和残差,拟合得到一个当前的残差回归树,残差的意义如公式 ...

  8. GBDT(Gradient Boost Decision Tree)

    原文:http://blog.csdn.net/aspirinvagrant/article/details/48415435 GBDT,全称Gradient Boosting Decision Tr ...

  9. Gradient Boost Decision Tree(&Treelink)

    http://www.cnblogs.com/joneswood/archive/2012/03/04/2379615.html 1.      什么是Treelink Treelink是阿里集团内部 ...

随机推荐

  1. Cracking The Coding Interview 2.0 单链表

    #include <iostream> #include <string> using namespace std; class linklist { private: cla ...

  2. C++基础知识:类的静态成员

    1.普通成员变量通过对象名能够访问public成员变量每个对象都可以有只属于自己的成员变量成员变量不能在对象之间共享 2.从命名空间的角度:类的静态成员只是类这个命名空间中的全局变量和全局函数不同之处 ...

  3. 谷歌浏览器慎用有道词典插件(<audio></audio>) (转载)

    谷歌浏览器慎用有道词典插件(<audio></audio>)  原文 :http://blog.csdn.net/u010556394/article/details/7112 ...

  4. DevExpress ASP.NET Core Controls v18.2新功能详解

    行业领先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式发布,本站将以连载的形式为大家介绍新版本新功能.本文将介绍了DevExpress ASP.NET Core ...

  5. MyEclipse教程:使用UML创建模块库——第二部分(一)

    MyEclipse 在线订购年终抄底促销!火爆开抢>> [MyEclipse最新版下载] UML2建模文件存储在建模存储库中,建模可用于生成Java代码,或者可以从代码生成模型. 本教程介 ...

  6. Linux alias别名命令

    首先介绍一下命令的别名,怎么查看的呢? 咱们使用which命令就可以查看的到它完整的命令是怎样的 [root@master ~]# which ls alias ls='ls --color=auto ...

  7. python flask大型项目目录

    Hello World 作者背景 应用程序简介 要求 安装 Flask 在 Flask 中的 “Hello, World” 下一步? 模板 回顾 为什么我们需要模板 模板从天而降 模板中控制语句 模板 ...

  8. 图片宽度为2000px,使图片在电脑不同分辨率下都水平居中,不压缩。

    <div style="postion:relative;width:100%;overflow:hidden;"> <img src="路径" ...

  9. Puppet的一些奇技淫巧

    puppet这个工具真的很神奇,先不说商业版有哪些黑科技,单是开源版本就有很多可能让你摸不着头脑的地方,下面来列举一下puppet是怎么查找puppet server的 其实很简单,puppet ag ...

  10. zookeeper和dubbo中出现的问题

    报错出现timeout关键字 解决:在服务发布时,添加timeout字段 <!-- 5.服务发布 --> <dubbo:service interface="com.sxt ...