朴素贝叶斯算法也是一种常用的分类算法,尤其在对文本文档分类的学习任务中,朴素贝叶斯分类是最有效的算法之一。所谓的朴素,即假设在给定目标值时属性值之间相互条件独立,虽然这一假设看似不合理,但其最终的分类效果却普遍较好。
一、概述
1、贝叶斯公式
2、最大后验假设(MAP)
从所有假设的集合H中选择一个假设h使得其在给定数据集D下发生的概率P(h|D)最大,即成为最大后验假设。
3、极大似然假设(ML)
如果假设集合H中的所有假设发生概率相同,那么只需要寻找似然度P(D|h)的最大值,使得似然度最大的假设h成为极大似然假设。
二、推导过程(忽略丑字)
三、R语言实现举例
# 贝叶斯网络的建立可以根据主观知识或是客观数据。建模分为两个步骤,
# 第一个步骤是结构学习,也就是创建网络拓扑结构。
# 第二个步骤是参数学习,即估计出各节点的条件概率表。训练完成之后就可以利用贝叶斯网络来进行推断和预测。
# R语言中可以使用bnlearn包来完成上述这些工作。但要注意的是,bnlearn包不能处理混合数据,所以先将连续数据进行离散化,再进行建模训练。
# 加载包
install.packages("bnlearn")
library(bnlearn)
# 数据本身为连续型,需要离散化为分段因子型,第9列为类标号
data2 <- discretize(data[-9],method='quantile')
data2$class <- data[,9]
# 使用爬山算法进行结构学习,建立贝叶斯网络
bayesnet <- hc(data2)
# 显示网络图
plot(bayesnet)
# 修改网络图中的箭头指向
bayesnet <- set.arc(bayesnet,'age','pregnant')
# 参数学习
fitted <- bn.fit(bayesnet, data2, method='mle')
# 训练样本预测并提取混淆矩阵
pre <- predict(fitted,data=data2,node='class')
confusionMatrix(pre,data2$class)
# 进行条件推理,pos概率有多大
cpquery(fitted,(class=='pos'),(age=='(36,81]'&mass=='(34.8,67.1]'))
版权声明:本文为AugustWind原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。