R语言实现决策树和朴素贝叶斯分类预测,并比较准确度(含数据集)

一开始用了《数据科学与大数据分析》(美国EMC教育服务集团)的书上的案例分析是否出去玩,后来发现只有10条训练数据,并且测试数据真值也不知道,故换了鸢尾花数据。
源数据链接:iris.data
提取码: frg4
如果打不开网盘请用这个地址,选iris.data右键保存:http://archive.ics.uci.edu/ml/machine-learning-databases/iris/
(感谢CSDN用户天使健的分享)
注意!!!这个下载后用txt打开也是data文件类型,不要读取错了

加载所需的包

rpart提供了决策树函数,plot绘图,klaR提供了朴素贝叶斯分类函数

library(rpart)
library(rpart.plot)
library(klaR)

读取数据并分集

注意文件路径,文件类型是data不是txt

#导入鸢尾花数据集
setwd("E:/Courses/专业课/大数据分析")    #调整默认的文件路径
data <- read.table("iris.data", header = FALSE, sep = ',')    #没有sep申明分隔符会导致全存进1个向量
names(data) <- c("Factor1","Factor2","Factor3","Factor4","Class")
print(data)

部分数据展示:

以0.8为划分标准,分出总量*0.8条训练集,其余为测试集。上述150条有120条训练数据,30条测试数据。随机产生。

set.seed(0)     #固定随机数,便于检查
train <- sample(nrow(data),0.8*nrow(data))    #随机选择150*0.2=30个数据为测试集,其余为训练集
print(train)
traindata <- data[train,]     #将抽样行赋给训练集
testdata <- data[-train,]     #将去掉抽样行的剩下的数据赋给测试集
print(traindata)
print(testdata)

随机产生了120个行号,剩下的用作测试

n <- length(testdata[,1])    #把测试集数据量赋给n,后面检验准确率用

构建决策树并计算准确率

#构建决策树并预测
tree <- rpart(Class~.,data=traindata,method="class",minsplit=1)
printcp(tree)    #通过cp值进行剪枝,避免过度拟合

tree <- prune(tree, cp=0.025641)    #通过cp看到分成3个子节点时交叉误差和4一样
rpart.plot(tree,branch=0,type=4)

关于决策树的算法(ID3,CART)和rpart的各个参数,可以参考这篇blog
画出决策树的图:

画好决策树后,用之前分出的testdata来预测:

predtree <- predict(tree,newdata=testdata,type="class")
testdata$Tree_Pre_Class <- predtree
a <- testdata$Tree_Pre_Class == testdata$Class
cnt1 <- sum(a[a=TRUE])
treerate <- cnt1/n
print(testdata)
print(a)
print(treerate)

为了便于观察,把预测结果写入testdata最后一列,a用来记录每一条预测的TRUE/FALSE值,cnt1统计了正确的个数,cnt1/n即为准确率。

可见有2个预测错误,正确率28/30≈0.9333

朴素贝叶斯预测与准确率

#构建朴素贝叶斯算法并预测
traindata$Class <- as.factor(traindata$Class)    #将Class转化为函数可读取的因子,否则会报错
bayes <- NaiveBayes(Class~.,data=traindata)
bayes$apriori    #先验概率
bayes$tables    #每个变量的条件概率
#plot(bayes)


同样的思路来测试贝叶斯的预测准确度,不再赘述。只需注意相关函数的语法。

predbayes <- predict(bayes,testdata)
testdata$Bayes_Pre_Class = predbayes$class
b <- testdata$Bayes_Pre_Class == testdata$Class
cnt2 <- sum(b[b=TRUE])
bayesrate <- cnt2/n
print(testdata)
print(b)
print(bayesrate)


可以看出,在这个例子中贝叶斯有3个预测错误,准确度27/30=0.9,其准确度不如决策树模型。

完整代码如下

library(rpart)
library(rpart.plot)
library(klaR)#导入鸢尾花数据集
setwd("E:/Courses/专业课/大数据分析")    #调整默认的文件路径
data <- read.table("iris.data", header = FALSE, sep = ',')
names(data) <- c("Factor1","Factor2","Factor3","Factor4","Class")
print(data)set.seed(0)     #固定随机数,便于检查
train <- sample(nrow(data),0.8*nrow(data))    #随机选择150*0.2=30个数据为测试集,其余为训练集
print(train)
traindata <- data[train,]     #将抽样行赋给训练集
testdata <- data[-train,]     #将去掉抽样行的剩下的数据赋给测试集
print(traindata)
print(testdata)n <- length(testdata[,1])    #把测试集数据量赋给n,后面检验准确率用#构建决策树并预测
tree <- rpart(Class~.,data=traindata,method="class",minsplit=1)
printcp(tree)    #通过cp值进行剪枝,避免过度拟合
tree <- prune(tree, cp=0.025641)    #通过cp看到分成3个子节点时交叉误差和4一样
rpart.plot(tree,branch=0,type=4)predtree <- predict(tree,newdata=testdata,type="class")
testdata$Tree_Pre_Class <- predtree
a <- testdata$Tree_Pre_Class == testdata$Class
cnt1 <- sum(a[a=TRUE])
treerate <- cnt1/n
print(testdata)
print(a)
print(treerate)#构建朴素贝叶斯算法并预测
traindata$Class <- as.factor(traindata$Class)    #将Class转化为函数可读取的因子,否则会报错
bayes <- NaiveBayes(Class~.,data=traindata)
bayes$apriori    #先验概率
bayes$tables    #每个变量的条件概率
#plot(bayes)predbayes <- predict(bayes,testdata)
testdata$Bayes_Pre_Class = predbayes$class
b <- testdata$Bayes_Pre_Class == testdata$Class
cnt2 <- sum(b[b=TRUE])
bayesrate <- cnt2/n
print(testdata)
print(b)
print(bayesrate)

