GBDT(Gradient Boosting Decision Tree)迭代决策树

一、前言

阿里的比赛一直是跟着大神们的脚步,现在大家讨论最多的是gbrt(Gradient Boost Regression Tree),也就是GBDT(Gradient Boosting Decision Tree)迭代决策树。所以先看了决策树,见上一篇博客决策树。关于迭代决策树就主要是看了几篇博客,这里推荐几个和机器学习有关的博客:1、苏冉旭的博客,;2、leftnoteasy,有数学基础知识,还有常见算法和分布式。3、JerryLead。在阿里比赛尝试了gbrt果然效果很好,比lr要提高不少,的确lr是线性模型,gbrt是非线性的,只是自己的特征还不够好,希望接下来用maprudece构建出足够多足够好的特征。接下来对gbdt做个总结,主要是几个博客内容的整合。

二、数学准备——模型组合(Model Combining)之Gradient Boosting

GBDT和RF,都是将决策树的模型组合起来,效果比决策树要好。组合的方式有很多,随机化(比如RF),Boosting(比如GBDT)。关于此处详见博客机器学习中的数学(3)-模型组合(Model Combining)之Boosting与Gradient Boosting,boosting的思想就是用多个模型,每一个模型都在上一个的基础上将分错的数据权重提高一点在进行分类,

三、GBDT的概念

主要是注意GBDT的不同实现版本,详见博客GBDT(MART)概念简介

目前GBDT有两个不同的描述版本,两者各有支持者,读文献时要注意区分。残差版本把GBDT说成一个残差迭代树,认为每一棵回归树都在学习前N-1棵树的残差,Gradient版本把GBDT说成一个梯度迭代树,使用梯度下降法求解,认为每一棵回归树在学习前N-1棵树的梯度下降值,之前leftnoteasy的博客中介绍的为此版本。

第一个版本详见博客GBDT(MART) 迭代决策树入门教程 | 简介
第二个版本详见博客GBDT(Gradient Boosting Decision Tree) 没有实现只有原理

两篇博客都相当详细,懒得粘了。

四、代码剖析

1、总体框架:GBDT源码剖析

2、详细剖析:GBDT代码解读

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

〇.前序

            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》



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值