R语言实现随机森林的方法示例

R语⾔实现随机森林的⽅法⽰例
⽬录
随机森林算法介绍
算法介绍:
决策树⽣长步骤:
投票过程:
基本思想:
随机森林的优点:
缺点
R语⾔实现
随机森林模型搭建
1:randomForest()函数⽤于构建随机森林模型
2:importance()函数⽤于计算模型变量的重要性
3:MDSplot()函数⽤于实现随机森林的可视化
4:rfImpute()函数可为存在缺失值的数据集进⾏插补(随机森林法),得到最优的样本拟合值
5:treesize()函数⽤于计算随机森林中每棵树的节点个数
随机森林算法介绍
算法介绍:
简单的说,随机森林就是⽤随机的⽅式建⽴⼀个森林,森林⾥⾯有很多的决策树,并且每棵树之间是没有关联的。得到⼀个森林后,当有⼀个新的样本输⼊,森林中的每⼀棵决策树会分别进⾏⼀下判断,进⾏类别归类(针对分类算法),最后⽐较⼀下被判定哪⼀类最多,就预测该样本为哪⼀类。
随机森林算法有两个主要环节:决策树的⽣长和投票过程。
决策树⽣长步骤:
从容量为N的原始训练样本数据中采取放回抽样⽅式(即bootstrap取样)随机抽取⾃助样本集,重复k(树的数⽬为k)次形成⼀个新的训练集N,以此⽣成⼀棵分类树;
每个⾃助样本集⽣长为单棵分类树,该⾃助样本集是单棵分类树的全部训练数据。设有M个输⼊特征,则在树的每个节点处从M个特征中随机挑选m(m < M)个特征,按照节点不纯度最⼩的原则从这m个特征中选出⼀个特征进⾏分枝⽣长,然后再分别递归调⽤上述过程构造各个分枝,直到这棵树能准确地分类训练集或所有属性都已被使⽤过。在整个森林的⽣长过程中m将保持恒定;
分类树为了达到低偏差和⾼差异⽽要充分⽣长,使每个节点的不纯度达到最⼩,不进⾏通常的剪枝操作。
投票过程:
随机森林采⽤Bagging⽅法⽣成多个决策树分类器。
基本思想:
给定⼀个弱学习算法和⼀个训练集,单个弱学习算法准确率不⾼,可以视为⼀个窄领域专家;
将该学习算法使⽤多次,得出预测函数序列,进⾏投票,将多个窄领域专家评估结果汇总,最后结果准确率将⼤幅提升。
随机森林的优点:
可以处理⼤量的输⼊变量;
对于很多种资料,可以产⽣⾼准确度的分类器;
可以在决定类别时,评估变量的重要性;
在建造森林时,可以在内部对于⼀般化后的误差产⽣不偏差的估计;
包含⼀个好⽅法可以估计遗失的资料,并且,如果有很⼤⼀部分的资料遗失,仍可以维持准确度;
提供⼀个实验⽅法,可以去侦测 variable interactions;
对于不平衡的分类资料集来说,可以平衡误差;
计算各例中的亲近度,对于数据挖掘、侦测偏离者(outlier)和将资料视觉化⾮常有⽤;
使⽤上述。可被延伸应⽤在未标记的资料上,这类资料通常是使⽤⾮监督式聚类。也可侦测偏离者和观看资料;
学习过程很快速。
缺点
随机森林已经被证明在某些噪⾳较⼤的分类或回归问题上会过拟合;
对于有不同级别的属性的数据,级别划分较多的属性会对随机森林产⽣更⼤的影响,所以随机森林在这种数据上产出的属性权值是不可信的。
R语⾔实现
寻最优参数mtry,即指定节点中⽤于⼆叉树的最佳变量个数
library("randomForest")
n<-length(names(train_data))    #计算数据集中⾃变量个数,等同n=ncol(train_data)
rate=1    #设置模型误判率向量初始值
for(i in 1:(n-1)){
set.seed(1234)
rf_train<-randomForest(as.factor(train_data$IS_LIUSHI)~.,data=train_data,mtry=i,ntree=1000)
rate[i]<-mean(rf_train$err.rate)  #计算基于OOB数据的模型误判率均值
print(rf_train)
}
rate    #展⽰所有模型误判率的均值
核磁共振氢谱
plot(rate)
寻最佳参数ntree,即指定随机森林所包含的最佳决策树数⽬
set.seed(100)
rf_train<-randomForest(as.factor(train_data$IS_LIUSHI)~.,data=train_data,mtry=12,ntree=1000)
plot(rf_train)    #绘制模型误差与决策树数量关系图
legend(800,0.02,"IS_LIUSHI=0",cex=0.9,bty="n")
legend(800,0.0245,"total",cex=0.09,bty="n")
随机森林模型搭建
set.seed(100)
rf_train<-randomForest(as.factor(train_data$IS_LIUSHI)~.,data=train_data,mtry=12,ntree=400,importance=TRUE,proximity=TRUE)    importance设定是否输出因变量在模型中的重要性,如果移除某个变量,模型⽅差增加的⽐例是它判断变量重要性的标准之⼀;
proximity参数⽤于设定是否计算模型的临近矩阵;
ntree⽤于设定随机森林的树数。
输出变量重要性:分别从精确度递减和均⽅误差递减的⾓度来衡量重要程度。
importance<-importance(rf_train)
write.csv(importance,file="E:/模型搭建/importance.csv",row.names=T,quote=F)
barplot(rf_train$importance[,1],main="输⼊变量重要性测度指标柱形图")
box()
提取随机森林模型中以准确率递减⽅法得到维度重要性值。type=2为基尼系数⽅法
importance(rf_train,type=1)
varImpPlot(x=rf_train,sort=TRUE,n.var=nrow(rf_train$importance),main="输⼊变量重要性测度散点图")
信息展⽰
print(rf_train)    #展⽰随机森林模型简要信息
hist(treesize(rf_train))  #展⽰随机森林模型中每棵决策树的节点数
max(treesize(rf_train));min(treesize(rf_train))
MDSplot(rf_train,train_data$IS_OFF_USER,palette=rep(1,2),pch=as.numeric(train_data$IS_LIUSHI))    #展⽰数据集在⼆维情况下各类别的具体分布情况检测
pred<-predict(rf_train,newdata=test_data)
pred_out_1<-predict(object=rf_train,newdata=test_data,type="prob")  #输出概率
table <- table(pred,test_data$IS_LIUSHI)
sum(diag(table))/sum(table)  #预测准确率
n-甲基吡咯烷酮plot(margin(rf_train,test_data$IS_LIUSHI),main=观测值被判断正确的概率图)
randomForest包可以实现随机森林算法的应⽤,主要涉及5个重要函数,语法和参数请见下
1:randomForest()函数⽤于构建随机森林模型
randomForest(formula, data=NULL, ..., subset, na.action=na.fail)
randomForest(x, y=NULL, xtest=NULL, ytest=NULL, ntree=500,
mtry=if (!is.null(y) && !is.factor(y))
max(floor(ncol(x)/3), 1) else floor(sqrt(ncol(x))),
replace=TRUE, classwt=NULL, cutoff, strata,
放轻松我会慢慢来
sampsize = if (replace) nrow(x) else ceiling(.632*nrow(x)),
nodesize = if (!is.null(y) && !is.factor(y)) 5 else 1,
maxnodes = NULL,
importance=FALSE, localImp=FALSE, nPerm=1,
proximity, oob.prox=proximity,
norm.votes=TRUE, do.trace=FALSE,
keep.forest=!is.null(y) && is.null(xtest), corr.bias=FALSE,
keep.inbag=FALSE, ...)
formula指定模型的公式形式,类似于y~x1+x2+x3…;
data指定分析的数据集;
subset以向量的形式确定样本数据集;
na.action指定数据集中缺失值的处理⽅法,默认为na.fail,即不允许出现缺失值,也可以指定为na.omit,即删除缺失样本;
x指定模型的解释变量,可以是矩阵,也可以是数据框;
y指定模型的因变量,可以是离散的因⼦,也可以是连续的数值,分别对应于随机森林的分类模型和预测模型。这⾥需要说明的是,如果不指定y值,则随机森林将是⼀个⽆监督的模型;
xtest和ytest⽤于预测的测试集;
ntree指定随机森林所包含的决策树数⽬,默认为500;
mtry指定节点中⽤于⼆叉树的变量个数,默认情况下数据集变量个数的⼆次⽅根(分类模型)或三分之⼀(预测模型)。⼀般是需要进⾏⼈为的逐次挑选,确定最佳的m值;
replace指定Bootstrap随机抽样的⽅式,默认为有放回的抽样
classwt指定分类⽔平的权重,对于回归模型,该参数⽆效;
strata为因⼦向量,⽤于分层抽样;
sampsize⽤于指定样本容量,⼀般与参数strata联合使⽤,指定分层抽样中层的样本量;养殖场消毒制度
nodesize指定决策树节点的最⼩个数,默认情况下,判别模型为1,回归模型为5;
maxnodes指定决策树节点的最⼤个数;
importance逻辑参数,是否计算各个变量在模型中的重要性,默认不计算,该参数主要结合importance()函数使⽤;
proximity逻辑参数,是否计算模型的临近矩阵,主要结合MDSplot()函数使⽤;
oob.prox是否基于OOB数据计算临近矩阵;
norm.votes显⽰投票格式,默认以百分⽐的形式展⽰投票结果,也可以采⽤绝对数的形式;
术语翻译keep.forest是否保留模型的输出对象,对于给定xtest值后,默认将不保留算法的运算结果。
2:importance()函数⽤于计算模型变量的重要性
importance(x, type=NULL, class="NULL", scale=TRUE, ...)
x为randomForest对象;
type可以是1,也可以是2,⽤于判别计算变量重要性的⽅法,1表⽰使⽤精度平均较少值作为度量标准;2表⽰采⽤节点不纯度的平均减少值最为度量标准。值越⼤说明变量的重要性越强;
scale默认对变量的重要性值进⾏标准化。
3:MDSplot()函数⽤于实现随机森林的可视化
MDSplot(rf, fac, k=2, palette=NULL, pch=20, ...)
rf为randomForest对象,需要说明的是,在构建随机森林模型时必须指定计算临近矩阵,即设置proximity参数为
TRUE;
fac指定随机森林模型中所使⽤到的因⼦向量(因变量);
palette指定所绘图形中各个类别的颜⾊;
pch指定所绘图形中各个类别形状;
还可以通过R⾃带的plot函数绘制随机森林决策树的数⽬与模型误差的折线图
4:rfImpute()函数可为存在缺失值的数据集进⾏插补(随机森林法),得到最优的样本拟合值rfImpute(x, y, iter=5, ntree=300, ...)
rfImpute(x, data, ..., subset)
x为存在缺失值的数据集;网聊大管家
y为因变量,不可以存在缺失情况;
iter指定插值过程中迭代次数;
ntree指定每次迭代⽣成的随机森林中决策树数量;
subset以向量的形式指定样本集。
5:treesize()函数⽤于计算随机森林中每棵树的节点个数
treesize(x, terminal=TRUE)
x为randomForest对象;
terminal指定计算节点数⽬的⽅式,默认只计算每棵树的根节点,设置为FALSE时将计算所有节点(根节点+叶节点)。
⼀般treesize()函数⽣成的结果⽤于绘制直⽅图,⽅⾯查看随机森林中树的节点分布情况。
到此这篇关于R语⾔实现随机森林的⽅法⽰例的⽂章就介绍到这了,更多相关R语⾔随机森林内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

本文发布于:2024-09-24 06:20:45,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/33138.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模型   森林   指定   数据
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议