朴素贝叶斯分类(naive bayesian,nb)源于贝叶斯理论,其基本思想:假设样本属性之间相互独立,对于给定的待分类项,求解在此项出现的情况下其他各个类别出现的概率,哪个最大,就认为待分类项属于那一类别。邮箱内垃圾邮件的筛选即应用朴素贝叶斯算法。

朴素贝叶斯分类实现的三阶段:

第一阶段,准备工作。根据具体情况确定特征属性,并对每一特征属性进行划分,然后人工对一些待分类项进行分类,形成训练样本集合。这一阶段的输入是所有待分类数据,输出是特征属性和训练样本。唯一需要人工处理的阶段,质量要求较高。

第二阶段,分类器训练阶段(生成分类器)。计算每个类别在训练样本中出现频率及每个特征属性划分对每个类别的条件概率估计,并将结果记录。其输入是特征属性和训练样本,输出是分类器。

第三阶段,应用阶段。使用分类器对待分类项进行分类,其输入是分类器和待分类项,输出是待分类项与类别的映射关系。

R语言贝叶斯分类函数包caret中train函数,klaR包中的NavieBayes函数,e1071包中的naiveBayes函数。

e1071包中naiveBayes( )函数使用方法:

Computes the conditional a-posterior probabilities of a categorical class variable given independent predictor variables using the Bayes rule.(贝叶斯分类即使用先验概率计算后验概率)

naiveBayes(formula, data, laplace = 0, ..., subset, na.action = na.pass)

formula:类似一般线性回归表达式,不含常数项。

data:需要分析的训练数据对象。

laplace:拉普拉斯估计值,默认为0。

subset:抽取要分析的训练数据子集。

na.action:缺失值的处理方法。默认情况下不将缺失值纳入模型计算,如果设定为na.omit则会删除缺失值进行计算。

klaR包中NaiveBayes( )函数使用方法:

NaiveBayes(formula, data, ..., subset, na.action = na.pass)
NaiveBayes(x, grouping, prior, usekernel = FALSE, fL = 0, ...) formula,data,subset,na.omit同上。
x:指定要处理的数据,数据框或者矩阵形式。
grouping:因子型的分类变量。
prior:可以为各个类别指定先验概率,默认情况下各个样本的比例为先验概率。
usekernel:是否使用核密度估计器估计密度函数。
fL:是否进行拉普拉斯修正,默认情况下不进行修正。数据量较小时可以设置为1,进行拉普拉斯修正。 klaR包是对e1071包的延伸与扩展,加入了先验概率和密度函数的估计方法。

使用样本数据声明:

这是一份汽车满意度car数据集,具体指标如下:

buy:购买价格(很高,高,中,低)

main:保养价格(很高,高,中,低)

doors:门的个数(2,3,4,5,……)

capacity:载人数

lug boot:车身大小

safety:安全程度(高,中,低)

accept:被接受程度(很好,好,满意,不满意)

代码:

#朴素贝叶斯分类

#导入数据
car <- read.table(file.choose(),sep = ',')
head(car)
#变量重命名
colnames(car) <- c('buy',"main",'doors','capacity',
'lug boot','safety','accept')
#选取75%数据为训练集,25%数据为测试集
#构建训练集的下标集
library(caret)
ind <- createDataPartition(car$accept,times = 1,p=0.75,list = F)
cartrain <- car[ind,]
cartest <- car[-ind,] ###e1071函数包使用
library(e1071)
nb.model <- naiveBayes(accept~.,data = cartrain)
#预测结果
nb_predict <- predict(nb.model,newdata = cartest)
#生成实际与预测交叉表和预测精度
nb.table <- table(actual=cartest$accept,predict=nb_predict)
nb_ratio <- sum(diag(nb.table))/sum(nb.table) ###klaR函数包使用,在e1071包的基础上进行的扩展
library(klaR)
knb.model <- NaiveBayes(accept~.,data = cartrain)
#预测结果
knb_predict <- predict(knb.model,newdata = cartest[,1:6])
#生成实际与预测交叉表和预测精度
knb.table <- table(actual=cartest$accept,predict=knb_predict$class)
knb_ratio <- sum(diag(knb.table))/sum(knb.table)
#分析结果
nb.table;knb.table
nb_ratio;knb_ratio

  运行结果:

通过朴素贝叶斯分类得到90.3%的准确率。

朴素贝叶斯方法优缺点:

参考来源:

https://edu.hellobi.com/course/192/announcement 内 https://pan.baidu.com/s/1nvJpp9J 密码: guwv

