R语言学习笔记—朴素贝叶斯分类
朴素贝叶斯分类(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