机器学习算法—随机森林

随机森林是指利用多棵决策树对样本进行训练并预测的一种算法。也就是说随机森林算法是一个包含多个决策树的算法,其输出的类别是由个别决策树输出的类别的众树来决定的。

1.什么是随机森林

1.1 Bagging思想

Bagging是bootstrap aggregating。思想就是从总体样本当中随机取一部分样本进行训练,通过多次这样的结果,进行投票获取平均值作为结果输出,这就极大可能的避免了不好的样本数据,从而提高准确度。因为有些是不好的样本,相当于噪声,模型学入噪声后会使准确度不高。

举个例子

假设有1000个样本,如果按照以前的思维,是直接把这1000个样本拿来训练,但现在不一样,先抽取800个样本来进行训练,假如噪声点是这800个样本以外的样本点,就很有效的避开了。重复以上操作,提高模型输出的平均值。

1.2 随机森林

Random Forest(随机森林)是一种基于树模型的Bagging的优化版本,一棵树的生成肯定还是不如多棵树,因此就有了随机森林,解决决策树泛化能力弱的特点。(可以理解成三个臭皮匠顶过诸葛亮)

而同一批数据,用同样的算法只能产生一棵树,这时Bagging策略可以帮助我们产生不同的数据集。Bagging策略来源于bootstrap aggregation:从样本集(假设样本集N个数据点)中重采样选出Nb个样本(有放回的采样,样本数据点个数仍然不变为N),在所有样本上,对这n个样本建立分类器(ID3\C4.5\CART\SVM\LOGISTIC),重复以上两步m次,获得m个分类器,最后根据这m个分类器的投票结果,决定数据属于哪一类。

每棵树的按照如下规则生成:

  1. 如果训练集大小为N,对于每棵树而言,随机且有放回地从训练集中的抽取N个训练样本,作为该树的训练集;
  2. 如果每个样本的特征维度为M,指定一个常数m<<M,随机地从M个特征中选取m个特征子集,每次树进行分裂时,从这m个特征中选择最优的;
  3. 每棵树都尽最大程度的生长,并且没有剪枝过程。

一开始我们提到的随机森林中的“随机”就是指的这里的两个随机性。两个随机性的引入对随机森林的分类性能至关重要。由于它们的引入,使得随机森林不容易陷入过拟合,并且具有很好得抗噪能力(比如:对缺省值不敏感)。

总的来说就是随机选择样本数,随机选取特征,随机选择分类器,建立多颗这样的决策树,然后通过这几课决策树来投票,决定数据属于哪一类(投票机制有一票否决制、少数服从多数、加权多数)

2. 随机森林分类效果的影响因素

  • 森林中任意两棵树的相关性:相关性越大,错误率越大;
  • 森林中每棵树的分类能力:每棵树的分类能力越强,整个森林的错误率越低。

减小特征选择个数m,树的相关性和分类能力也会相应的降低;增大m,两者也会随之增大。所以关键问题是如何选择最优的m(或者是范围),这也是随机森林唯一的一个参数。

3. 随机森林有什么优缺点

优点:

  • 在当前的很多数据集上,相对其他算法有着很大的优势,表现良好。
  • 它能够处理很高维度(feature很多)的数据,并且不用做特征选择(因为特征子集是随机选择的)。
  • 在训练完后,它能够给出哪些feature比较重要。
  • 训练速度快,容易做成并行化方法(训练时树与树之间是相互独立的)。
  • 在训练过程中,能够检测到feature间的互相影响。
  • 对于不平衡的数据集来说,它可以平衡误差。
  • 如果有很大一部分的特征遗失,仍可以维持准确度。

缺点:

  • 随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟合。
  • 对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的。

4. 随机森林如何处理缺失值?

根据随机森林创建和训练的特点,随机森林对缺失值的处理还是比较特殊的。

  • 首先,给缺失值预设一些估计值,比如数值型特征,选择其余数据的中位数或众数作为当前的估计值
  • 然后,根据估计的数值,建立随机森林,把所有的数据放进随机森林里面跑一遍。记录每一组数据在决策树中一步一步分类的路径.
  • 判断哪组数据和缺失数据路径最相似,引入一个相似度矩阵,来记录数据之间的相似度,比如有N组数据,相似度矩阵大小就是N*N
  • 如果缺失值是类别变量,通过权重投票得到新估计值,如果是数值型变量,通过加权平均得到新的估计值,如此迭代,直到得到稳定的估计值。

