1.贝叶斯原理
朴素贝叶斯分类(Naive Bayesian,NB)源于贝叶斯理论,是一类基于概率的分类器,其基本思想:假设样本属性之间相互独立,对于给定的待分类项,求解在此项出现的情况下其他各个类别出现的概率。
朴素贝叶斯分类实现的三阶段:
第一阶段,准备工作。
根据具体情况确定特征属性,并对每一特征属性进行划分,然后人工对一些待分类项进行分类,形成训练样本集合。
这一阶段的输入是所有待分类数据,输出是特征属性和训练样本。唯一需要人工处理的阶段,质量要求较高。
第二阶段,分类器训练阶段(生成分类器)。
计算每个类别在训练样本中出现频率及每个特征属性划分对每个类别的条件概率估计,并将结果记录。
其输入是特征属性和训练样本,输出是分类器。
第三阶段,应用阶段。
使用分类器对待分类项进行分类,其输入是分类器和待分类项,输出是待分类项与类别的映射关系。
2.R语言贝叶斯网络实现
caret中train函数
e1071包中的naiveBayes函数
klaR包中的NavieBayes函数
2.1数据准备
我们将在Rstudio中使用这三种朴素贝叶斯函数对威斯康星州乳腺癌数据集进行分类。
#设置路径
setwd("F:\360MoveData\Users\Administrator.PC-201704251340\Desktop\机器学习课程\决策树")
#读入数据
breast<-read.csv("breast dataset.csv")
#设置class为分类变量
df <- breast[-1]#删除第一列ID
df$class <- factor(df$class, levels=c(2,4),
labels=c("benign", "malignant"))
#将数据集分为训练集和验证集
set.seed(1234)
train <- sample(nrow(df), 0.7*nrow(df))
df.train <- df[train,]
df.validate <- df[-train,]
table(df.train$class)
table(df.validate$class)
2.2 e1071包中naiveBayes( )函数
naiveBayes(formula, data, laplace = 0, ..., subset, na.action = na.pass)
·formula:类似一般线性回归表达式,不含常数项。
data:需要分析的训练数据对象。
laplace:拉普拉斯估计值,默认为0。
subset:抽取要分析的训练数据子集。
na.action:缺失值的处理方法。默认情况下不将缺失值纳入模型计算,如果设定为na.omit则会删除缺失值进行计算。
###e1071包中的naiveBayes函数
library(e1071)
set.seed(1234)
fit1 <- naiveBayes(class~., data=df.train)
fit1
fit1.pred <- predict(fit1, na.omit(df.validate))
fit1.perf <- table(na.omit(df.validate)$class, 8
fit1.pred, dnn=c("Actual", "Predicted"))
fit1.perf
通过朴素贝叶斯分类得到96.19%的准确率。