朴素贝叶斯分类(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. 在Windows10中破解一些软件

    在Windows10中破解一些软件 一.前言   以前的windows是很好破解的,这里说的windows包含了windows的一些产品,比如说office,visio等等,可是自从到了新版的wind ...

  2. 【深入理解JAVA虚拟机】读后感

    收获颇多的一本书,非常值得细细品味. 1.所谓万变不离其宗,此书便是宗.读过此书后,发现以前看过的网上好多五花八门的文章,都是源自此书. 2.举一反三.此书中讲到的jvm用到的各种思想,在工作中其实经 ...

  3. 深入浅出SharePoint2013——常用术语

    CAS(Code Access Security)自定义代码访问安全性 Sandboxed solution 沙箱解决方案

  4. [EffectiveC++]item41:了解隐式接口和编译器多态

    classes和templates都支持接口和多态,interfaces and polymorphism 对classes而言接口是显示的explicit,以函数签名为中心.多态则是通过virtua ...

  5. opencv python3.6安装和测试

    安装: 命令行  pip install D:\python3.6.1\Scriptsopencv_python-3.2.0-cp36-cp36m-win_amd64.whl 测试代码: import ...

  6. Foj 2299 Prefix(AC自动机、DP)

    Foj 2299 Prefix 题意 给定串s.正整数n,问有多少长度为n的字符串t满足:s[0...i]是t的子串,s[0...i+1]不是. 题解 求有多少长度为n的字符串t满足:s[0...i] ...

  7. Chapter 3 Top 10 List

    3.1 Introduction Given a set of (key-as-string, value-as-integer) pairs, then finding a Top-N ( wher ...

  8. js url传值中文乱码完美解决(JAVA)

    js url传值中文乱码完美解决(JAVA) 首先在你的jsp页面这样更改: var url="你要传入的Action的位置&ipid="+ipid+"& ...

  9. 020.2.2 runtime类

    基本不用,简单看一下就行了 1.属于单例的一个实例,可以通过getRuntime()获取对象Runtime r = Runtime.getRuntime();r.exec("winmine. ...

  10. SOJ 1089 FatMouse的奶酪 暴力

    BackGround FatMouse拥有许多奶酪,所有的奶酪都有一个彼此不同的重量.FatMouse为了控制它自己的体重,在每天早上它都会计算今天应该吃多少奶酪才能无痛苦地减肥. The Probl ...