随机森林算法

转载自:http://www.zilhua.com/629.html



1. 随机森林使用背景

1.1 随机森林定义

随机森林是一种比较新的机器学习模型。经典的机器学习模型是神经网络,有半个多世纪的历史了。神经网络预测精确,但是计算量很大。上世纪八十年代Breiman等人发明分类树的算法(Breiman et al. 1984),通过反复二分数据进行分类或回归,计算量大大降低。2001年Breiman把分类树组合成随机森林(Breiman 2001a),即在变量(列)的使用和数据(行)的使用上进行随机化,生成很多分类树,再汇总分类树的结果。随机森林在运算量没有显著提高的前提下提高了预测精度。随机森林对多元公线性不敏感,结果对缺失数据和非平衡的数据比较稳健,可以很好地预测多达几千个解释变量的作用(Breiman 2001b),被誉为当前最好的算法之一(Iverson et al. 2008)。

随机森林顾名思义,是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类(对于分类算法),然后看看哪一类被选择最多,就预测这个样本为那一类。

1.2 随机森林优点

随机森林是一个最近比较火的算法,它有很多的优点:

a. 在数据集上表现良好,两个随机性的引入,使得随机森林不容易陷入过拟合

b. 在当前的很多数据集上,相对其他算法有着很大的优势,两个随机性的引入,使得随机森林具有很好的抗噪声能力

c. 它能够处理很高维度(feature很多)的数据,并且不用做特征选择,对数据集的适应能力强:既能处理离散型数据,也能处理连续型数据,数据集无需规范化

d. 可生成一个Proximities=(pij)矩阵,用于度量样本之间的相似性: pij=aij/N, aij表示样本i和j出现在随机森林中同一个叶子结点的次数,N随机森林中树的颗数

e. 在创建随机森林的时候,对generlization error使用的是无偏估计

f. 训练速度快,可以得到变量重要性排序(两种:基于OOB误分率的增加量和基于分裂时的GINI下降量

g. 在训练过程中,能够检测到feature间的互相影响

h. 容易做成并行化方法

i. 实现比较简单

1.3 随机森林应用范围

随机森林主要应用于回归和分类。本文主要探讨基于随机森林的分类问题。随机森林和使用决策树作为基本分类器的(bagging)有些类似。以决策树为基本模型的bagging在每次bootstrap放回抽样之后,产生一棵决策树,抽多少样本就生成多少棵树,在生成这些树的时候没有进行更多的干预。而随机森林也是进行bootstrap抽样,但它与bagging的区别是:在生成每棵树的时候,每个节点变量都仅仅在随机选出的少数变量中产生。因此,不但样本是随机的,连每个节点变量(Features)的产生都是随机的。

许多研究表明, 组合分类器比单一分类器的分类效果好,随机森林(random forest)是一种利用多个分类树对数据进行判别与分类的方法,它在对数据进行分类的同时,还可以给出各个变量(基因)的重要性评分,评估各个变量在分类中所起的作用。

2. 随机森林方法理论介绍

2.1 随机森林基本原理

随机森林由LeoBreiman(2001)提出,它通过自助法(bootstrap)重采样技术,从原始训练样本集N中有放回地重复随机抽取k个样本生成新的训练样本集合,然后根据自助样本集生成k个分类树组成随机森林,新数据的分类结果按分类树投票多少形成的分数而定。其实质是对决策树算法的一种改进,将多个决策树合并在一起,每棵树的建立依赖于一个独立抽取的样品,森林中的每棵树具有相同的分布,分类误差取决于每一棵树的分类能力和它们之间的相关性。特征选择采用随机的方法去分裂每一个节点,然后比较不同情况下产生的误差。能够检测到的内在估计误差、分类能力和相关性决定选择特征的数目。单棵树的分

类能力可能很小,但在随机产生大量的决策树后,一个测试样品可以通过每一棵树的分类结果经统计后选择最可能的分类。

2.2 随机森林算法

2.2.1 决策树

决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。

随机森林是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪一类,然后看看哪一类被选择最多,就预测这个样本为那一类。

在建立每一棵决策树的过程中,有两点需要注意采样与完全分裂。首先是两个随机采样的过程,random forest对输入的数据要进行行、列的采样。对于行采样,采用有放回的方式,也就是在采样得到的样本集合中,可能有重复的样本。假设输入样本为N个,那么采样的样本也为N个。这样使得在训练的时候,每一棵树的输入样本都不是全部的样本,使得相对不容易出现over-fitting。然后进行列采样,从M个feature中,选择m个(m << M)。之后就是对采样之后的数据使用完全分裂的方式建立出决策树,这样决策树的某一个叶子节点要么是无法继续分裂的,要么里面的所有样本的都是指向的同一个分类。一般很多的决策树算法都一个重要的步骤——剪枝,但是这里不这样干,由于之前的两个随机采样的过程保证了随机性,所以就算不剪枝,也不会出现over-fitting。

决策树中分裂属性的两个选择度量:

1)信息增益

