每每以为攀得众山小,可、每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~

———————————————————————————

一、贝叶斯网络与朴素贝叶斯的区别

朴素贝叶斯的假设前提有两个第一个为:各特征彼此独立;第二个为且对被解释变量的影响一致,不能进行变量筛选。但是很多情况这一假设是无法做到的,比如解决文本分类时,相邻词的关系、近义词的关系等等。彼此不独立的特征之间的关系没法通过朴素贝叶斯分类器训练得到,同时这种不独立性也给问题的解决方案引入了更多的复杂性[1]。

此时,更具普遍意义的贝叶斯网络在特征彼此不独立情况下,可进行建模。但是贝叶斯网络并不放宽第二个假设,故不能对变量进行筛选,因为视解释变量的作用一致。

贝叶斯分类方法是一种展现已知数据集属性分布的方法,其最终计算结果完全依赖于训练样本中类别和特征的分布。与SVM等分类方法不同,它只是对事实进行展现。

贝叶斯网络

朴素贝叶斯

假设前提

各变量都是离散型的

各特征有依赖(不确定的因果推理)关系(变量无关)

每一个节点在其直接前驱节点的值制定后,这个节点条件独立于其所有非直接前驱前辈节点。

P(v|par(v),x1,x2...,xn) = P(v|par(v))

贝叶斯网络放宽了每个变量独立的假设

各特征彼此独立

朴素贝叶斯中对于若干条件概率值不存在的问题,一般通过将所有的概率值加1来解决

且对被解释变量的影响一致,不能进行变量筛选

应用案例

在信息不完备的情况下通过可以观察随机变量推断不可观察的随机变量[1]

解决文本分类时,相邻词的关系、近义词的关系

分类

缺点

不能对变量进行筛选,因为不能放宽对被解释变量影响一致的假设

彼此不独立的特征之间建立朴素贝叶斯,反而加大了模型复杂性

优点

贝叶斯原理和图论相结合,建立起一种基于概率推理的数学模型,对于解决复杂的不确定性和关联性问题有很强的优势

  • 对缺失数据不敏感
  • 可以学习因果关系,加深对数据的理解
  • 能将先验知识融入建模
  • 避免了过度拟合问题,不需要保留数据进行检验【4】

简单,对于给出的待分类项,会选择条件概率最大的类别,这就是朴素贝叶斯的思想基础

_______________________________________________________________________________

在python scikit-learn中(20180808更新):

 朴素贝叶斯是一类比较简单的算法,scikit-learn中朴素贝叶斯类库的使用也比较简单。相对于决策树,KNN之类的算法,朴素贝叶斯需要关注的参数是比较少的,这样也比较容易掌握。在scikit-learn中,一共有3个朴素贝叶斯的分类算法类。分别是GaussianNB,MultinomialNB和BernoulliNB。

其中GaussianNB就是先验为高斯分布的朴素贝叶斯,MultinomialNB就是先验为多项式分布的朴素贝叶斯,而BernoulliNB就是先验为伯努利分布的朴素贝叶斯。

    这三个类适用的分类场景各不相同,一般来说,如果样本特征的分布大部分是连续值,使用GaussianNB会比较好。如果如果样本特征的分大部分是多元离散值,使用MultinomialNB比较合适。而如果样本特征是二元离散值或者很稀疏的多元离散值,应该使用BernoulliNB。

________________________________________________________________________________________________________________

二、贝叶斯网络概念

贝叶斯网络基本概念有两个:引入了一个有向无环图(Directed Acyclic Graph)和一个条件概率表集合。

DAG。DAG的结点V包括随机变量(类别和特征),有向连接E(A->B)表示结点A是结点B的parent,且B与A是有依赖关系的(不独立)。

条件概率表集合。同时引入了一个条件性独立(conditional independence)概念:即图中任意结点v在给定v的parent结点的情况下,与图中其它结点都是独立的,也就是说P(v|par(v),x1,x2...,xn) = P(v|par(v))。这里par(v)表示v的parent结点集,x1,x2,...,xn表示图中其它结点。

我们清楚,如果已知所有联合概率值(joint distribution),那么任何形式的概率问题都可以迎刃而解。而现实是当特征集合过大(>10)时你几乎无法通过统计得到。而特征集合的大小在"一定程度上"与最终的分类效果是一个正反馈关系。

所以,这个问题的解决就是通过条件独立的概念来对各条件概率值进行优化。具体可以参见参考文件的bayesian net的tutorial,我这里不再阐述了(来自博客分类算法之朴素贝叶斯(Naive Bayes)和贝叶斯网络(Bayesian Networks))。

