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

你可能感兴趣的:(源码,算法,机器学习,weka,randomForest)