朴素贝叶斯分类(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. Python学习---Django误删除sql表后,如何创建数据

    误删除sql表后,怎么创建数据? 仅仅适合单表,多表因为涉及约束, python mangage.py makemigrations  --> 生成migrations目录和根数据库对应的sql ...

  2. matlab中的决策树

    1.函数 view(t)%画出决策树 prune %剪枝决策树 t2=prune(t,'level','level'/'node')%level:0 不剪枝 1 剪掉最后一层 2 最后两层%node: ...

  3. August 06th 2017 Week 32nd Sunday

    No words are necessary between two loving hearts. 两颗相爱的心之间不需要言语. No, I don't think so. Words may be ...

  4. 利用describe( )中的count来检查数据是否缺省

    #-*- coding: utf-8 -*- #在python的pandas库中,只需要读入数据,然后使用describe()函数就可以查看数据的基本情况 import pandas as pd in ...

  5. OpenCV&&python_图像平滑(Smoothing Images)

    Goals 学习用不同低通滤波方法模糊图像(Blur imagess with various low pass filter) 用用定制的滤波器处理图像(Apply custom-made filt ...

  6. GitLab-CI与GitLab-Runner

    一.持续集成(Continuous Integration) 要了解GitLab-CI与GitLab Runner,我们得先了解持续集成是什么. 持续集成是一种软件开发实践,即团队开发成员经常集成他们 ...

  7. yarn logs -applicationId [applicationID]

    yarn logs -applicationId application_1435648583743_0001 报错: tmp/logs/.../application_1435648583743_0 ...

  8. Angular组件之间通讯

    组件之间会有下列3种关系: 1. 父子关系 2. 兄弟关系 3. 没有直接关系 通常采用下列方式处理(某些方式是框架特有)组件间的通讯,如下: 1父子组件之间的交互(@Input/@Output/模板 ...

  9. SVG中的元素属性

    SVG attributes by category Animation event attributes onbegin, onend, onload, onrepeat Animation att ...

  10. Linux环境搭建多项目SVN

    1.安装SVN #yum install subversion 2.创建版本库文件夹 #mkdir -p /var/svn/repos/pro1 (/var/svn/repos是根路径,pro1是项目 ...