【机器学习】迭代决策树GBRT(渐进梯度回归树)

1、决策树模型组合

        单决策树C4.5因为功能太简单,而且很是容易出现过拟合的现象,因而引伸出了许多变种决策树,就是将单决策树进行模型组合,造成多决策树,比较典型的就是迭代决策树GBRT随机森林RF面试

        在最近几年的paper上,如iccv这种重量级会议,iccv 09年的里面有很多文章都是与Boosting和随机森林相关的。模型组合+决策树相关算法有两种比较基本的形式:随机森林RF与GBDT,其余比较新的模型组合+决策树算法都是来自这两种算法的延伸。算法

       核心思想:其实不少“渐进梯度”Gradient Boost都只是一个框架,里面能够套用不少不一样的算法。网络

 

        首先说明一下,GBRT这个算法有不少名字,但都是同一个算法:框架

GBRT (Gradient BoostRegression Tree) 渐进梯度回归树机器学习

GBDT (Gradient BoostDecision Tree) 渐进梯度决策树函数

MART (MultipleAdditive Regression Tree) 多决策回归树学习

Tree Net决策树网络搜索引擎

 

2、GBRT

        迭代决策树算法,在阿里内部用得比较多(因此阿里算法岗位面试时可能会问到),由多棵决策树组成,全部树的输出结果累加起来就是最终答案。它在被提出之初就和SVM一块儿被认为是泛化能力(generalization)较强的算法。近些年更由于被用于搜索排序的机器学习模型而引发你们关注。spa

        GBRT是回归树,不是分类树。其核心就在于,每一棵树是从以前全部树的残差中来学习的。为了防止过拟合,和Adaboosting同样,也加入了boosting这一项。排序

  关于GBRT的介绍能够能够参考:GBDT(MART) 迭代决策树入门教程 | 简介

 

        提起决策树(DT, DecisionTree)不要只想到C4.5单分类决策树,GBRT不是分类树而是回归树

决策树分为回归树分类树

        回归树用于预测实数值,如明天温度、用户年龄

        分类树用于分类标签值,如晴天/阴天/雾/雨、用户性别

        注意前者结果加减是有意义的,如10岁+5岁-3岁=12岁,后者结果加减无心义,如男+女=究竟是男仍是女?GBRT的核心在于累加全部树的结果做为最终结果,而分类树是没有办法累加的。因此GBDT中的树都是回归树而非分类树。

 

        第一棵树是正常的,以后全部的树的决策全是由残差(这次的值与上次的值之差)来做决策。

 

3、算法原理


0.给定一个初始值

1.创建M棵决策树(迭代M次)

2.对函数估计值F(x)进行Logistic变换

3.对于K各分类进行下面的操做(其实这个for循环也能够理解为向量的操做,每一个样本点xi都对应了K种可能的分类yi,因此yi,F(xi),p(xi)都是一个K维向量)

4.求得残差减小的梯度方向

5.根据每一个样本点x,与其残差减小的梯度方向,获得一棵由J个叶子节点组成的决策树

6.当决策树创建完成后,经过这个公式,能够获得每一个叶子节点的增益(这个增益在预测时候用的)

       每一个增益的组成其实也是一个K维向量,表示若是在决策树预测的过程当中,若是某个样本点掉入了这个叶子节点,则其对应的K个分类的值是多少。好比GBDT获得了三棵决策树,一个样本点在预测的时候,也会掉入3个叶子节点上,其增益分别为(假设为3分类问题):

(0.5, 0.8, 0.1), (0.2, 0.6, 0.3), (0.4, .0.3, 0.3),那么这样最终获得的分类为第二个,由于选择分类2的决策树是最多的。

7.将当前获得的决策树与以前的那些决策树合并起来,做为一个新的模型(跟6中的例子差很少)

 

