基础知识

[关于决策树的基础知识参考: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

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

  1. 【机器学习】随机森林 – Random forest

    文章目录 一.随机森林是什么? 1. 随机森林是一种集成学习算法 2. 随机森林的基学习器是决策树 二.随机森林 – Random Forest | RF 三.构造随机森林的 4 个步骤 四.随机森林 ...

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

    版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...

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

    版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...

  4. 决策树php,决策树模型组合之随机森林与GBDT

    前言: 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等.但是同时,单决策树又有一些不好的地方,比如说容易over- ...

  5. 机器学习——集成学习算法(Adaboost、随机森林)

    集成算法简述 什么是集成学习 如何得到多个个体学习器 集成学习常用算法 Bagging 自助采样 学习器结合 包外估计 随机森林 Adaboost Boosting Adaboost算法原理 注意 什 ...

  6. 初勘数据处理之预测算法(随机森林random forest)附matlab源码

    初勘数据处理之预测算法(随机森林random forest)附matlab源码 集成学习方法 集成学习方法,是整合多个分类方法的预测结果,以提高分类准确率.集成学习方法先用训练数据构建一组基分类器,再 ...

  7. 随机森林 – Random forest

    随机森林 – Random forest 随机森林是一种由决策树构成的集成算法,他在很多情况下都能有不错的表现. 本文将介绍随机森林的基本概念.4 个构造步骤.4 种方式的对比评测.10 个优缺点和 ...

  8. 机器学习方法(六):随机森林Random Forest,bagging

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 前面机器学习方法(四)决策树讲了经典 ...

  9. 随机森林Random Forest,bagging

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld.  技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 前面机器学习方法(四)决策树讲了经 ...

  10. 通俗解读随机森林Random Forest

    通俗解读随机森林Random Forest 写在前面 1. 什么是集成学习 2. 什么是Bagging 3 随机森林 写在前面 声明:本文主要参考的是周志华老师的<机器学习>西瓜书,参杂了 ...

最新文章

  1. 人脸识别可以分辨同性恋?论科技研发和伦理道德之间的矛盾
  2. Apache PDFBox 存在高危 XXE 漏洞,建议升级至 2.0.15
  3. 深度解密Go语言之unsafe
  4. SegmentFault 巨献 1024 程序猿游戏「红岸的呼唤」第一天任务攻略
  5. c语言回文数递归,c语言问题~~~回文数!!急,拜托高人指点!!
  6. 实验二+018+李滨
  7. 【2012.1.24更新】不要再在网上搜索eclipse的汉化包了!
  8. Deepin-WPS更新字体
  9. 视频教程-VBScript脚本语言编程与自动化运维操作学习篇-其他
  10. 智能DNS之DNS原理与解析
  11. mac --- wifi无法获取ip地址
  12. 0 嵌入式-ARM简介
  13. 用pyQt实现信号采集数据图形化显示
  14. 海外免版税(Royalty Free)免费音乐+音效资源
  15. 计算机视觉的科学计算,计算机视觉发展的四个主要阶段1:马尔计算视觉
  16. python bind_Python tkinter之Bind(绑定事件)
  17. 【PAT】PAT_1168_Prime_Day
  18. 大白话5分钟带你走进人工智能-第二十八节集成学习之随机森林概念介绍(1)
  19. IDEA个人习惯和记录
  20. 小小黑客从鼠标钩子开始,密码看看看

热门文章

  1. 华山论剑之契约式编程与防御式编程
  2. oracle通过load data 将数据导入表中通过存储过程进行批量处理
  3. dbms 计算机辅助设计,计算机辅助设计(CAD).ppt
  4. Foursquare解密创新商机
  5. ExtJs 常用代码片段
  6. 数据库管理员密码的设置
  7. 逆向路径转发 linux,RPF(Reverse Path Forwarding 反向路径转发)技术
  8. 高手详细介绍JVM是什么?
  9. Markdown 快速入门上(基础语法篇)
  10. 虚拟机: 虚拟机win7的激活方式(底层操作系统 为 win10) ===用windows loader