《R语言与农业数据统计分析及建模》学习——机器学习

        机器学习方法是计算机利用已有的数据(经验),得出某种模型,并利用此模型预测未来的一种方法。常用的机器学习模型:

        ①决策树

        ②随机森林(random forest)

        ③支持向量机(support vector machine,SVM)

        ④bagging,来自bootstrap aggregating

        ⑤adaboost

        ⑥人工神经网络(artifical neural networks)

        不同的机器学习模型需要使用不同的函数包,因此我们自爱建模之前要先下载安装好相应的函数包。

        决策树包:rpart

        随机森林包:randomForest

        支持向量机包:kernlab

1、决策数分类

        决策树方法,处理离散值时,称为决策树;在处理连续变量时,称为回归树。

# 设置随机种子,用于复现结果
set.seed(33)
# 加载决策树包
library(rpart)
# 抽取用于建模的数据,70%的数据集用于建模
ind<-sample(1:150,105)
# 构建决策树模型
m<-rpart(formula=Species~.,data=iris[ind,],method="class")
# 使用建立的模型进行预测
pre<-predict(m,iris[-ind,-5],type="class")
# 计算准确率
result<-sum(pre==iris$Species[-ind])/length(pre)
print(result)

2、随机森林和支持向量机

# 随机森林
library(randomForest)
r<-randomForest(Species~.,data=iris[ind,])
pred<-predict(r,iris[-ind,-5])
result<-sum(pred==iris$Species[-ind])/length(pred)
print(result)

# 支持向量机
library(kernlab)
k<-ksvm(x=Species~.,iris[ind,])
pred<-predict(k,iris[-ind,-5])
result<-sum(pred==iris$Species[-ind])/length(pred)
print(result)

        大家可以自行验证预测的准确率。

3、模型的随机性

        单次抽取数据集进行机器学习具有较大的随机性。比较模型的预测精度,需要进行多次训练模型并预测,得到较稳定的结果。

## 决策树
# 加载rpart包
library(rpart)
# 初始化变量,用于存储驯化中的预测精度
result1<-0
# 循环30次
for(i in 1:30){
  # 随机抽取数据集,不设随机种子
  ind=sample(1:150,105)
  # 训练模型
  r<-rpart(formula=Species~.,data=iris[ind,],method="class")
  # 预测模型
  pred<-predict(r,iris[-ind,-5],type="class")
  # 计算并储存预测精度
  result1[i]<-sum(pred==iris$Species[-ind])/length(pred)
}
# 求平均预测精度
mean(result1)

        注意:运行30次仍具有一定的偶然性,每次运行的结果仍会有所不同。

其他两个模型的运行代码如下:

# 初始化变量,用于存储驯化中的预测精度
result2<-0
# 循环30次
for(i in 1:30){
  # 随机抽取数据集,不设随机种子
  ind=sample(1:150,105)
  # 训练模型
  r<-randomForest(Species~.,data=iris[ind,])
  # 预测模型
  pred<-predict(r,iris[-ind,-5])
  # 计算并储存预测精度
  result2[i]<-sum(pred==iris$Species[-ind])/length(pred)
}
# 求平均预测精度
mean(result2)

# 初始化变量,用于存储驯化中的预测精度
result3<-0
# 循环30次
for(i in 1:30){
  # 随机抽取数据集,不设随机种子
  ind=sample(1:150,105)
  # 训练模型
  k<-ksvm(Species~.,data=iris[ind,])
  # 预测模型
  pred<-predict(k,iris[-ind,-5])
  # 计算并储存预测精度
  result3[i]<-sum(pred==iris$Species[-ind])/length(pred)
}
# 求平均预测精度
mean(result3)

4、模型的比较

        (1)模型的比较可以直接使用平均预测精度直接进行比较。

        (2)直接比较平均预测精度虽然可以看出模型的平均水平,但难以得到模型的上下限以及稳定性等信息。

# 制作数据框
result<-data.frame(
  # 精度列
  precision=c(result1,result2,result3),
  # 模型方法列
  method=gl(n=3,k=30,labels=c('decision',"randomForest","SVM"))
)
head(result)

# 绘制箱线图
library(ggplot2)
ggplot(data=result,mapping=aes(x=method,y=precision,fill=method))+geom_boxplot()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值