--------------------------------------------------------------------------------------------------------------

        仍是年龄预测,简单起见训练集只有4我的,A,B,C,D,他们的年龄分别是14,16,24,26。其中A、B分别是高一和高三学生;C,D分别是应届毕业生和工做两年的员工。若是是用一棵传统的回归决策树来训练,会获得以下图1所示结果:


        如今咱们使用GBDT来作这件事,因为数据太少,咱们限定叶子节点作多有两个,即每棵树只有一个分枝,而且限定只学两棵树。咱们会获得以下图2所示结果: 


        在第一棵树分枝和图1同样,因为A,B年龄较为相近,C,D年龄较为相近,他们被分为两拨,每拨用平均年龄做为预测值。此时计算残差(残差的意思就是: A的预测值 + A的残差 = A的实际值),因此A的残差就是16-15=1(注意,A的预测值是指前面全部树累加的和,这里前面只有一棵树因此直接是15,若是还有树则须要都累加起来做为A的预测值)。进而获得A,B,C,D的残差分别为-1,1,-1,1。而后咱们拿残差替代A,B,C,D的原值,到第二棵树去学习,若是咱们的预测值和它们的残差相等,则只需把第二棵树的结论累加到第一棵树上就能获得真实年龄了。这里的数据显然是我能够作的,第二棵树只有两个值1和-1,直接分红两个节点。此时全部人的残差都是0,即每一个人都获得了真实的预测值。 

        换句话说,如今A,B,C,D的预测值都和真实年龄一致了。

A: 14岁高一学生,购物较少,常常问学长问题;预测年龄A = 15 – 1 = 14

B: 16岁高三学生;购物较少,常常被学弟问问题;预测年龄B = 15 + 1 = 16

C: 24岁应届毕业生;购物较多,常常问师兄问题;预测年龄C = 25 – 1 = 24

D: 26岁工做两年员工;购物较多,常常被师弟问问题;预测年龄D = 25 + 1 = 26  

        那么哪里体现了Gradient呢?其实回到第一棵树结束时想想,不管此时的cost function是什么,是均方差仍是均差,只要它以偏差做为衡量标准,残差向量(-1, 1, -1, 1)都是它的全局最优方向,这就是Gradient。 


4、GBRT适用范围

        该版本的GBRT几乎可用于全部的回归问题(线性/非线性),相对logistic regression仅能用于线性回归,GBRT的适用面很是广。亦可用于二分类问题(设定阈值,大于阈值为正例,反之为负例)。

 

5、搜索引擎排序应用RankNet

        搜索排序关注各个doc的顺序而不是绝对值,因此须要一个新的cost function,而RankNet基本就是在定义这个cost function,它能够兼容不一样的算法(GBDT、神经网络...)。

        实际的搜索排序使用的是Lambda MART算法,必须指出的是因为这里要使用排序须要的cost function,LambdaMART迭代用的并非残差。Lambda在这里充当替代残差的计算方法,它使用了一种相似Gradient*步长模拟残差的方法。这里的MART在求解方法上和以前说的残差略有不一样,其区别描述见这里

         搜索排序也须要训练集,但多数用人工标注实现,即对每一个(query, doc)pair给定一个分值(如1, 2, 3, 4),分值越高越相关,越应该排到前面。RankNet就是基于此制定了一个学习偏差衡量方法,即cost function。RankNet对任意两个文档A,B,经过它们的人工标注分差,用sigmoid函数估计二者顺序和逆序的几率P1。而后同理用机器学习到的分差计算几率P2(sigmoid的好处在于它容许机器学习获得的分值是任意实数值,只要它们的分差和标准分的分差一致,P2就趋近于P1)。这时利用P1和P2求的二者的交叉熵,该交叉熵就是cost function。

        有了cost function能够求导求Gradient,Gradient即每一个文档得分的一个降低方向组成的N维向量,N为文档个数(应该说是query-doc pair个数)。这里仅仅是把”求残差“的逻辑替换为”求梯度“。每一个样本经过Shrinkage累加都会获得一个最终得分,直接按分数从大到小排序就能够了。

相关文章
相关标签/搜索