朴素贝叶斯分类器 Native Bayes
2020-02-19 本文已影响0人
MJades
贝叶斯方法把计算“具有某特征的条件下属于某类”的概率转换成需要计算“属于某类的条件下具有某特征”的概率,属于有监督学习。
朴素贝叶斯这种学习方法是基于条件概率进行的,通过给定已知的其他东西,来推断一件事情发生的可能性。假定在一个类中,某个特征存在(或不存在)与其他特征存在(或不存在)没有任何关系。
-
优势:只需要少量的训练数据进行分类所需的参数(变量的均值和方差)估计。因为假定变量之间是相互独立的,所以只需要确定每一类变量的方差,而不需要整个协方差矩阵。
-
特点:各特征之间相互独立。
其流程如下:
-
准备阶段, 根据具体情况确定特征属性, 对每个特征属性进行适当划分, 然后由人工对一部分待分类项进行分类,形成训练样本集合。这一阶段的输入是所有待分类数据,输出是特征属性和训练样本。这一阶段是整个朴素贝叶斯分类中唯一需要人工完成的阶段, 其质量对整个过程将有重要影响,分类器的质量很大程度上由特征属性、特征属性划分及训练样本质量决定。
-
分类器训练阶段, 这个阶段的任务就是生成分类器,主要工作是计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计, 并将结果记录。 其输入是特征属性和训练样本,输出是分类器。这一阶段是机械性阶段, 根据前面讨论的公式可以由程序自动计算完成。
-
应用阶段。 这个阶段的任务是使用分类器对待分类项进行分类, 其输入是分类器和待分类项, 输出是待分类项与类别的映射关系。这一阶段也是机械性阶段, 由程序完成。
# 准备data
data("iris")
n<-nrow(iris)
ntrain<-round(n*0.6)
set.seed(333)
tindex<-sample(n,ntrain)
train_iris<-iris[tindex,]
test_iris<-iris[-tindex,]
str(train_iris)
# 朴素贝叶斯分类器
library(e1071)
nb1<-naiveBayes(Species~.,data=train_iris)
nb1
nb1$apriori
nb1$tables$Petal.Length
table(train_iris$Species)
# 画预测变量的高斯分布
plot(function(x)dnorm(x,1.48,0.1349329),0,8,lty=1,main="Petal length dis")
curve(dnorm(x,4.306897,0.3890749),add=TRUE,lty=2)
curve(dnorm(x,5.577419,0.5321088),add=TRUE,lty=5)
legend("topright",legend=c("setosa","versicolor","virginica"),lty=c(1,2,5),bty="o")
# bty可以取6种字符,分别为“o”、“l”、“7”、“c”、“u”、“]”。这些字符代 表6种边框。
# 对test样本进行预测
prediction<-predict(nb1,test_iris[,-5], type=class)
# type默认是class,若是raw表示具体概率;
xtab<-table(prediction,test_iris$Species)
xtab
nb1
- A-priori probabilities,先验概率,是样本中个类别出现的频率
- Conditional probabilities,特征属性为离散值时,以每一类别中各样本类型出现的频率作为其概率值;特征属性为连续性值时,假设特征属性服从正态分布,用各类别的样本均值及标准差作为正态分布的参数。
预测结果展示,95%的准确率
- 预测变量都是连续的,朴素贝叶斯分类器为每个预测变量生成了3个高斯(正太)分布;
正态分布图
e1071包参数介绍
naiveBayes predict
参考