paper 56 :机器学习中的算法:决策树模型组合之随机森林(Random Forest)

周五的组会如约而至,讨论了一个比较感兴趣的话题,就是使用SVM和随机森林来训练图像,这样的目的就是

在图像特征之间建立内在的联系,这个model的训练,着实需要好好的研究一下,下面是我们需要准备的入门资料:

[关于决策树的基础知识参考:http://blog.csdn.net/holybin/article/details/22914417]

在机器学习中,随机森林由许多的决策树组成,因为这些决策树的形成采用了随机的方法,所以叫做随机森林。随机森林中的决策树之间是没有关联的,当测试数据进入随机森林时,其实就是让每一颗决策树进行分类看看这个样本应该属于哪一类,最后取所有决策树中分类结果最多的那类为最终的结果(每棵树的权重要考虑进来)。所有的树训练都是使用同样的参数,但是训练集是不同的,分类器的错误估计采用的是oob(out of bag)的办法。因此随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。随机森林可以既可以处理属性为离散值的量,如ID3算法,也可以处理属性为连续值的量,比如C4.5算法。另外,随机森林还可以用来进行无监督学习聚类和异常点检测。

随机森林的建立

基本就是两个步骤:随机采样与完全分裂。

(1)随机采样

首先是两个随机采样的过程,random forest对输入的数据要进行行、列的采样。

对于行采样,采用有放回的方式,也就是在采样得到的样本集合中,可能有重复的样本。假设输入样本为N个,那么采样的样本也为N个,这选择好了的N个样本用来训练一个决策树,作为决策树根节点处的样本,同时使得在训练的时候,每一棵树的输入样本都不是全部的样本,使得相对不容易出现over-fitting。

对于列采样,从M个feature中,选择m个(m << M),即:当每个样本有M个属性时,在决策树的每个节点需要分裂时,随机从这M个属性中选取出m个属性,满足条件m << M。

(2)完全分裂

对采样之后的数据使用完全分裂的方式建立出决策树,这样决策树的某一个叶子节点要么是无法继续分裂的,要么里面的所有样本的都是指向的同一个分类。分裂的办法是:采用上面说的列采样的过程从这m个属性中采用某种策略(比如说信息增益)来选择1个属性作为该节点的分裂属性。

决策树形成过程中每个节点都要按完全分裂的方式来分裂,一直到不能够再分裂为止(如果下一次该节点选出来的那一个属性是刚刚其父节点分裂时用过的属性,则该节点已经达到了叶子节点,无须继续分裂了)。

我们用LearnUnprunedTree(X,Y)表示生成一棵未剪枝的决策树的过程,以下简写LUT (X,Y):

---------------------------------------------------------------------------------------------------------------------------------------------------
LearnUnprunedTree(X,Y)
输入:
      X是RxM的矩阵,Xij表示第i个样本的第j个特征。
      Y是Rx1的向量,Yi表示第i个样本的类别标签。
输出:
      一棵未剪枝的树
如果X的所有样本值都相同,或Y的所有类别标签相同,或者R<2,则产生一个叶结点,该结点的类别即是X中最多数的类别。
否则
      从M个特征中随机挑选m个
      这m个特征中,信息增益最大的记为p。(信息增益的计算方法见下文)
      如果特征p的取值是非连续的(如性别:“男”,“女”)
             则对p的任一取值v
                    用Xv表示特征p取值为v的样本,Yv为其对应类别
                    Childv =LUT(Xv,Yv)
             返回一个树结点,在特征p处分裂,孩子的数量与特征p的不同取值数量相同。第v’个孩子即是Childv = LUT(Xv,Yv)
      如果特征p的取值是连续的(如温度,长度等),设t为最佳分裂阈值
             XLO 表示 特征p的值<t的样本集合,YLO为其对应类别
             ChildLO = LUT(XLO, YLO)
             XHI 表示  特征p的值>=t的样本集合,YHI为其对应类别
             ChildLO = LUT(XHI , YHI)
             返回一个树结点,在特征p处分裂,有2个孩子,分别是ChildLO = LUT(XLO, YLO) 和ChildLO = LUT(XHI , YHI)。

---------------------------------------------------------------------------------------------------------------------------------------------------
      首先,以上是未剪枝决策树的生成过程,一般很多的决策树算法都会包含剪枝过程来避免over-fitting。但是由于随机森林的两个随机采样的过程保证了随机性,所以就算不剪枝也不容易出现over-fitting,这也是随机森林的优势之一。

其次,按上述办法生成的每一棵决策树的分类能力很有限(从M个feature中选择m让每一棵决策树进行学习),但是组合在一起形成森林之后分类能力就大大加强了,这点很像adaboost里面的弱分类器组合成强分类器的思想,并且最后都是通过带权重的方式组合起来。

最后,随机森林有2个参数需要人为控制,一个是森林中树的数量,一般建议取很大。另一个是m的大小,推荐m的值为M的均方根。

随机森林的优点
总结如下:
(1)比较适合做多分类问题,训练和预测速度快,在数据集上表现良好;
(2)对训练数据的容错能力强,是一种有效地估计缺失数据的一种方法,当数据集中有大比例的数据缺失时仍然可以保持精度不变和能够有效地处理大的数据集;
(3)能够处理很高维度的数据,并且不用做特征选择,即:可以处理没有删减的成千上万的变量;
(4)能够在分类的过程中可以生成一个泛化误差的内部无偏估计;
(5)能够在训练过程中检测到特征之间的相互影响以及特征的重要性程度;
(6)不会出现过度拟合;
(7)实现简单并且容易实现并行化。

代码与资源

1、首推原作者Leo Breiman:http://stat-www.berkeley.edu/users/breiman/RandomForests/

他的paper以及对于paper的概括

2、其次是Mahout:http://mahout.apache.org/

3、Andy Liaw和Matthew Wiener的R语言代码:http://cran.r-project.org/web/packages/randomForest/

google code版本:code.google.com/p/randomforest-matlab/

4、之前网上找到了一个matlab和fortran混合编程的例子,我在matlab中编译后使用是OK的:pan.baidu.com/share/link?shareid=1552171579&uk=2383340416

5、opencv中也有随机森林的实现:http://blog.csdn.net/holybin/article/details/25708347

时间: 2024-10-26 21:47:20

paper 56 :机器学习中的算法:决策树模型组合之随机森林(Random Forest)的相关文章

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

前言: 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等.但是同时,单决策树又有一些不好的地方,比如说容易over-fitting,虽然有一些方法,如剪枝可以减少这种情况,但是还是不够的. 美国金融银行业的大数据算法:随机森林模型+综合模型 模型组合(比如说有Boosting,Bagging等)与决策树相关的算法比较多,这些算法最终的结果是生成N(可能会有几百棵以上)棵树,这样可以大大的减少单决策树带来的毛病,有

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

版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系[email protected] 前言: 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等.但是同时,单决策树又有一些不好的地方,比如说容易over-fitting,虽然有一些方法,如剪枝可以减少这种情况,但是还是不够的. 模型组合(比如

决策树模型组合之随机森林与GBDT

本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系[email protected] 前言: 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等.但是同时,单决策树又有一些不好的地方,比如说容易over-fitting,虽然有一些方法,如剪枝可以减少这种情况,但是还是不够的. 模型组合(比如说有Boos

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

版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系[email protected].也可以加我的微博: @leftnoteasy 前言: 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等.但是同时, 单决策树又有一些不好的地方,比如说容易over-fitting,虽然有一些方法,如剪枝可

【机器学习】随机森林 Random Forest 得到模型后,评估参数重要性

在得出random forest 模型后,评估参数重要性 importance() 示例如下 特征重要性评价标准 %IncMSE 是 increase in MSE.就是对每一个变量 比如 X1 随机赋值, 如果 X1重要的话, 预测的误差会增大,所以 误差的增加就等同于准确性的减少,所以MeanDecreaseAccuracy 是一个概念的. IncNodePurity 也是一样, 如果是回归的话, node purity 其实就是 RSS(残差平方和residual sum of squar

机器学习中的算法:决策树模型组合之GBDT(Gradient Boost Decision Tree)

[转载自:http://www.cnblogs.com/LeftNotEasy/archive/2011/03/07/random-forest-and-gbdt.html] 前言 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等.但是同时,单决策树又有一些不好的地方,比如说容易over-fitting,虽然有一些方法,如剪枝可以减少这种情况,但是还是不够的. 模型组合(比如说有Boosting,Bagging等

机器学习中的数学(3)-模型组合(Model Combining)之Boosting与Gradient Boosting

版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系[email protected] 前言: 本来上一章的结尾提到,准备写写线性分类的问题,文章都已经写得差不多了,但是突然听说最近Team准备做一套分布式的分类器,可能会使用Random Forest来做,下了几篇论文看了看,简单的random forest还比较容易弄懂,复杂一点的还会与boosting等算法结合(参见i

(转)机器学习中的数学(3)-模型组合(Model Combining)之Boosting与Gradient Boosting

版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系[email protected] 前言: 本来上一章的结尾提到,准备写写线性分类的问题,文章都已经写得差不多了,但是突然听说最近Team准备做一套分布式的分类器,可能会使用Random Forest来做,下了几篇论文看了看,简单的random forest还比较容易弄懂,复杂一点的还会与boosting等算法结合(参见i

机器学习中各个算法的优缺点(四)

在前面的文章中我们给大家介绍了很多关于机器学习的算法,这些算法都是能够帮助大家更好地理解机器学习,而机器学习的算法各种各样,要想好好地使用这些算法就需要对这些算法一个比较透彻的了解.我们在这篇文章中接着给大家介绍一下机器学习中涉及到的算法的最后一部分内容. 首先说一下聚类算法,聚类算法是指对一组目标进行分类,属于同一组的目标被划分在一组中,与其他组目标相比,同一组目标更加彼此相似.聚类算法的例子有很多,比如说K-均值(k-Means).k-Medians 算法.Expectation Maxim