投稿问答最小化  关闭

万维书刊APP下载

你知道随机森林吗?

2023/1/16 11:29:31  阅读:129 发布者:

分类是管理学、金融学、统计学等常用的实证分析方法之一,目前,分类的方法有逻辑回归、支持向量机、贝叶斯分类、决策树、支持向量机、卷积神经网络、线性判别分类器等等。方法有很多,不同的方法适用于不同的环境,其难易度也不同。

本文对随机森林算法进行实例分析,讲述在R语言中的建模过程与结果。

1

随机森林

在开始建模前,首先说一下,随机森林名称的由来。

Leo BreimanAdele Cutler发展出、推论出随机森林的算法。这个术语是1995年由贝尔实验室的Tin Kam Ho所提出的随机决策森林(random decision forests)而来的。这个方法则是结合 Breimans "Bootstrap aggregating" 想法和 Ho "random subspace method"以建造决策树的集合。

随机森林在以决策树、构建Bagging集成(从数据里抽取出自举样本,即有放回的随机样本,根据每一个样本,可以建立一个决策树模型,最终的模型是所有单个决策树结果的平均。bagging决策树算法通过降低方差得到稳定的最终模型,这种方法提高了精度,也不太可能过拟合)的基础上,进一步在基决策树的训练过程中引入了随机属性选择。所以随机指的是训练过程中引入了随机属性选择,森林是指的“众木成林”,也就是许多决策树的集合。所以,学术界的大佬起名字总是有深意的。

01

随机森林的优缺点

优点

训练可以高度并行化,对于大数据时代的大样本训练速度有优势。个人觉得这是的最主要的优点。

由于可以随机选择决策树节点划分特征,这样在样本特征维度很高的时候,仍然能高效的训练模型。

在训练后,可以给出各个特征对于输出的重要性

由于采用了随机采样,训练出的模型的方差小,泛化能力强。

相对于Boosting系列的AdaboostGBDTRF实现比较简单。

对部分特征缺失不敏感。

缺点

在某些噪音比较大的样本集上,RF模型容易陷入过拟合。

取值划分比较多的特征容易对RF的决策产生更大的影响,从而影响拟合的模型的效果。

02

随机森林最重要的参数

随机森林中树的个数:随机森林的总体规模。

树节点预选的变量个数:单棵决策树的情况。

2

基于R语言使用随机森林处理鸢尾花数据实战

安装与加载相关包

##安装

Install.packages(randomForest)       

##加载

Library(randomForest)      

了解数据格式

使用R内置的鸢尾花数据

##分类classification

##使用R内置的鸢尾花数据

data(iris)

head(iris)

设置随机数种子保证结果可重复

##设置随机种子数,保证结果可重复

set.seed(1234)

随机森林分类

##随机森林分类

iris.rf = randomForest(Species~.,data=iris,importance=TRUE,proximity=TRUE)

print(iris.rf)

结果如下:包括分析的命令,优化选择的分类变量个数2,和数据再分类和错误率统计结果。

此例中使用2个变量分类,三种花的分类错误率为4%

查看每个变量的分类贡献度

显示仅保存两位小数可读性更好

##查看每个变量的分类贡献度

round(importance(iris.rf),2)

格式化MeanDecreaseAccuracy

也就是说,没有这个特征(Features),分类准确度下降的程度,相当于常用的分类贡献度的概念

##可视化

varImPlot(iris.rf)      

分类结果主坐标轴分析

##主坐轴分析和可视化

iris.mds=cmdscale(1-iris.rf$proximity,eig=TURE)     

##设置样本点

op=par(pty=s)      

##散点图展示每个特征(Feature)和PCoA1/2轴间的相互分布

paris(cbind(iris[,1:4],iris.mds$points),cex=0.6,gap=0,col=c(red,green,blue)[as.numeric(iris$Species)],main=Tris Data: Predictors and MDS of Proximity Based on RandomForest)

par(op)

print(iris.mds$GOF)

结果如下:

可以看到个特征(Feature)间的相关性,如Petal.WidthPetal.Length正相关非常好,而且大小也可以很好分开不同组;更可以看到PCoA1/2与每个特征(Features)分布样式,是如何区分组的。

随机选取2/3的数据作为训练集,用1/3的数据集作为验证集

##随机选取2/3预测,1/3验证

##随机1-2有放回抽样150次,概率分别为0.670.33,用于获取训练集

ind=sample(2,nrow(iris),replace=TURE,prob=c(0.67,0.33))

#2/3作为预测建模

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

print(iris.rf)

#1/3作为预测模型

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

#输出预测与观测对应表

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

使用未被用于建模的1/3样本数据用于验证模型,结果更加可信

无监督分类

##无监督分类

set.seed(1234)

iris.urf=randomForest(iris[,-5])

##主坐标轴分析并展示

MDSplot(iris.urf,iris$Species)

结果如下:

可以看到,其中3个物种在分组未知的情况下,也是可以非常好的分开的。其实在分析前应该进行PCoA,查看组间是否存在差异,再进行随机森林找特征(Features)。

分层抽样

##分层抽样

#分层取样:抽取203020是每个决策树的成长空间(species)

(iris.rf2=randomForest(iris[1:4],iris$Species,sampsize=c(20,30,20)))

随机森林自动评估,利用袋外数据(OOB)评估错误率也是非常可靠的。

转自:“云导师学术辅导平台”微信公众号

如有侵权,请联系本站删除!


  • 万维QQ投稿交流群    招募志愿者

    版权所有 Copyright@2009-2015豫ICP证合字09037080号

     纯自助论文投稿平台    E-mail:eshukan@163.com