XIUXIU179的博客

执剑走天涯

随机森林

     随机森林指的是利用多棵树对样本进行训练并预测的一种分类器。该分类器最早由Leo Breiman和Adele Cutler提出,并被注册成了商标。

根据下列算法而建造每棵树
  1. N来表示训练用例(样本)的个数,M表示特征数目。
  2. 输入特征数目m,用于确定决策树上一个节点的决策结果;其中m应远小于M
  3. N个训练用例(样本)中以有放回抽样的方式,取样N次,形成一个训练集(即bootstrap取样),并用未抽到的用例(样本)作预测,评估其误差。
  4. 对于每一个节点,随机选择m个特征,决策树上每个节点的决定都是基于这些特征确定的。根据这m个特征,计算其最佳的分裂方式。
  5. 每棵树都会完整成长而不会剪枝,这有可能在建完一棵正常树状分类器后会被采用)。
随机森林的优点有:
1)对于很多种资料,它可以产生高准确度的分类器;
2)它可以处理大量的输入变数;
3)它可以在决定类别时,评估变数的重要性;
4)在建造森林时,它可以在内部对于一般化后的误差产生不偏差的估计;
5)它包含一个好方法可以估计遗失的资料,并且,如果有很大一部分的资料遗失,仍可以维持准确度;
6)它提供一个实验方法,可以去侦测variable interactions;
7)对于不平衡的分类资料集来说,它可以平衡误差;
8)它计算各例中的亲近度,对于数据挖掘、侦测离群点(outlier)和将资料视觉化非常有用;
9)使用上述。它可被延伸应用在未标记的资料上,这类资料通常是使用非监督式聚类。也可侦测偏离者和观看资料;
10)学习过程是很快速的。


首先加载iris数据集,并分为两部分:70%为训练集,30%为测试集

>  set.seed(1234)
>  ind <- sample(2, nrow(iris), replace = TRUE, prob = c(0.7, 0.3))
>  trainData <- iris[ind ==1,]
>  testData <- iris[ind==2,]

其次加载randomForest包,并训练一个随机森林.下面的方程式为“Species~.”,表示用数据集中的其他所有变量来预测Species的值。

> library(randomForest)
randomForest 4.6-12
Type rfNews() to see new features/changes/bug fixes.

载入程辑包:‘randomForest’

The following object is masked from ‘package:ggplot2’:

    margin

Warning message:
程辑包‘randomForest’是用R版本3.3.3 来建造的 
> rf <- randomForest(Species ~ ., data = trainData, ntree = 100, proximity = TRUE)
> table(predict(rf), trainData$Species)
            
             setosa versicolor virginica
  setosa         40          0         0
  versicolor      0         35         2
  virginica       0          3        32

然后,根据生成的随机森林中不同树来绘制误差率。

> plot(rf)

变量的重要性获得。

> importance(rf)
             MeanDecreaseGini
Sepal.Length         7.668898
Sepal.Width          1.537643
Petal.Length        29.480942
Petal.Width         35.022696
> varImpPlot(rf)

最后,使用测试集对已经构建好的随机森林进行测试并查看结果。

> irisPred <- predict(rf, newdata = testData)
> table(irisPred, testData$Species)
            
irisPred     setosa versicolor virginica
  setosa         10          0         0
  versicolor      0         12         2
  virginica       0          0        14
> plot(margin(rf, testData$Species))

数据的编剧为正确归类的比例减去被归到其他类的最大比例。一般来说,边距为正数说明该数据点划分正确。




阅读更多
个人分类: R语言与数据挖掘
上一篇决策树
下一篇linux下安装7z命令及7z命令的使用
想对作者说点什么? 我来说一句

随机森林matlab代码

2011年03月17日 510KB 下载

初始决策树与随机森林

2018年04月02日 26KB 下载

classRF_train.m

2013年04月25日 14KB 下载

随机森林简单案例

2014年12月17日 1KB 下载

没有更多推荐了,返回首页

关闭
关闭