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