其实,该缺失值填补过程类似于推荐系统中采用协同过滤进行评分预测,先计算缺失特征与其他特征的相似度,再加权得到缺失值的估计,而随机森林中计算相似度的方法(数据在决策树中一步一步分类的路径)乃其独特之处。

5. 什么是OOB?随机森林中OOB是如何计算的,它有什么优缺点?

OOB

上面我们提到,构建随机森林的关键问题就是如何选择最优的m,要解决这个问题主要依据计算袋外错误率oob error(out-of-bag error)。

bagging方法中Bootstrap每次约有1/3的样本不会出现在Bootstrap所采集的样本集合中,当然也就没有参加决策树的建立,把这1/3的数据称为袋外数据oob(out of bag),它可以用于取代测试集误差估计方法。

袋外数据(oob)误差的计算方法如下:

  • 对于已经生成的随机森林,用袋外数据测试其性能,假设袋外数据总数为O,用这O个袋外数据作为输入,带进之前已经生成的随机森林分类器,分类器会给出O个数据相应的分类
  • 因为这O条数据的类型是已知的,则用正确的分类与随机森林分类器的结果进行比较,统计随机森林分类器分类错误的数目,设为X,则袋外数据误差大小=X/O

优缺点

这已经经过证明是无偏估计的,所以在随机森林算法中不需要再进行交叉验证或者单独的测试集来获取测试集误差的无偏估计。

6. 随机森林的过拟合问题

  1. 你已经建了一个有10000棵树的随机森林模型。在得到0.00的训练误差后,你非常高兴。但是,验证错误是34.23。到底是怎么回事?你还没有训练好你的模型吗?答:该模型过度拟合,因此,为了避免这些情况,我们要用交叉验证来调整树的数量。

7. 代码实现

GitHub:https://github.com/NLP-LOVE/ML-NLP/blob/master/Machine%20Learning/3.1%20Random%20Forest/RandomForestRegression.ipynb

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个变量(mtry n mall),然后在mtry中选择一个最具有分类能力的变量,变量分类的阈值通过检查每一个分类点确定;

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

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

3. 随机森林应用

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

3.1目标

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