随机森林模型任意样本分类的期望信息:

a) I(s1,s2,……,sm)=

∑Pi log2(pi)(i=1..m)

其中,数据集为S,m为S的分类数目,Pi≈|Si/|S|,Ci为某分类标号,Pi为任意样本属于Ci的概率,si为分类Ci上的样本数

b) I(s1,s2,……,sm)越小,s1,s2,……,sm就越有序(越纯),分类效果就越好。

c) 由属性A划分为子集的熵:

A为属性,具有V个不同的取值, S被A 划分为V 个子集s1,s2,……,sv,sij是子集sj中类Ci的样本数。E(A)= ∑(s1j+ ……+smj)/s * I(s1j,……,smj)

d) 信息增益:Gain(A)= I(s1,s2,……,sm)

 E(A)

e) 分裂属性选择规则:选择具有最大信息增益的属性为分裂属性

2)基尼指数

a) 集合T包含N个类别的记录,那么其Gini指标就是pj类别j出现的频率

     b) 如果集合T分成m部分 N1 , N2 ,…, Nm 。那么这个分割的Gini就是

c)分裂属性选择规则:选择具有最小Ginisplit的属性为分裂属性(对于每个属性都要遍历所有可能的分割方法)。

2.2.3 随机森林模型的注意点

设有N个样本,每个样本有M个features,决策树们其实都是随机地接受n个样本(对行随机取样)的m个feature(对列进行随机取样),每颗决策树的m个feature相同。每颗决策树其实都是对特定的数据进行学习归纳出分类方法,而随机取样可以保证有重复样本被不同决策树分类,这样就可以对不同决策树的分类能力做个评价。

2.2.4随机森林实现过程

随机森林中的每一棵分类树为二叉树,其生成遵循自顶向下的递归分裂原则,即从根节点开始依次对训练集进行划分;在二叉树中,根节点包含全部训练数据, 按照节点

纯度最小原则,分裂为左节点和右节点,它们分别包含训练数据的一个子集,按照同样的规则节点继续分裂,直到满足分支停止规则而停止生长。若节点n上的分类数据全部来自于同一类别,则此节点的

纯度I(n)=0,

纯度度量方法是Gini准则,即假设P(Xj)是节点n上属于Xj类样本个数占训练。

具体实现过程如下:

(1)原始训练集为N,应用bootstrap法有放回地随机抽取k个新的自助样本集,并由此构建k棵分类树,每次未被抽到的样本组成了k个袋外数据;

(2)设有mall个变量,则在每一棵树的每个节点处随机抽取mtry个变量(mtryn mall),然后在mtry中选择一个最具有分类能力的变量,变量分类的阈值通过检查每一个分类点确定;

(3)每棵树最大限度地生长, 不做任何修剪;

(4)将生成的多棵分类树组成随机森林,用随机森林分类器对新的数据进行判别与分类,分类结果按树分类器的投票多少而定。

3. 随机森林应用

由于R中早就出现randomForest包了,本文主要讨论R中随机森林的应用。两个主要函数比较重要:randomForest用来构建随机森林模型,predict()使用训练后的随机森林对新数据进行预测。

3.1目标

通过随机森林的算法,根据一些特征,例如花瓣的长,宽,花萼的长宽。来预测植株的种类。

3.2 准备的数据集

iris数据集,是R语言自带的数据集。

Sepal.Length Sepal.Width Petal.Length Petal.Width    Species   

1            5.1         3.5          1.4         0.2     setosa   

2            4.9         3.0          1.4         0.2     setosa   

3            4.7         3.2          1.3         0.2     setosa   

4            4.6         3.1          1.5         0.2     setosa   

5            5.0         3.6          1.4         0.2     setosa   

6            5.4         3.9          1.7         0.4     setosa   

7            4.6         3.4          1.4         0.3     setosa   

8            5.0         3.4          1.5         0.2     setosa   

9            4.4         2.9          1.4         0.2     setosa   

10           4.9         3.1          1.5         0.1     setosa   

11           5.4         3.7          1.5         0.2     setosa   

12           4.8         3.4          1.6         0.2     setosa   

13           4.8         3.0          1.4         0.1     setosa   

14           4.3         3.0          1.1         0.1     setosa   

15           5.8         4.0          1.2         0.2     setosa   

16           5.7         4.4          1.5         0.4     setosa   

