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/。
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
paper 56 :机器学习中的算法:决策树模型组合之随机森林(Random Forest)的更多相关文章
- 机器学习中的算法——决策树模型组合之随机森林与GBDT
前言: 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等.但是同时,单决策树又有一些不好的地方,比如说容易over- ...
- 机器学习中的算法-决策树模型组合之随机森林与GBDT
机器学习中的算法(1)-决策树模型组合之随机森林与GBDT 版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使 ...
- 机器学习中的算法(1)-决策树模型组合之随机森林与GBDT
版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...
- 决策树模型组合之随机森林与GBDT
版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...
- 决策树模型组合之随机森林与GBDT(转)
版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...
- 【机器学习】随机森林(Random Forest)
随机森林是一个最近比较火的算法 它有很多的优点: 在数据集上表现良好 在当前的很多数据集上,相对其他算法有着很大的优势 它能够处理很高维度(feature很多)的数据,并且不用做特征选择 在训练完后, ...
- 机器学习(六)—随机森林Random Forest
1.什么是随机采样? Bagging可以简单的理解为:放回抽样,多数表决(分类)或简单平均(回归): Bagging的弱学习器之间没有boosting那样的联系,不存在强依赖关系,基学习器之间属于并列 ...
- 【机器学习】随机森林 Random Forest 得到模型后,评估参数重要性
在得出random forest 模型后,评估参数重要性 importance() 示例如下 特征重要性评价标准 %IncMSE 是 increase in MSE.就是对每一个变量 比如 X1 随机 ...
- 机器学习中的算法(2)-支持向量机(SVM)基础
版权声明:本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gma ...
随机推荐
- Mongo命令行中执行CRUD
在命令行中使用mongo自带的shell命令来执行CRUD操作 首先链接到数据库 增 db.qiao.insert({"qq":1}) db.qiao.save({"qq ...
- 20145211 《Java程序设计》第10周学习总结——昨夜星辰昨夜风
教材学习内容总结 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据. 程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就是狭义的网络编程范畴. 在发送和接收 ...
- NSNotificationCenter带参
(1)post Notification类 [[NSNotificationCenter defaultCenter] postNotificationName:CRMPerformanceNewCe ...
- Intersecting Lines---poj1269(求两直线的位置关系)
题目链接:http://poj.org/problem?id=1269 题意:给你两条直线上的任意不同的两点,然后求两条直线的位置关系,如果相交于一点输出该点坐标; #include<iostr ...
- iOS GCD简单使用
Grand Central Dispatch (GCD) 1)运行在主线程的Main queue,通过dispatch_get_main_queue获取. /*!* @function dispatc ...
- iOS苹果开发者客服电话地址
苹果开发者客服电话地址:https://developer.apple.com/contact/phone.php 中国大陆地区客服电话:4006 701 855 中国香港地区客服电话:(852) 2 ...
- Ext4.0 获取选中行及遍历
var grid= Ext.getCmp('grid'); var records=grid.getSelectionModel().getSelection(); if(records!=null& ...
- JavaScript: JavaScript的简介和入门代码演示
1.Javascript的发展历史介绍: javascript是指的实在网页上编写的编程语言,其主要是控制器html的动态显示效果.HTMl能带来的只是一些基本的页面的风格,而要展示的漂亮使用CSS, ...
- linux安装pip报错
解决方法:升级pip工具 sudo python -m pip install -U pip
- Inside Kolla - 01 简介
简介 在 opencloud 2015 的会议上初次了解到 kolla 项目后,开始去了解和学习 kolla 的源代码和相关的知识.经过一段时间的了解,觉得 kolla 确实是一个很好的项目,它使用预 ...