贝叶斯网络中连线是如何产生的?

本内容来源于CDA DSC,L2-R课程,第11讲。

贝叶斯网络,不再表示因果关系,而是变量之间的相关依赖关系。
X,y之间线代表的就是条件概率,p(y︱x1)︱x2x3x4...=p(y),等于则不连线,
不等于,说明在控制了x2下,两者不是独立,而是相关的,则会连线。

________________________________________________________________________________________________________________

三、贝叶斯网络简单案例

贝叶斯网络原理较为简单,所以在实际应用中较为广泛。比如垃圾邮件的处理,先对垃圾邮件分词,一些垃圾词“培训”、“打折”...,只需要做每个单词在每个文档中出现的频次就可以用贝叶斯网络推断哪一些是垃圾邮件;

也可以用在社会调查中的量表题,

下图表示特征属性之间的关联:

图1

上图是一个有向无环图,其中每个节点代表一个随机变量,而弧则表示两个随机变量之间的联系,表示指向结点影响被指向结点。不过仅有这个图的话,只能定性给出随机变量间的关系,如果要定量,还需要一些数据,这些数据就是每个节点对其直接前驱节点的条件概率,而没有前驱节点的节点则使用先验概率表示。

例如,通过对训练数据集的统计,得到下表(R表示账号真实性,H表示头像真实性):

纵向表头表示条件变量,横向表头表示随机变量。上表为真实账号和非真实账号的概率,而下表为头像真实性对于账号真实性的概率。这两张表分别为“账号是否真实”和“头像是否真实”的条件概率表。有了这些数据,不但能顺向推断,还能通过贝叶斯定理进行逆向推断。例如,现随机抽取一个账户,已知其头像为假,求其账号也为假的概率:

也就是说,在仅知道头像为假的情况下,有大约35.7%的概率此账户也为假。如果觉得阅读上述推导有困难,请复习概率论中的条件概率、贝叶斯定理及全概率公式。如果给出所有节点的条件概率表,则可以在观察值不完备的情况下对任意随机变量进行统计推断。上述方法就是使用了贝叶斯网络。

________________________________________________________________________________________________________________

四、贝叶斯网络实施步骤

[算法杂货铺——分类算法之贝叶斯网络(Bayesian networks)]

1、步骤

构造与训练贝叶斯网络分为以下两步:

1、确定随机变量间的拓扑关系,形成DAG。这一步通常需要领域专家完成,而想要建立一个好的拓扑结构,通常需要不断迭代和改进才可以。

2、训练贝叶斯网络参数——估计出各节点的条件概率表。这一步也就是要完成条件概率表的构造,如果每个随机变量的值都是可以直接观察的,像我们上面的例子,那么这一步的训练是直观的,方法类似于朴素贝叶斯分类。但是通常贝叶斯网络的中存在隐藏变量节点,那么训练方法就是比较复杂,例如使用梯度下降法。由于这些内容过于晦涩以及牵扯到较深入的数学知识,在此不再赘述,有兴趣的朋友可以查阅相关文献。

2、案例

还是SNS社区中不真实账号检测的例子,我们的模型中存在四个随机变量:账号真实性R,头像真实性H,日志密度L,好友密度F。其中H,L,F是可以观察到的值,而我们最关系的R是无法直接观察的。这个问题就划归为通过H,L,F的观察值对R进行概率推理。推理过程可以如下表示:

1、使用观察值实例化H,L和F,把随机值赋给R。
      2、计算(如图1)。其中相应概率值可以查条件概率表。由于上述例子只有一个未知随机变量,所以不用迭代。

________________________________________________________________________________________________________________

五、TAN树增强朴素贝叶斯

TAN是贝叶斯网络的简化版本。先构造所有变量两两之间的连线(如左图);然后进行剪枝。特点就是,解释变量是平行的,不对变量进行筛选,看做是一致的。(第五点内容的补充来自于CDA DSC L2-R语言课程第11讲内容)

5.1 相对熵

要介绍TAN先从相对熵开始说起。从信息量的角度出发,统计学上认为方差代表数据的信息量;而物理学中,认为熵代表物质的信息量。

相对熵就是度量两个随机变量的距离的一种指标。

其最大的特点就是:可以做到衡量p-q,q-p的影响,可以度量两个随机变量的“距离”、相互之间的影响力。

5.2 TAN贝叶斯网络结构的学习

