随机森林属于模式识别中有监督的分类中的一种方法。它的原理是以决策树为基本分类器的一个集成学习模型,它包含多个由Bagging集成学习技术训练得到的决策树,当输入待分类的样本时,最终的分类结果由决策树的输出结果的众数决定。

一、基本原理列出如下:

  1. 从原始数据m*n维数据中有放回的抽取样本容量与原数据相同的数据样本m*n,样本数量为ntree(在R语言中可以指定);
  2. 对每一个数据样本应用决策树的计算方法(但并不全部应用),即从数据的n维特征中无放回的随机抽取mtry维特征(在R语言中可以指定)。以随机色林的分类功能为例,通过mtry维特征中,通过计算信息增益的方式找到分类效果最好的一维特征k,及其阈值th,小于th的样本划分到左节点,其余的划分到右节点,继续训练其他节点。
  3. 重复训练所有的数据样本,得到ntree个决策树
  4. 随机森林便是ntree个决策树集合起来的森林,当预测结果时,所有的决策树对预测集一一进行分类,得到其分类结果,统计票数得到结果。

注:

  1. 要想对随机森林进行细节及方法上的理解,还希望读者自己查询相关文献。
  2. 笔者以为,如果能够明白决策树的算法及原理,对随机森林的理解能够加深。
  3. 关于信息增益,这里提供一种比较简单但不科学的方法,我们都知道“熵”这个词,它表征物质状态的参量之一,越大物质状态越混乱。于是,在信息学中有了“信息熵”这个名词,可以理解为信息的混乱程度,那么信息增益可以理解为信息在分类前与分类后的差值,继而能够知道信息熵减少的越多,信息的混乱程度越低,那么分类效果也就比较好。实际上这个分类方法也有其局限性,现在的分类方法还有很多。
  4. 最后,重中之重,上述原理以及提供的理解方法,是笔者自己的理解,并且原理表述并不严谨和标准,具体参见维基百科上对随机森林的表述,如有错误之处还请广大读者批评指正!

好啦!介绍到此为止,貌似有点多,下面进入演示阶段。

二、示例

数据为R自带的数据集iris,该数据集包含了150个样本,5个变量,记录了鸢尾属植物的萼片、花瓣的长度和宽度,三个物种,每个物种50株植物,下面我们用随机森林方法通过植物的萼片、花瓣的长度和宽度来对150个样本根据其物种进行分类。

r语言随机森林模型 r语言随机森林模型代码inmse_随机森林


1.函数介绍

randomForest(formula, data, mtry, ntree)


r语言随机森林模型 r语言随机森林模型代码inmse_决策树_02



注:mtry的取值是创建随机森林方法的作者的建议。

2.操作步骤如下:




注:1. OOB错误率即袋外数据错误率,如何产生的呢?我们在随机森林模型的原理中提到“从原始数据m*n维数据中有放回的抽取样本容量与原数据相同的数据样本m*n”,既然是有放回的抽取,则必然有未抽取到的样本,那么这部分数据就是袋外数据,在每个决策树形成后,这部分被用于验证决策树的正确率,再将所有的决策树的OOB错误率平均即得到模型的OOB错误率。

到这里一个随机森林模型便建好了,当然randomForest包的功能可不到这里为止,你可以看到在建好的模型中,变量的相对重要性,即importance()函数,它以MeanDecreaseAccuracy为指标评价变量的重要性,基本原理可以理解为它在原有的模型的基础上将某个变量进行随机赋值,预测的误差的变化即是变量的重要性。

3. importance()函数

这里展示importance()函数。

拓展延伸:

  1. randomForest包中集合了众多具有强大功能的函数,如tuneRF()函数可以调节mtry值、varImpPlot()函数可以将变量的相对重要性做成图示以方便比较、varUsed可以显示统计随机森林模型中使用到的变量的次数。
  2. 关于随机森林模型,这里列出些笔者参考的网页及资源,有兴趣的读者可以点击查看。

我爱机器学习网站:http://www.52ml.net/该网站介绍了很多机器学习的和理论,对笔者的帮助很大。

一篇文献:《随机森林理论浅析》,董师师,黄哲学。这篇文献将森林中的几个定理进行了证明,有兴趣的读者可以寻找查看。

关于随机森林的介绍就到这里,这是笔者自己学习的一点心得,在此分享,如有错误之处还请广大读者批评指正!