分享

GBDT(Gradient Boosting Decision Tree) 没有实现只有原理

 诸文馆 2014-12-05

            阿弥陀佛,好久没写文章,实在是受不了了,特来填坑,最近实习了(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》

         

          





    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多