贝叶斯网络先构造所有变量两两之间的连线(如左图);然后进行剪枝。特点就是,解释变量是平行的,不对变量进行筛选,看做是一致的。

5.3 TAN贝叶斯网络的特点

1、全考虑。在未知关系之前,TAN会建立所有输入变量X与输出变量Y之间的全联系,考虑了所有因素对输出变量Y的影响;

2、X之间非独立。输入变量X之间也会存在弧线,意味着变量之间并非全部条件独立,允许具有相互依赖的关系,突破了朴素贝叶斯的假设;

3、调节效应。输入变量X之间的有向弧线,代表对Y的调节效应,X1对Y的作用,不仅仅是X1,还可能有X1X2之间对Y的作用。

________________________________________________________________________________________________________________

六、R语言-贝叶斯网络/朴素贝叶斯

朴素贝叶斯分类对于缺失值并不敏感。R语言中的e1071包中就有可以实施朴素贝叶斯分类的函数,但在本例我们使用klaR包中的NaiveBayes函数,因为该函数较之前者增加了两个功能,一个是可以输入先验概率,另一个是在正态分布基础上增加了核平滑密度函数[4]。

R语言中可以使用bnlearn包来对贝叶斯网络进行建模。但要注意的是,bnlearn包不能处理混合数据,所以先将连续数据进行离散化(因子型),再进行建模训练。

1、bnlearn包介绍

网上有一个bnlearn包的教程,但是有点乱,笔者看了之后就是一头雾水。所以整理了一下:

该包包含贝叶斯网络的结构学习、参数学习和推理三个方面的功能,其中结构学习包含基于约束的算法、 基于得分的算法和混合算法, 参数学习包括最大似然估计和贝叶斯估计两种方法。

此外还有自助法(bootstrap),交叉验证(cross-validation)和随机模拟(stochastic simulation)等功能,附加的绘图功能需要调用前述的 Rgraphviz and lattice 包。

2、R语言实现案例

博客《朴素贝叶斯分类与贝叶斯网络》有一个案例:数据准备环节

# 加载扩展包和数据
library(caret)
data(PimaIndiansDiabetes2,package='mlbench')
# 对缺失值使用装袋方法进行插补
preproc <- preProcess(PimaIndiansDiabetes2[-9],method="bagImpute")
data <- predict(preproc,PimaIndiansDiabetes2[-9])
data$Class <- PimaIndiansDiabetes2[,9]

贝叶斯网络建模

# 加载包
library(bnlearn)
# 数据离散化
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)
# 进行条件推理
cpquery(fitted,(class=='pos'),(age=='(36,81]'&mass=='(34.8,67.1]'))

还有一个可以实现的包——pcalg包,来自博客R语言做贝叶斯网络结构学习

该博客主要介绍拓扑结构的构建,贴一个案例:

suffStat <-list(C = cor(iris[,1:4]), n = nrow(iris))
pc.fit <- pc(suffStat, indepTest = gaussCItest,alpha = 0.01,labels =names(iris[1:4]),verbose = TRUE)
pc.fit
plot(pc.fit)

________________________________________________________________________________________________________________

参考文献:

[1]算法杂货铺——分类算法之贝叶斯网络(Bayesian networks)

[3]算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)

[4]朴素贝叶斯分类与贝叶斯网络:http://www.r-bloggers.com/lang/chinese/1065

每每以为攀得众山小,可、每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~

———————————————————————————