17           5.4         3.9          1.3         0.4     setosa   

18           5.1         3.5          1.4         0.3     setosa   

19           5.7         3.8          1.7         0.3     setosa   

20           5.1         3.8          1.5         0.3     setosa   

21           5.4         3.4          1.7         0.2     setosa   

22           5.1         3.7          1.5         0.4     setosa   

23           4.6         3.6          1.0         0.2     setosa   

24           5.1         3.3          1.7         0.5     setosa   

25           4.8         3.4          1.9         0.2     setosa   

26           5.0         3.0          1.6         0.2     setosa   

27           5.0         3.4          1.6         0.4     setosa   

28           5.2         3.5          1.5         0.2     setosa   

29           5.2         3.4          1.4         0.2     setosa   

30           4.7         3.2          1.6         0.2     setosa   

31           4.8         3.1          1.6         0.2     setosa   

32           5.4         3.4          1.5         0.4     setosa   

33           5.2         4.1          1.5         0.1     setosa   

34           5.5         4.2          1.4         0.2     setosa   

35           4.9         3.1          1.5         0.2     setosa   

36           5.0         3.2          1.2         0.2     setosa   

37           5.5         3.5          1.3         0.2     setosa   

38           4.9         3.6          1.4         0.1     setosa   

39           4.4         3.0          1.3         0.2     setosa   

40           5.1         3.4          1.5         0.2     setosa   

41           5.0         3.5          1.3         0.3     setosa   

42           4.5         2.3          1.3         0.3     setosa   

43           4.4         3.2          1.3         0.2     setosa   

44           5.0         3.5          1.6         0.6     setosa   

45           5.1         3.8          1.9         0.4     setosa   

46           4.8         3.0          1.4         0.3     setosa   

47           5.1         3.8          1.6         0.2     setosa   

48           4.6         3.2          1.4         0.2     setosa   

49           5.3         3.7          1.5         0.2     setosa   

50           5.0         3.3          1.4         0.2     setosa   

51           7.0         3.2          4.7         1.4 versicolor   

52           6.4         3.2          4.5         1.5 versicolor   

53           6.9         3.1          4.9         1.5 versicolor   

54           5.5         2.3          4.0         1.3 versicolor   

55           6.5         2.8          4.6         1.5 versicolor   

56           5.7         2.8          4.5         1.3 versicolor   

57           6.3         3.3          4.7         1.6 versicolor   

58           4.9         2.4          3.3         1.0 versicolor   

59           6.6         2.9          4.6         1.3 versicolor   

60           5.2         2.7          3.9         1.4 versicolor   

61           5.0         2.0          3.5         1.0 versicolor   

62           5.9         3.0          4.2         1.5 versicolor   

63           6.0         2.2          4.0         1.0 versicolor   

64           6.1         2.9          4.7         1.4 versicolor   

65           5.6         2.9          3.6         1.3 versicolor   

66           6.7         3.1          4.4         1.4 versicolor   

67           5.6         3.0          4.5         1.5 versicolor   

68           5.8         2.7          4.1         1.0 versicolor   

69           6.2         2.2          4.5         1.5 versicolor   

70           5.6         2.5          3.9         1.1 versicolor   

71           5.9         3.2          4.8         1.8 versicolor   

72           6.1         2.8          4.0         1.3 versicolor   

73           6.3         2.5          4.9         1.5 versicolor   

74           6.1         2.8          4.7         1.2 versicolor   

75           6.4         2.9          4.3         1.3 versicolor   

76           6.6         3.0          4.4         1.4 versicolor   

77           6.8         2.8          4.8         1.4 versicolor   

78           6.7         3.0          5.0         1.7 versicolor   

79           6.0         2.9          4.5         1.5 versicolor   

80           5.7         2.6          3.5         1.0 versicolor   

81           5.5         2.4          3.8         1.1 versicolor   

82           5.5         2.4          3.7         1.0 versicolor   

83           5.8         2.7          3.9         1.2 versicolor   

84           6.0         2.7          5.1         1.6 versicolor   

85           5.4         3.0          4.5         1.5 versicolor   

86           6.0         3.4          4.5         1.6 versicolor   

87           6.7         3.1          4.7         1.5 versicolor   

88           6.3         2.3          4.4         1.3 versicolor   

89           5.6         3.0          4.1         1.3 versicolor   

90           5.5         2.5          4.0         1.3 versicolor   

91           5.5         2.6          4.4         1.2 versicolor   

92           6.1         3.0          4.6         1.4 versicolor   

93           5.8         2.6          4.0         1.2 versicolor   

94           5.0         2.3          3.3         1.0 versicolor   