R语言实现决策树和朴素贝叶斯分类预测,并比较准确度(含数据集)相关推荐

  1. R语言分类算法之朴素贝叶斯分类(Naive Bayesian Classification)

    1.朴素贝叶斯分类原理解析 根据已知的先验概率P(A|B),利用贝叶斯公式P(B|A)=P(A|B)P(B)/P(A)求出后验概率P(B|A),即该样本属于某一类的概率,然后选择具有最大后验概率的类作 ...

  2. R语言CART决策树、随机森林、chaid树预测母婴电商平台用户寿命、流失可视化

    全文链接:http://tecdat.cn/?p=31644 借着二胎政策的开放与家庭消费升级的东风,母婴市场迎来了生机盎然的春天,尤其是母婴电商行业,近年来发展迅猛(点击文末"阅读原文&q ...

  3. R语言构建决策树(decision trees)模型并进行调优和解释

    R语言构建决策树(decision trees)模型并进行调优和解释 目录 R语言构建决策树(decision trees)

  4. R语言时间序列分析之ARIMA模型预测

    R语言时间序列分析之ARIMA模型预测 今天学习ARIMA预测时间序列. 指数平滑法对于预测来说是非常有帮助的,而且它对时间序列上面连续的值之间相关性没有要求.但是,如果你想使用指数平滑法计算出预测区 ...

  5. R语言逻辑回归详细代码:预测双十一顾客是否使用天猫优惠券

    R语言逻辑回归详细代码:预测双十一顾客是否使用天猫优惠券 #[1,] "age" 年龄 #[2,] "job" 工作 #[3,] "marital&q ...

  6. R语言构建决策树模型(decision tree)并可视化决策树:自定义函数计算对数似然、自定义函数计算模型的分类效能(accuray、F1、偏差Deviance)、使用pander包美化界面输出内容

    R语言构建决策树模型(decision tree)并可视化决策树:自定义函数计算对数似然.自定义函数计算模型的分类效能(accuray.F1.偏差Deviance).使用pander包美化界面输出内容 ...

  7. 深度学习R语言 mlr3 建模,训练,预测,评估(随机森林,Logistic Regression)

    深度学习R语言 mlr3 建模,训练,预测,评估(随机森林,Logistic Regression) 本文主要通过使用mlr3包来训练German credit数据集,实现不同的深度学习模型. 1. ...

  8. R语言rpartb包树回归模型构建:基于前列腺prostate数据集

    R语言rpartb包树回归模型构建:基于前列腺prostate数据集 决策树是一种机器学习的方法.决策树的生成算法有ID3, C4.5和C5.0等.决策树是一种树形结构,其中每个内部节点表示一个属性上 ...

  9. R语言图形用户界面数据挖掘包Rattle:加载UCI糖尿病数据集、并启动Rattle图形用户界面、数据集变量重命名,为数据集结果变量添加标签、数据划分(训练集、测试集、验证集)、随机数设置

    R语言图形用户界面数据挖掘包Rattle:加载UCI糖尿病数据集.并启动Rattle图形用户界面.数据集变量重命名,为数据集结果变量添加标签.数据划分(训练集.测试集.验证集).随机数设置 目录

  10. R语言关于心脏病相关问题的预测和分析

    简介 背景 心脏病由心脏结构受损或功能异常引起包括先天性心脏病和后天性心脏病,不同类型的心脏病表现不同,轻重不一. 本报告是基于R语言对心脏研究的机器学习/数据科学调查分析.更具体地说,我们的目标是在 ...

最新文章

  1. html5网站测试工具,基于HTML5网页的前端技术测试技巧
  2. 光缆连接头符号缩写详解
  3. 全球及中国绝缘套管行业投资前景及未来竞争格局分析报告2022-2027年
  4. java byte 判断相等_深入理解Java装箱与拆箱
  5. 自己动手写CPU(2)流水线数据相关问题
  6. LeetCode-best time to buy and sell stock 2 数组
  7. amd sata controller下载_AMD发布全新锐龙芯片组驱动:告别卡死、报错
  8. mysql bin值总是变化_MySQL|update字段为相同的值是否会记录binlog
  9. Crash -- 生成Minidump调试信息
  10. loadrunner四大部分
  11. 移植SlidingMenu Android library,和安装example出现的问题解决
  12. linux系统的初化始配置(临时生效和永久生效)
  13. 大地坐标系是不是经纬度_批量导入经纬度点到奥维地图中
  14. 等保2.0 三级检查明细
  15. 爬虫第十一式:用selenium爬取民政部行政区划代码
  16. 计算机抖音链接,抖音怎么开始电脑直播
  17. 锯齿波FMCW测距、测速的原理
  18. Tempo - 分布式Loki链路追踪利器
  19. JavaScript复制内容到剪贴板 1
  20. 经济类图书推荐--转自水木

热门文章

  1. 微信公众帐号开发教程第8篇-QQ表情的发送与接收
  2. jsp错误之The end tag lt;/s:form is unbalanced
  3. 关于 NLP 中的 tokenize 总结
  4. python爬取微博图片教程_python实现爬取微博相册所有图片
  5. 适合长期电脑办公人群的养生小技巧
  6. 第四章 信道与信道容量
  7. Pssp-mvirt: 基于多视图深度学习架构的肽二级结构预测
  8. 数据结构与算法实验01-使用链表实现多项式乘法
  9. js table 生成序号_JS自动为表格增加序号
  10. 最适合编程的笔记本电脑是什么?