Weka算法Classifier-tree-RandomForest源码分析(一)算法

RandomForest

一、算法介绍

RandomForest应该算是一个特别简单但是有效的算法,其核心思想是通过训练和组合不同的决策树,形成森林,最后的分类结果由这多棵树进行投票来决定。

在介绍RandomForest之前,首先介绍一下Tree Bagging

二、Bagging

Bagging又叫做Booststrap Aggregatiing,也是一种组合多个分类器来得到一个能力更强的分类器的方法,其训练过程分两步:

1、对训练集进行有放回的抽样N次,得到训练集的一个子集作为新训练集,并使用新的训练集训练基分类器。

2、重复上述过程M次,得到M个分类器。

分类过程如下:

对于任意一个新的用例,使用M个分类器进行分类,最后的分类结果由这M个分类器投票决定。

Bagging的显而易见的好处有如下几个:

1、可并行化,多个基分类器之间的训练没有任何相关。

2、防止过拟合,对于某些出现概率小的噪点,抽样过程中抽到的概率较小,训练出的基分类器不受噪点影响。

三、RandomForest

RandomForest在Bagging的基础上又做了改进,过程如下:

训练:

1、对训练集进行有放回的抽样N次,得到训练集的一个子集作为新训练集。

2、在新的训练集中随机抽出训练集的K个属性,训练一棵分类树,并且不对这个分类树做剪枝操作。

3、重复上述过程M次,得到M个分类器。

判定:

1、对于任意一个新的用例,使用M个分类器进行分类,最后的分类结果由这M个分类器投票决定。

可以看出,RandomForest在Bagging的基础上,主要是增加了随机抽出K个属性进行训练,从经验上来讲,假设属性总量为X,则要求K<<X,一般取K=sqrt(X)。

经过这样的改进,RandomForest又有了如下的一些优点:

1、可以处理高纬度的数据,显而易见,每次抽取K个属性进行训练,提高训练速度。

2、可以评估每个属性的重要程度,根据子分类树的精确度,就可以评估属性的重要程度。

3、对于属性的遗失,可以很好的处理,因为各子分类树构建在不同的属性之上,可以只挑选一部分可用的子分类树进行判定

参考资料:

http://baike.baidu.com/view/5021113.htm?fr=aladdin

http://blog.csdn.net/abcjennifer/article/details/8164315

http://en.wikipedia.org/wiki/Random_forest

http://www.cnblogs.com/wentingtu/archive/2011/12/13/2286212.html

时间: 2024-10-10 04:51:34

Weka算法Classifier-tree-RandomForest源码分析(一)算法的相关文章

STL源码剖析——STL算法之find查找算法

前言 由于在前文的<STL算法剖析>中,源码剖析非常多,不方便学习,也不方便以后复习,这里把这些算法进行归类,对他们单独的源码剖析进行讲解.本文介绍的STL算法中的find.search查找算法.在STL源码中有关算法的函数大部分在本文介绍,包含findand find_if.adjacent_find.search.search_n.lower_bound. upper_bound. equal_range.binary_search.find_first_of.find_end相关算法,下

OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波

http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 2013-03-23 17:44 16963人阅读 评论(28) 收藏 举报 分类: 机器视觉(34) 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] KAZE系列笔记: OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 OpenCV学习笔记(28)KA

Mahout源码分析:并行化FP-Growth算法

FP-Growth是一种常被用来进行关联分析,挖掘频繁项的算法.与Aprior算法相比,FP-Growth算法采用前缀树的形式来表征数据,减少了扫描事务数据库的次数,通过递归地生成条件FP-tree来挖掘频繁项.参考资料[1]详细分析了这一过程.事实上,面对大数据量时,FP-Growth算法生成的FP-tree非常大,无法放入内存,挖掘到的频繁项也可能有指数多个.本文将分析如何并行化FP-Growth算法以及Mahout中并行化FP-Growth算法的源码. 1. 并行化FP-Growth 并行

