您的位置:首页 > 其它

机器学习算法(三)——朴素贝叶斯算法及R语言实现方法

2015-04-23 09:44 232 查看
朴素贝叶斯算法也是一种常用的分类算法,尤其在对文本文档分类的学习任务中,朴素贝叶斯分类是最有效的算法之一。所谓的朴素,即假设在给定目标值时属性值之间相互条件独立,虽然这一假设看似不合理,但其最终的分类效果却普遍较好。

一、概述

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]'))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: