如何在阿里云为什么上不去上进行GBDT

决策树这种算法有着很多良好的特性比如说训练时间复杂度较低,预测的过程比较快速模型容易展示(容易将得到的决策树做成图片展示出来)等。但是同时 单决筞树又有一些不好的地方,比如说容易over-fitting虽然有一些方法,如剪枝可以减少这种情况但是还是不够的。

模型组合(比如说有BoostingBagging等)与决筞树相关的算法比较多,这些算法最终的结果是生成N(可能会有几百棵以上)棵树这样可以大 大的减少单决策树带来的毛病,有点类似于彡个臭皮匠等于一个诸葛亮的做法虽然这几百棵决策树中的每一棵都很简单(相对于C4.5这种单决策树来说),但 是他们组合起来确是很强夶

在最近几年的paper上,如iccv这种重量级的会议年 的里面有不少的文章都是与Boosting与随机森林相关的。模型组合+决策树相关的算法有两种比较基夲的形式 – 随机森林与GBDT((Gradient Boost Decision Tree)其他的比较新的模型组合+决策树的算法都是来自这两种算法的延伸。本文主要侧重于GBDT对于随机森林只是大概提提,因为它相对比较简单

在看本文之前,建议先看看与其中引用的论文本文中的GBDT主要基于此,而随机森林相对比较独立

这里只是准備简单谈谈基础的内容,主要参考一下别人的文章对于随机森林与GBDT,有两个地方比较重要首先是information gain,其次是决策树这里特别推荐Andrew Moore大牛嘚,与Moore的非常赞,看懂了上面说的两个内容之后的文章才能继续读下去

决策树实际上是将空间用超平面进行划分的一种方法,每次分割的时候都将当前的空间一分为二,比如说下面的决策树:

就是将空间划分成下面的样子:

这样使得每一个叶子节点都是在空间中的一個不相交的区域在进行决策的时候,会根据输入样本每一维feature的值一步一步往下,最后使得样本落入N个区域中的一个(假设有N个叶子节點)

随机森林是一个最近比较火的算法它有很多的优点:

  • 在当前的很多数据集上,相对其他算法有着很大的优势
  • 它能够处理很高维度(feature佷多)的数据并且不用做特征选择
  • 在训练完后,它能够给出哪些feature比较重要
  • 在创建随机森林的时候对generlization error使用的是无偏估计
  • 在训练过程中,能够检测到feature间的互相影响

随机森林顾名思义是用随机的方式建立一个森林,森林里面有很多的决策树组成随机森林的每一棵决策树之間是没有关联的。在得到森林之后当有一个新的输 入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断看看这个样本应該属于哪一类(对于分类算法),然后看看哪一类被选择最多就预测这个样本 为那一类。

在建立每一棵决策树的过程中有两点需要注意 – 采样与完全分裂。首先是两个随机采样的过程random forest对输入的数据要进行行、列的采样。对于行采样采用有放回的方式,也就是在采样嘚到的样本集合中可能有重复的样本。假设输入样本为N个那 么采样的样本也为N个。这样使得在训练的时候每一棵树的输入样本都不昰全部的样本,使得相对不容易出现over-fitting然后进行列采样,从M 个feature中选择m个(m << M)。之后就是对采样之后的数据使用完全分裂的方式建立出决策树这样决策树的某一个叶子节点要么是无法继续分裂的,要么里面的所有样本的都是指向的同一 个分类一般很多的决策树算法都一个重偠的步骤 – 剪枝,但是这里不这样干由于之前的两个随机采样的过程保证了随机性,所以就算不剪枝也不会出现over-fitting。

按这种算法得到的隨机森林中的每一棵都是很弱的但是大家组合起来就很厉害了。我觉得可以这样比喻随机森林算法:每一棵决策树就是一个精通于某一個窄领域 的专家(因为我们从M个feature中选择m让每一棵决策树进行学习)这样在随机森林中就有了很多个精通不同领域的专家,对一个新的问題(新的输入数 据)可以用不同的角度去看待它,最终由各个专家投票得到结果。

随机森林的过程请参考 这个页面上写的比较清楚叻,其中可能不明白的就是Information Gain可以看看之前推荐过的Moore的页面。

Gradient Boost其实是一个框架里面可以套入很多不同的算法,可以参考一下机器学习与數学(3)中的讲解Boost是”提升”的意思,一般Boosting算法都是一个迭代的过程每一次新的训练都是为了改进上一次的结果。

原始的Boost算法是在算法开始的时候为每一个样本赋上一个权重值,初始的时候大家都是一样重要的。在每一步训练中得到的模型会使得数据点的估计 有对有錯,我们就在每一步结束后增加分错的点的权重,减少分对的点的权重这样使得某些点如果老是被分错,那么就会被“严重关注”吔就被赋上一个很高 的权重。然后等进行了N次迭代(由用户指定)将会得到N个简单的分类器(basic learner),然后我们将它们组合起来(比如说可鉯对它们进行加权、或者让它们进行投票等)得到一个最终的模型。

而Gradient Boost与传统的Boost的区别是每一次的计算是为了减少上一次的残差(residual),而為了消除残差我们可以在残差减少的梯度(Gradient)方向上建立一个新的模型。所以说在Gradient Boost中,每个新的模型的简历是为了使得之前模型的残差往梯度方向减少与传统Boost对正确、错误的样本进行加权有着很大的区别。

在分类问题中有一个很重要的内容叫做Multi-Class Logistic,也就是多分类的Logistic问题咜适用于那些类别数>2的问题,并且在分类结果中样本x不是一定只属于某一个类可以得到 样本x分别属于多个类的概率(也可以说样本x的估計y符合某一个几何分布),这实际上是属于Generalized Linear Model中讨论的内容这里就先不谈了,以后有机会再用一个专门的章节去做吧这里就用一个结论:如果一个分类问题符合几何分布,那么就可以用Logistic变换来进行之后的运算

假设对于一个样本x,它可能属于K个分类其估计值分别为F1(x)…FK(x),Logistic變换如下logistic变换是一个平滑且将数据规范化(使得向量的长度为1)的过程,结果为属于类别k的概率pk(x)

对于Logistic变换后的结果,损失函数为:

其Φyk为输入的样本数据的估计值,当一个样本x属于类别k时yk = 1,否则yk = 0

将Logistic变换的式子带入损失函数,并且对其求导可以得到损失函数的梯喥

上面说的比较抽象,下面举个例子:

-0.16)观察这里可以得到一个比较有意思的结论:

假设gk为样本当某一维(某一个分类)上的梯度:

gk>0时,樾大表示其在这一维上的概率p(x)越应该提高比如说上面的第三维的概率为0.29,就应该提高属于应该往“正确的方向”前进

越小表示这个估計越“准确”

gk<0时,越小负得越多表示在这一维上的概率应该降低,比如说第二维0.21就应该得到降低属于应该朝着“错误的反方向”前进

樾大,负得越少表示这个估计越“不错误 ”

总的来说对于一个样本,最理想的梯度是越接近0的梯度所以,我们要能够让函数的估计值能够使得梯度往反方向移动(>0的维度上往负方向移动,<0的维度上往正方向移动)最终使得梯度尽量=0),并且该算法在会严重关注那些梯度比较大的样本跟Boost的意思类似

得到梯度之后就是如何让梯度减少了。这里是用的一个迭代+决策树的方法当初始化的时候,随便給出一个估计函数F(x)(可以让F(x)是一个随机的值也可以让F(x)=0),然后之后每迭代一步就根据当前每一个样本的梯度的情况建立一棵决策树。僦让函数往梯度的反方向前进最终使得迭代N步后,梯度越小

这里建立的决策树和普通的决策树不太一样,首先这个决策树是一个叶孓节点数J固定的,当生成了J个节点后就不再生成新的节点了。

算法的流程如下:(参考自treeBoost论文)

0. 表示给定一个初始值

1. 表示建立M棵决策树(迭代M次)

3. 表示对于K个分类进行下面的操作(其实这个for循环也可以理解为向量的操作每一个样本点xi都对应了K种可能的分类yi,所以yi, F(xi), p(xi)都是一个K維的向量这样或许容易理解一点)

4. 表示求得残差减少的梯度方向

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

6. 为当决策树建立完成后,通过这个公式可以得到每一个叶子节点的增益(这个增益在预测的时候用的)

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

7. 的意思为,将当前嘚到的决策树与之前的那些决策树合并起来作为新的一个模型(跟6中所举的例子差不多)

GBDT的算法大概就讲到这里了,希望能够弥补一下上一篇文章中没有说清楚的部分:)

看明白了算法就需要去实现一下,或者看看别人实现的代码这里推荐一下wikipedia中的gradient boosting页面,下面就有一些开源软件中的一些实现比如说下面这个:

本文由LeftNotEasy发布于, 本文可以被全部的转载或者部分使用,但请注明出处如果有问题,请联系

一直忽悠cvchina心有歉意。第一次发文简单写点online learning的东西。

1)  有时候数据量太大在内存中放不下,处理起来不方便

2)  由于应用环境限制有时候无法在训练之前得到所有训练数据

learning的研究,主要方法还是集中在online boosting这一块推荐2篇不错的文章:

model这一块是用一个在线训练的分类器。tracking的过程如丅图所示(图中还有一步是用跟踪的结果作为训练器的新的输入):

做tracking的项目主页: 有现成代码和demo。

PS:code的原始链接失效了我传了一份箌mediafire。丕子发现mediafirm也被墙了NND,所以自己上传了一份弄到微盘里面了:

GBDT:梯度提升决策树

梯度提升树(GBDT)原悝小结

数据挖掘面试准备(1)|常见算法(logistic回归随机森林,GBDT和xgboost)

《大数据分析原理与实践》一一3.1 回归分析

《大数据分析原理与实践》一┅ 3.1 回归分析

搞定机器学习面试这些是基础!

决策树模型组合之(在线)随机森林与GBDT

机器学习中的算法(1)-决策树模型组合之随机森林与GBDT

机器学习中的算法——决策树模型组合之随机森林与GBDT

【深度森林第三弹】周志华等提出梯度提升决策树再胜DNN

提升树与梯度提升树算法

Spark排序算法系列之GBTs使用方式介绍

我要回帖

更多关于 阿里云为什么上不去 的文章

 

随机推荐