其他分享
首页 > 其他分享> > 基于R语言做决策树和随机森林(3)

基于R语言做决策树和随机森林(3)

作者:互联网

上节我们介绍了随机森林的一些简单情况和使用R语言做二分类结局变量的随机森林模型分析,今天我们继续来介绍为连续变量结局变量的随机森林模型分析,废话不多说,立即开始,使用的数据为SPSS自带的大气层臭氧的数据集,主要描述的是臭氧浓度和大气一些相关指标的情况,因为有些数据是非线性的,使用Logistic回归不合适,可以使用随机森林模型进行分析。
需要使用到randomForest、pROC、lforeign、Metrics、ggplot2包,要先下载好,我们先导入数据看一下情况

library(randomForest)
library(pROC)
library(foreign)
library(Metrics)
library(ggplot2)
bc <- read.spss("E:/r/test/ozone.sav",
                use.value.labels=F, to.data.frame=T)
names(bc)

在这里插入图片描述
在这里插入图片描述
数据中有七个变量,ozon每日臭氧水平为结局变量,Inversion base height反转基准高度,Pressure gradient (mm Hg) 压力梯度(mm Hg),Visibility (miles) 能见度(英里),Temperature (degrees F) 温度(华氏度),Day of the year日期,vh我也不知道是什么,反正就是一参数,这里所有的变量都是连续的。
和二分类模型一样,我们先建立训练集和验证集

set.seed(1)
index <- sample(2,nrow(bc),replace = TRUE,prob=c(0.7,0.3))
traindata <- bc[index==1,]
testdata <- bc[index==2,]

在这里插入图片描述
建立随机森林模型

def_ntree<- randomForest(ozon ~vh+ibh+dpg+vis+temp,data=traindata,
                         ntree=500,important=TRUE,proximity=TRUE)
plot(def_ntree)

在这里插入图片描述
可以看到到了500颗树后,模型比较稳定了,我们还可以通过tuneRF函数求出mtry,

mte<-tuneRF(traindata[,c(1,3:6)],traindata[,2],stepFactor =2)

假如我们想知道温度和臭氧浓度的关系,可以发现,当温度达到90度,对臭氧影响很大

partialPlot(def_ntree,traindata,temp,"0",xlab = "temp",ylab = "Variabl effect")

在这里插入图片描述
接下来生成训练集和预测集的概率

ctree.predict = predict(def_ntree,testdata)
traindata$ctree.predict1 = predict(def_ntree,traindata)

通过查看R2,rmse,mae比较模型的拟合性

r2<-cor(ctree.predict,testdata$ozon)^2
rmse<-rmse(ctree.predict,testdata$ozon)
mae<-mae(ctree.predict,testdata$ozon)

在这里插入图片描述
生成校准的散点图,可以发现大于15以后,预测效能变差,残差增大

plot(ctree.predict,testdata$ozon,pch=19,col="gray25",xlab = "实际值",ylab="预存值")
abline(0,1,col="red")

在这里插入图片描述
对变量重要性进行评分,可以发现温度和高度是影响臭氧的重要变量

varImpPlot(def_ntree)

在这里插入图片描述

ggplot() +
  geom_line(data=traindata,aes(traindata$doy, traindata$ozon,col="red"))+
  geom_line(data=traindata,aes(traindata$doy, traindata$ctree.predict1,col="greed"))+
  theme(legend.background = element_blank(),legend.position = c(0.1,0.8))+
  scale_color_discrete(name = "类别", labels = c("实际值", "预测值"))

在这里插入图片描述
我们还可以把任何数据带入求出预测值,也可以通过把臭氧浓度分类进行预判,还有通过验证集验证模型的预测性能,我这里就不一一演示了,可以参考前面两篇的内容。
更多精彩文章请关注公众号:零基础说科研
在这里插入图片描述

标签:基于,变量,模型,library,traindata,随机,ntree,def,决策树
来源: https://blog.csdn.net/dege857/article/details/114916294