R随机森林实现

原文链接:来自公众号生信数据挖掘

R实现随机森林

  • 该文只简单的讲解关于的R的随机森林具体实现步骤,只简单介绍了随机森林,未对原理进行过多解释

  • 随机森林模型是一种预测能力较强的数据挖掘模型,常用于进行分类预测和数据回归分析,这里我们只讨论分类预测。

  • 使用的数据集是R自带的 iris 的数据集
    在这里插入图片描述
    如上图所示, 随机森林模型包含多个树形分类器,预测结果由多个分类器(决策树)投票得出,每个决策树相当于一个大师,通过自己在数据集中学到的知识对于新的数据进行分类。

    在随机森林算法的函数randomForest()中有两个非常重要的参数,而这两个参数又将影响模型的准确性,它们分别是mtry和ntree。一般对mtry的选择是逐一尝试,直到找到比较理想的值,ntree的选择可通过图形大致判断模型内误差稳定时的值。

随机森林R包

randomForest::randomForest 该包中主要涉及5个重要函数,关于这5个函数的语法和参数请见下方:

randomForest(): 此函数用于构建随机森林模型

randomForest(formula, data=NULL, …, subset,na.action=na.fail)

  • formula:指定模型的公式形式,类似于y~x1+x2+x3…;
  • data:指定分析的数据集;
  • .ntree:指定随机森林所包含的决策树数目,默认为500;
  • mtry:指定节点中用于二叉树的变量个数,默认情况下数据集变量个数的二次方根(分类模型)或三分之一(预测模型)。一般是需要进行人为的逐次挑选,确定最佳的m值;

估值过程

  • 指定m值,即随机产生m个变量用于节点上的二叉树,m的选择原则是使错误率最低。
  • 应用bootstrap自助法在原数据集中又放回地抽取k个样本集,组成k棵决策树,每个决策树输出一个结果。
  • 对k个决策树组成的随机森林对样本进行分类或预测:分类原则:少数服从多数;预测原则:简单平均。

袋外错误率(oob error)

如何选择最优的特征个数m,要解决这个问题,我们主要依据计算得到的袋外错误率.
在构建每棵树时,对训练集使用了不同的bootstrap sample(随机且有放回地抽取)。所以对于每棵树而言,部分训练实例没有参与这棵树的生成,它们称为第k棵树的oob样本

袋外错误率(oob error)计算方式如下:

  1. 对每个样本计算它作为oob样本的树对它的分类情况
  2. 以简单多数投票作为该样本的分类结果
  3. 最后用误分个数占样本总数的比率作为随机森林的oob误分率

R randomForest函数实现

在R语言中,我们调用randomForest包中的randomForest()函数来实现随机森林算法。

安装程序包,查看样本数据结构

#R package# 

install.packages("randomForest")

library(randomForest)#选取训练样本(70%)和测试样本(30%)

index <- sample(2,nrow(iris),replace = TRUE,prob=c(0.7,0.3))

traindata <- iris[index==1,]

testdata <- iris[index==2,]

遍历比较确定最优mtry值。mtry参数是随机森林建模中,构建决策树分支时随机抽样的变量个数。选择合适的mtry参数值可以降低随机森林模型的预测错误率。示例的数据中共有4个自变量,可通过遍历设定mtry参数1至4进行4次建模,并打印出每次建模的错误率,选择错误率最低的mytry取值。

- 选择最优mtry参数值

n <- ncol(iris) -1

errRate <- c(1)

for (i in 1:n){ 

m <- randomForest(Species~.,data=iris,mtry=i,proximity=TRUE) 

err<-mean(m$err.rate)

errRate[i] <- err  }  

print(errRate)

[1] 0.05462878 0.04320072 0.04302654 0.04316091#选择平均误差最小的m  

m= which.min(errRate)  

print(m)

输出结果:[1] 3
根据遍历打印结果,当mtry=3时,错误率达到最低,因此本次建模过程中以3作为mtry参数值
选择合适的ntree参数值: ntree参数指出建模时决策树的数量。ntree值设置过低会导制错误率偏高,ntree值过高会提升模型复杂度,降低效率。以mtry=3进行随机森林建模,并将模型错误率与决策树数量的关系可视化,如下:

- 选择最优ntree参数值

 rf_ntree <- randomForest(Species~.,data=iris)

 plot(rf_ntree)

结果图如下:
在这里插入图片描述
从图中可以看到,当ntree=100时,模型内的误差就基本稳定了,出于更保险的考虑,我们确定ntree值为100。

建模与观察

根据以上结果,以mtry=3,mtree=100为参数建立随机森林模型,并打印模型信息

m <- randomForest(Species~.,data=traindata,mtry=3,

ntree=100, proximity=TRUE)

print(m)

结果如下所示:

Call:

 randomForest(formula = Species ~ ., data = traindata, mtry = 3,      

      ntree = 100, proximity = TRUE) 

       Type of random forest: classification

        Number of trees: 100No. of variables tried at each split: 3

        OOB estimate of  error rate: 5.41%

Confusion matrix:

setosa versicolor virginica class.error

setosa         39          0         0  0.00000000

versicolor      0         33         3  0.08333333

virginica       0          3        33  0.08333333
  • MDSplot():函数用于实现随机森林的可视化
specialmds <- cmdscale(1 - m$proximity, eig=TRUE)

op <- par(pty="s")

pdf("trees_proximity.pdf")

pairs(cbind(traindata[,1:length(traindata)-1], specialmds$points), cex=0.6, gap=0,col=c("red", "green", "blue")[as.numeric(traindata$Species)], main=":Predictors and MDS of Proximity Based on RandomForest")

par(op)

print(specialmds$GOF)

dev.off()

在这里插入图片描述

  • importance()函数:用于计算模型变量的重要性
importance(m)

结果:

   MeanDecreaseGini

Sepal.Length         1.201101

Sepal.Width          1.685455

Petal.Length        32.926760

Petal.Width         37.559478

绘制重要性图示:

varImpPlot(m)

在这里插入图片描述从返回的数据和图形可知,在四个变量中,Petal.Width和Petal.Length最为重要,其次分别是Sepal.Length和Sepal.Width.

- 接着使用已建立好的随机森林模型进行新数据集的测试

pred <- predict(m,newdata=testdata)
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值