3.2 准备的数据集

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

  1. Sepal.Length Sepal.Width Petal.Length Petal.Width    Species   
  2. 1            5.1         3.5          1.4         0.2     setosa   
  3. 2            4.9         3.0          1.4         0.2     setosa   
  4. 3            4.7         3.2          1.3         0.2     setosa   
  5. 4            4.6         3.1          1.5         0.2     setosa   
  6. 5            5.0         3.6          1.4         0.2     setosa   
  7. 6            5.4         3.9          1.7         0.4     setosa   
  8. 7            4.6         3.4          1.4         0.3     setosa   
  9. 8            5.0         3.4          1.5         0.2     setosa   
  10. 9            4.4         2.9          1.4         0.2     setosa   
  11. 10           4.9         3.1          1.5         0.1     setosa   
  12. 11           5.4         3.7          1.5         0.2     setosa   
  13. 12           4.8         3.4          1.6         0.2     setosa   
  14. 13           4.8         3.0          1.4         0.1     setosa   
  15. 14           4.3         3.0          1.1         0.1     setosa   
  16. 15           5.8         4.0          1.2         0.2     setosa   
  17. 16           5.7         4.4          1.5         0.4     setosa   
  18. 17           5.4         3.9          1.3         0.4     setosa   
  19. 18           5.1         3.5          1.4         0.3     setosa   
  20. 19           5.7         3.8          1.7         0.3     setosa   
  21. 20           5.1         3.8          1.5         0.3     setosa   
  22. 21           5.4         3.4          1.7         0.2     setosa   
  23. 22           5.1         3.7          1.5         0.4     setosa   
  24. 23           4.6         3.6          1.0         0.2     setosa   
  25. 24           5.1         3.3          1.7         0.5     setosa   
  26. 25           4.8         3.4          1.9         0.2     setosa   
  27. 26           5.0         3.0          1.6         0.2     setosa   
  28. 27           5.0         3.4          1.6         0.4     setosa   
  29. 28           5.2         3.5          1.5         0.2     setosa   
  30. 29           5.2         3.4          1.4         0.2     setosa   
  31. 30           4.7         3.2          1.6         0.2     setosa   
  32. 31           4.8         3.1          1.6         0.2     setosa   
  33. 32           5.4         3.4          1.5         0.4     setosa   
  34. 33           5.2         4.1          1.5         0.1     setosa   
  35. 34           5.5         4.2          1.4         0.2     setosa   
  36. 35           4.9         3.1          1.5         0.2     setosa   
  37. 36           5.0         3.2          1.2         0.2     setosa   
  38. 37           5.5         3.5          1.3         0.2     setosa   
  39. 38           4.9         3.6          1.4         0.1     setosa   
  40. 39           4.4         3.0          1.3         0.2     setosa   
  41. 40           5.1         3.4          1.5         0.2     setosa   
  42. 41           5.0         3.5          1.3         0.3     setosa   
  43. 42           4.5         2.3          1.3         0.3     setosa   
  44. 43           4.4         3.2          1.3         0.2     setosa   
  45. 44           5.0         3.5          1.6         0.6     setosa   
  46. 45           5.1         3.8          1.9         0.4     setosa   
  47. 46           4.8         3.0          1.4         0.3     setosa   
  48. 47           5.1         3.8          1.6         0.2     setosa   
  49. 48           4.6         3.2          1.4         0.2     setosa   
  50. 49           5.3         3.7          1.5         0.2     setosa   
  51. 50           5.0         3.3          1.4         0.2     setosa   
  52. 51           7.0         3.2          4.7         1.4 versicolor   
  53. 52           6.4         3.2          4.5         1.5 versicolor   
  54. 53           6.9         3.1          4.9         1.5 versicolor   
  55. 54           5.5         2.3          4.0         1.3 versicolor   
  56. 55           6.5         2.8          4.6         1.5 versicolor   
  57. 56           5.7         2.8          4.5         1.3 versicolor   
  58. 57           6.3         3.3          4.7         1.6 versicolor   
  59. 58           4.9         2.4          3.3         1.0 versicolor   
  60. 59           6.6         2.9          4.6         1.3 versicolor   
  61. 60           5.2         2.7          3.9         1.4 versicolor   
  62. 61           5.0         2.0          3.5         1.0 versicolor   
  63. 62           5.9         3.0          4.2         1.5 versicolor   
  64. 63           6.0         2.2          4.0         1.0 versicolor   
  65. 64           6.1         2.9          4.7         1.4 versicolor   
  66. 65           5.6         2.9          3.6         1.3 versicolor   
  67. 66           6.7         3.1          4.4         1.4 versicolor   
  68. 67           5.6         3.0          4.5         1.5 versicolor   
  69. 68           5.8         2.7          4.1         1.0 versicolor   
  70. 69           6.2         2.2          4.5         1.5 versicolor   
  71. 70           5.6         2.5          3.9         1.1 versicolor   
  72. 71           5.9         3.2          4.8         1.8 versicolor   
  73. 72           6.1         2.8          4.0         1.3 versicolor   
  74. 73           6.3         2.5          4.9         1.5 versicolor   
  75. 74           6.1         2.8          4.7         1.2 versicolor   
  76. 75           6.4         2.9          4.3         1.3 versicolor   
  77. 76           6.6         3.0          4.4         1.4 versicolor   
  78. 77           6.8         2.8          4.8         1.4 versicolor   
  79. 78           6.7         3.0          5.0         1.7 versicolor   
  80. 79           6.0         2.9          4.5         1.5 versicolor   
  81. 80           5.7         2.6          3.5         1.0 versicolor   
  82. 81           5.5         2.4          3.8         1.1 versicolor   
  83. 82           5.5         2.4          3.7         1.0 versicolor   
  84. 83           5.8         2.7          3.9         1.2 versicolor   
  85. 84           6.0         2.7          5.1         1.6 versicolor   
  86. 85           5.4         3.0          4.5         1.5 versicolor   
  87. 86           6.0         3.4          4.5         1.6 versicolor   
  88. 87           6.7         3.1          4.7         1.5 versicolor   
  89. 88           6.3         2.3          4.4         1.3 versicolor   
  90. 89           5.6         3.0          4.1         1.3 versicolor   
  91. 90           5.5         2.5          4.0         1.3 versicolor   
  92. 91           5.5         2.6          4.4         1.2 versicolor   
  93. 92           6.1         3.0          4.6         1.4 versicolor   
  94. 93           5.8         2.6          4.0         1.2 versicolor   
  95. 94           5.0         2.3          3.3         1.0 versicolor   
  96. 95           5.6         2.7          4.2         1.3 versicolor   
  97. 96           5.7         3.0          4.2         1.2 versicolor   
  98. 97           5.7         2.9          4.2         1.3 versicolor   
  99. 98           6.2         2.9          4.3         1.3 versicolor   
  100. 99           5.1         2.5          3.0         1.1 versicolor   
  101. 100          5.7         2.8          4.1         1.3 versicolor   
  102. 101          6.3         3.3          6.0         2.5  virginica   
  103. 102          5.8         2.7          5.1         1.9  virginica   
  104. 103          7.1         3.0          5.9         2.1  virginica   
  105. 104          6.3         2.9          5.6         1.8  virginica   
  106. 105          6.5         3.0          5.8         2.2  virginica   
  107. 106          7.6         3.0          6.6         2.1  virginica   
  108. 107          4.9         2.5          4.5         1.7  virginica   
  109. 108          7.3         2.9          6.3         1.8  virginica   
  110. 109          6.7         2.5          5.8         1.8  virginica   
  111. 110          7.2         3.6          6.1         2.5  virginica   
  112. 111          6.5         3.2          5.1         2.0  virginica   
  113. 112          6.4         2.7          5.3         1.9  virginica   
  114. 113          6.8         3.0          5.5         2.1  virginica   
  115. 114          5.7         2.5          5.0         2.0  virginica   
  116. 115          5.8         2.8          5.1         2.4  virginica   
  117. 116          6.4         3.2          5.3         2.3  virginica   
  118. 117          6.5         3.0          5.5         1.8  virginica   
  119. 118          7.7         3.8          6.7         2.2  virginica   
  120. 119          7.7         2.6          6.9         2.3  virginica   
  121. 120          6.0         2.2          5.0         1.5  virginica   
  122. 121          6.9         3.2          5.7         2.3  virginica   
  123. 122          5.6         2.8          4.9         2.0  virginica   
  124. 123          7.7         2.8          6.7         2.0  virginica   
  125. 124          6.3         2.7          4.9         1.8  virginica   
  126. 125          6.7         3.3          5.7         2.1  virginica   
  127. 126          7.2         3.2          6.0         1.8  virginica   
  128. 127          6.2         2.8          4.8         1.8  virginica   
  129. 128          6.1         3.0          4.9         1.8  virginica   
  130. 129          6.4         2.8          5.6         2.1  virginica   
  131. 130          7.2         3.0          5.8         1.6  virginica   
  132. 131          7.4         2.8          6.1         1.9  virginica   
  133. 132          7.9         3.8          6.4         2.0  virginica   
  134. 133          6.4         2.8          5.6         2.2  virginica   
  135. 134          6.3         2.8          5.1         1.5  virginica   
  136. 135          6.1         2.6          5.6         1.4  virginica   
  137. 136          7.7         3.0          6.1         2.3  virginica   
  138. 137          6.3         3.4          5.6         2.4  virginica   
  139. 138          6.4         3.1          5.5         1.8  virginica   
  140. 139          6.0         3.0          4.8         1.8  virginica   
  141. 140          6.9         3.1          5.4         2.1  virginica   
  142. 141          6.7         3.1          5.6         2.4  virginica   
  143. 142          6.9         3.1          5.1         2.3  virginica   
  144. 143          5.8         2.7          5.1         1.9  virginica   
  145. 144          6.8         3.2          5.9         2.3  virginica   
  146. 145          6.7         3.3          5.7         2.5  virginica   
  147. 146          6.7         3.0          5.2         2.3  virginica   
  148. 147          6.3         2.5          5.0         1.9  virginica   
  149. 148          6.5         3.0          5.2         2.0  virginica   
  150. 149          6.2         3.4          5.4         2.3  virginica   
  151. 150          5.9         3.0          5.1         1.8  virginica   

R 源代码:

  1. library( ”randomForest” )   
  2. data(iris)   
  3. set.seed(100)   
  4. ind=sample(2,nrow(iris),replace=TRUE,prob=c(0.8,0.2))   
  5. iris.rf=randomForest(Species~.,iris[ind==1,],ntree=50,nPerm=10,mtry=3,proximity=TRUE,importance=TRUE)   
  6. print(iris.rf)   
  7. iris.pred=predict( iris.rf,iris[ind==2,] )   
  8. 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预测结果

  1.           predicted   
  2. served     setosa versicolor virginica   
  3. setosa         35          0         0  
  4. versicolor      0         37         1  
  5. virginica       0          3        33  

发表评论

电子邮件地址不会被公开。 必填项已用*标注