朴素贝叶斯分类(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. 小J学python--Exception-异常

    现在我们要打开一个名为fuck的文件,fuck是不存在的,看看异常是怎么工作的 不捕获异常的情况 #打开文件 open('fuck') 执行结果 捕获所有异常 Exception是所有异常类的父类,所 ...

  2. H3C笔试题目

    最近这段时间正在找工作,去H3C做了下笔试题,题目出的还不错,比一般公司水平高上一点点,偷偷弄了点回来,分享一下,我把答案和解析全部整理了出来,有需要的可以看看. 1.以下描述正确的有(AD) A.1 ...

  3. PhoneGap获取设备信息

    一. 获取设备信息的方法列表(如果没有或者检测不出来就显示undefined) 1.device.name              设备名称(一些国产机检测不出来) 2.device.model   ...

  4. 【NOIP2014】解方程

    题目描述 已知多项式方程 \[a_0 + a_1x + a_2x^2 + \dots +a_nx^n=0\] 求这个方程在\([1,m]\)内的整数解(\(n\)和\(m\)均为正整数). 输入输出格 ...

  5. 随手练——洛谷-P1151(枚举与暴力搜索)

    枚举 #include <iostream> using namespace std; int main() { ; cin >> k; ; i < ; i++) { ) ...

  6. docker-8-本地镜像发布到阿里云

    镜像的生成方法 1.前面的DockerFile   2.从容器创建一个新的镜像 docker commit [OPTIONS] 容器ID [REPOSITORY[:TAG]] 将本地镜像推送到阿里云 ...

  7. (转)ci

    1  从代码管理器签出源文件 2  修改代码 3  编译代码 4  遇到错误,转到2继续修改直到达到预期 5  运行单元测试,期望所有的测试绿色(通过) 6  单元测试出错,转入2 7  重构代码,按 ...

  8. disconf实践(四)基于注解的分布式配置文件管理,自动reload

    上一篇讲解了基于xml的自动reload的分布式配置文件管理,这一篇讲解基于注解的自动reload的方式(基于disconf实践二). 1. 修改spring配置文件 <?xml version ...

  9. PAT——1040. 有几个PAT

    字符串APPAPT中包含了两个单词“PAT”,其中第一个PAT是第2位(P),第4位(A),第6位(T):第二个PAT是第3位(P),第4位(A),第6位(T). 现给定字符串,问一共可以形成多少个P ...

  10. HDU 2307 贪心之活动安排问题

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2037 今年暑假不AC Time Limit: 2000/1000 MS (Java/Others)  ...