R语言学习笔记—朴素贝叶斯分类的更多相关文章

  1. R语言学习笔记之: 论如何正确把EXCEL文件喂给R处理

    博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html ---- 前言: 应用背景兼吐槽 继续延续之前每个月至少一次更新博客,归纳总结学习心得好习惯. ...

  2. R语言学习笔记-机器学习1-3章

    在折腾完爬虫还有一些感兴趣的内容后,我最近在看用R语言进行简单机器学习的知识,主要参考了<机器学习-实用案例解析>这本书. 这本书是目前市面少有的,纯粹以R语言为基础讲解的机器学习知识,书 ...

  3. R语言学习笔记(二)

    今天主要学习了两个统计学的基本概念:峰度和偏度,并且用R语言来描述. > vars<-c("mpg","hp","wt") &g ...

  4. R语言学习笔记:小试R环境

    买了三本R语言的书,同时使用来学习R语言,粗略翻下来感觉第一本最好: <R语言编程艺术>The Art of R Programming <R语言初学者使用>A Beginne ...

  5. R语言学习笔记:基础知识

    1.数据分析金字塔 2.[文件]-[改变工作目录] 3.[程序包]-[设定CRAN镜像] [程序包]-[安装程序包] 4.向量 c() 例:x=c(2,5,8,3,5,9) 例:x=c(1:100) ...

  6. R语言学习笔记——C#中如何使用R语言setwd()函数

    在R语言编译器中,设置当前工作文件夹可以用setwd()函数. > setwd("e://桌面//")> setwd("e:\桌面\")> s ...

  7. R语言学习笔记(一)

    1.不同的行业对数据集(即表格)的行和列称谓不同,统计学家称其为观测(observation)和变量(variable): 2.R语言存储数据的结构: ①向量:类似于C语言里的一位数组,执行组合功能的 ...

  8. R语言学习笔记

    向量化的函数 向量化的函数 ifelse/which/where/any/all/cumsum/cumprod/对于矩阵而言,可以使用rowSums/colSums.对于“穷举所有组合问题" ...

  9. R语言学习笔记-变量的作用域

    R语言是如何将变量值和变量绑定的 在r语言中,当前的 workspace就是global enviroment,当输入变量名时,首先会在global enviroment中搜索该变量,如有,则将它显示 ...

随机推荐

  1. zabbix监控 linux/windows 主机tcp连接状态

    更新内容:1).增加了对windows主机的tcp连接状态的监控2).修改linux主机的监控配置,使linux与windwos主机能够使用相同的模板tcp的连接状态对于监控服务器,尤其是Web服务器 ...

  2. ZT 设计模式六大原则(2):里氏替换原则

    设计模式六大原则(2):里氏替换原则 分类: 设计模式 2012-02-22 08:46 23330人阅读 评论(41) 收藏 举报 设计模式class扩展string编程2010 肯定有不少人跟我刚 ...

  3. Java实现MD5加密及解密的代码实例分享

    链接:http://www.jb51.net/article/86027.htm Java实现MD5加密及解密的代码实例分享 作者:厦门大学陈黎栋 字体:[增加 减小] 类型:转载 时间:2016-0 ...

  4. MySQL提权之user.MYD中hash破解方法

    经常在服务器提权的时候,尤其是windows环境下,我们发现权限不高,却可以读取mysql的datadir目录,并且能够成功下载user.MYD这个文件.但是在读取内容的时候,经常会遇到root密码h ...

  5. Sublime 正则替换

    打开替换的窗口 在Find What 写入待匹配的正则表达式,然后在Replace With写上要替换的内容($1代表第一个括号内内容,依次类推) 然后选择对应的选项

  6. Maven编译Java程序配置

    Hive 需要在工程里添加的Jar包: hadoop-2.2.0/share/hadoop/common/hadoop-common-2.2.0.jar $HIVE_HOME/lib/hive-exe ...

  7. HDFS 读取、写入、遍历文件夹获取文件全路径、append

    版权声明:本文为博主原创文章,未经博主同意不得转载.安金龙 的博客. https://blog.csdn.net/smile0198/article/details/37573081 1.从HDFS中 ...

  8. Ext之grid內編輯

    Ext.grid.Panel xtype:gridpanel,grid 如果要完成在grid中編輯的功能.首先要填加 selType: 'cellmodel',    plugins: [       ...

  9. Linq的左链接

    地址:https://docs.microsoft.com/en-us/dotnet/csharp/linq/perform-left-outer-joins ①创建两张表和一些基础数据做我们的测试 ...

  10. Xcode 创建 支持IOS4.3以上版本的应用的方法

    如果是Xcode 5的话步骤为 点击项目名称->Build Settings->搜索 Architectures 这个里面的原始的值是Standard architectures(armv ...