R语言︱贝叶斯网络语言实现及与朴素贝叶斯区别(笔记)相关推荐

  1. 朴素贝叶斯网络matlab实现_基于朴素贝叶斯的文本分类方法实战

    基于朴素贝叶斯的文本分类方法 一.朴素贝叶斯原理的介绍 二.朴素贝叶斯分类器的代码实现 分类器有时会产生错误结果,这时可以要求分类器给出一个最优的类别猜测结果,同时会给出这个猜测的概率估计值.朴素贝叶 ...

  2. html网络语言什么意思,网络语言开车什么意思 网络用语开车是什么意思

    开车是原意是指驾驶车辆的人群,但是逐渐衍生成另外一种意思,俗称网络用语.那么,网络语言开车什么意思?网络用语开车是什么意思? 网络用语开车是什么意思 字面意思是指有两年以上的驾驶技术,而且事故很少的那 ...

  3. 贝叶斯系列——贝叶斯定理、贝叶斯决策、朴素贝叶斯、贝叶斯网络、贝叶斯滤波器

    写一个贝叶斯系列,整理一下贝叶斯定理.贝叶斯决策.朴素贝叶斯.贝叶斯网络.贝叶斯滤波器 众所周知,概率分为两个学派,频率学派(大数定理)和贝叶斯学派(贝叶斯公式),我们不去判断哪个学派说的更对,但是在 ...

  4. 机器学习朴素贝叶斯算法_机器学习中的朴素贝叶斯算法

    机器学习朴素贝叶斯算法 朴素贝叶斯算法 (Naive Bayes Algorithm) Naive Bayes is basically used for text learning. Using t ...

  5. 朴素贝叶斯基础【机器学习算法一朴素贝叶斯1】

    基础知识回顾 (上述内容引自李航<统计学习方法>) 过去的7天当中,有3天下雨,4天没有下雨.用0代表灭有下雨,而1代表下雨,我们可以用一个数组来表示: y=[0,1,1,0,1,0,0] ...

  6. 朴素贝叶斯情感分析评分python_比朴素贝叶斯更优秀的情感分析方法?答案在这里...

    作者|Samuel Pilcer 译者 & 编辑|Debra AI 前线导读:根据在线评论和评分,我们可以为客户提供关于其信誉度的深刻见解.我们会拆解评论文本了解评论的内容,并告诉我们的客户他 ...

  7. 朴素贝叶斯 php,PHP实现机器学习之朴素贝叶斯算法详解.pdf

    PHP实实现现机机器器学学习习之之朴朴素素贝贝叶叶斯斯算算法法详详解解 本文实例讲述了PHP实现机器学习之朴素贝叶斯算法.分享给大家供大家参考 具体如下: 机器学习已经在我们的生活中变得随处可见了.比 ...

  8. 朴素贝叶斯算法python sklearn实现_朴素贝叶斯算法优化与 sklearn 实现

    进行拉普拉斯平滑运算后,我们运行程序,仍然得出了两个测试样本均属于非侮辱类的结果,这是为什么呢? 我们查看最终计算出的 p0 和 p1 会发现,他们的结果都是 0,这又是为什么呢? 这是因为出现了另一 ...

  9. php贝叶斯,php – 将单个概率与朴素贝叶斯垃圾邮件过滤相结合

    我正在尝试通过分析我已经积累的语料库来生成垃圾邮件过滤器. 我已经实现了代码来计算消息是垃圾邮件的概率,因为它包含一个特定的单词,通过从wiki实现以下公式: 我的PHP代码 public funct ...

最新文章

  1. 探索机器学习理论的最新进展,走近云、端、芯上的视觉计算——“智源论坛:机器学习报告会”重点梳理...
  2. (详细全面)softmax和log_softmax的联系和区别,NLLLOSS和CrossEntropyLoss的联系和区别
  3. T端音乐盒子-NPC脚本
  4. IOS XCode11开发嵌入网页
  5. MFC中如何从EDIT控件中获取文字
  6. master分支删除文件_Git分支基础简介;创建分支;合并分支;删除分支;
  7. win8网络受限官方解决办法
  8. 一文读懂cooie和session
  9. Flutter之MediaQuery详细分析
  10. 正则对字符串中手机号加密
  11. 2018美国基金业年鉴-数据图表简版
  12. 适合独自一人宅在家必追十部影片推荐下载观看
  13. resources 下字体文件报错 simsun.ttc is not a valid TTF file
  14. VGA不同分辨率下的行列值(转)
  15. 利用python爬虫进行彼岸网图库图片的抓取(bs4)
  16. html5网页及Cocos中生成二维码
  17. 一年级语文四季心田花开专项练习题
  18. android 白色圆点,Android通知图标是一个白色圆圈
  19. linux越狱时手机怎么进入dfu,iOS详细越狱步骤 进入DFU模式_iPhone资讯_太平洋电脑网PConline...
  20. 【区块链 | Solidity】以太坊Solidity如何实现海量空投代币?

热门文章

  1. 在Cent OS云服务器上部署基于TP5后端代码踩坑记录_艾孜尔江撰
  2. 一个简单的音乐网站设计与实现(HTML+CSS)
  3. NewsRecommendation
  4. 手机网页端支付宝支付
  5. HTML radio的value属性 默认值为on
  6. 读书百客:《落叶》赏析
  7. 多媒体播放盒 电视 安卓 规范测试 点检表
  8. 学习芭蕾的女神突然学习JAVASE,说Java“异常”章节看不懂,要我帮帮她
  9. 计算机李维,李维(南京工业大学名师——李维)_百度百科
  10. 单测中如何mock用@Value注解注入的属性