K-近邻算法的Python实现 : 源码分析

网上介绍K-近邻算法的例子很多,其Python实现版本基本都是来自于机器学习的入门书籍<机器学习实战>,虽然K-近邻算法本身很简单,但很多初学者对其Python版本的源代码理解不够,所以本文将对其源代码进行分析. 什么是K-近邻算法? 简单的说,K-近邻算法采用不同特征值之间的距离方法进行分类.所以它是一个分类算法. 优点:无数据输入假定,对异常值不敏感 缺点:复杂度高 好了,直接先上代码,等会在分析:(这份代码来自<机器学习实战>) def classify0(inx, data

OpenStack_Swift源码分析——Ring的rebalance算法源代码详细分析

今天有同学去百度,带回一道面试题,和大家分享一下: 打印: n=1 1 n=2 3 3 2 4 1 1 4 5 5 n=3 7 7 7 7 6 8 3 3 2 6 8 4 1 1 6 8 4 5 5 5 8 9 9 9 9 提供一段参考程序: <pre name="code" class="cpp">// ConsoleApplication1.cpp: 主项目文件. #include "stdafx.h" #include &quo

Openck_Swift源码分析——增加、删除设备时算法具体的实现过程

1 初始添加设备后.上传Object的具体流程 前几篇博客中,我们讲到环的基本原理即具体的实现过程,加入我们在初始创建Ring是执行如下几条命令: ?swift-ring-builder object.builder create 5 3 1 ?swift-ring-builder object.builder add z1-127.0.0.1:6010/sdb1 100 ?swift-ring-builder object.builder add z2-127.0.0.1:6020/sdb2 

WEKA学习——CSVLoader 实例训练 和 源码分析

简介: Weka支持多种数据导入方式,CSVLoader是能从csv文件加载数据集,也可以保存为arff格式文件.官方介绍文件:Converting CSV to ARFF ( http://weka.wikispaces.com/Converting+CSV+to+ARFF) CSVLoader加载文件,关键是对文件字段属性名称和属性的类型需要自己定义,这样才能得到满足自己需要的数据集. CSVLoader通过options设置,可以设置每一列的属性为Nominal,String,Date类型

OpenStack_Swift源码分析——Ring基本原理及一致性Hash算法

1.Ring的基本概念 Ring是swfit中最重要的组件,用于记录存储对象与物理位置之间的映射关系,当用户需要对Account.Container.Object操作时,就需要查询对应的Ring文件(Account.Container.Object都有自己对应的Ring),Ring 使用Region(最近几个版本中新加入的).Zone.Device.Partition和Replica来维护这些信息,对于每一个对象,根据你在部署swift设置的Replica数量,集群中会存有Replica个对象.

SURF算法与源码分析、下

上一篇文章 SURF算法与源码分析.上 中主要分析的是SURF特征点定位的算法原理与相关OpenCV中的源码分析,这篇文章接着上篇文章对已经定位到的SURF特征点进行特征描述.这一步至关重要,这是SURF特征点匹配的基础.总体来说算法思路和SIFT相似,只是每一步都做了不同程度的近似与简化,提高了效率. 1. SURF特征点方向分配 为了保证特征矢量具有旋转不变性,与SIFT特征一样,需要对每个特征点分配一个主方向.为些,我们需要以特征点为中心,以$6s$($s = 1.2 *L /9$为特征点

Mahout源码分析-K-means聚类算法

一 算法描述 1.随机选取k个对象作为初始簇中心: 2.计算每个对象到簇中心的距离,将每个对象聚类到离该对象最近的聚簇中去: 3.计算每个聚簇中的簇均值,并将簇均值作为新的簇中心: 4.计算准则函数: 5.重复(2).(3)和(4),直到准则函数不再发生变化. 二 源码分析 Mahout源码分析-K-means聚类算法