95           5.6         2.7          4.2         1.3 versicolor   

96           5.7         3.0          4.2         1.2 versicolor   

97           5.7         2.9          4.2         1.3 versicolor   

98           6.2         2.9          4.3         1.3 versicolor   

99           5.1         2.5          3.0         1.1 versicolor   

100          5.7         2.8          4.1         1.3 versicolor   

101          6.3         3.3          6.0         2.5  virginica   

102          5.8         2.7          5.1         1.9  virginica   

103          7.1         3.0          5.9         2.1  virginica   

104          6.3         2.9          5.6         1.8  virginica   

105          6.5         3.0          5.8         2.2  virginica   

106          7.6         3.0          6.6         2.1  virginica   

107          4.9         2.5          4.5         1.7  virginica   

108          7.3         2.9          6.3         1.8  virginica   

109          6.7         2.5          5.8         1.8  virginica   

110          7.2         3.6          6.1         2.5  virginica   

111          6.5         3.2          5.1         2.0  virginica   

112          6.4         2.7          5.3         1.9  virginica   

113          6.8         3.0          5.5         2.1  virginica   

114          5.7         2.5          5.0         2.0  virginica   

115          5.8         2.8          5.1         2.4  virginica   

116          6.4         3.2          5.3         2.3  virginica   

117          6.5         3.0          5.5         1.8  virginica   

118          7.7         3.8          6.7         2.2  virginica   

119          7.7         2.6          6.9         2.3  virginica   

120          6.0         2.2          5.0         1.5  virginica   

121          6.9         3.2          5.7         2.3  virginica   

122          5.6         2.8          4.9         2.0  virginica   

123          7.7         2.8          6.7         2.0  virginica   

124          6.3         2.7          4.9         1.8  virginica   

125          6.7         3.3          5.7         2.1  virginica   

126          7.2         3.2          6.0         1.8  virginica   

127          6.2         2.8          4.8         1.8  virginica   

128          6.1         3.0          4.9         1.8  virginica   

129          6.4         2.8          5.6         2.1  virginica   

130          7.2         3.0          5.8         1.6  virginica   

131          7.4         2.8          6.1         1.9  virginica   

132          7.9         3.8          6.4         2.0  virginica   

133          6.4         2.8          5.6         2.2  virginica   

134          6.3         2.8          5.1         1.5  virginica   

135          6.1         2.6          5.6         1.4  virginica   

136          7.7         3.0          6.1         2.3  virginica   

137          6.3         3.4          5.6         2.4  virginica   

138          6.4         3.1          5.5         1.8  virginica   

139          6.0         3.0          4.8         1.8  virginica   

140          6.9         3.1          5.4         2.1  virginica   

141          6.7         3.1          5.6         2.4  virginica   

142          6.9         3.1          5.1         2.3  virginica   

143          5.8         2.7          5.1         1.9  virginica   

144          6.8         3.2          5.9         2.3  virginica   

145          6.7         3.3          5.7         2.5  virginica   

146          6.7         3.0          5.2         2.3  virginica   

147          6.3         2.5          5.0         1.9  virginica   

148          6.5         3.0          5.2         2.0  virginica   

149          6.2         3.4          5.4         2.3  virginica   

150          5.9         3.0          5.1         1.8  virginica   

R 源代码:

library( ”randomForest” )   

data(iris)   

set.seed(100)   

ind=sample(2,nrow(iris),replace=TRUE,prob=c(0.8,0.2))   

iris.rf=randomForest(Species~.,iris[ind==1,],ntree=50,nPerm=10,mtry=3,proximity=TRUE,importance=TRUE)   

print(iris.rf)   

iris.pred=predict( iris.rf,iris[ind==2,] )   

table(observed=iris[ind==2,"Species"],predicted=iris.pred )   

3.4 一些重要参数说明

randomForest()对训练集的数据进行处理,生成决策树

iris.rf=randomForest(Species~.,iris[ind==1,],ntree=50,nPerm=10,mtry=3,proximity=TRUE,importance=TRUE)

Species~.:代表需要预测的列,species是列的名称。

iris[ind==1,]:生成决策树的训练集

ntree:生成决策树的数目

nperm:计算importance时的重复次数

mtry:选择的分裂属性的个数

proximity=TRUE:表示生成临近矩阵

importance=TRUE:输出分裂属性的重要性

predict()

iris.pred=predict( iris.rf,iris[ind==2,] )

iris.rf:表示生成的随机森林模型

iris[ind==2,] :进行预测的测试集

3.5预测结果

          predicted   

served     setosa versicolor virginica   

setosa         35          0         0  

versicolor      0         37         1  

virginica       0          3        33  

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容