作者:Jason Brownlee
翻译:陈超
校对:欧阳锦
本文约3500字,建议阅读8分钟
本文共分为5部分,从概率模型的挑战、概率模型——贝叶斯信念网络、如何建立和使用贝叶斯网络、贝叶斯网络范例、Python当中的贝叶斯网络5个方面对贝叶斯信念网络进行了简要介绍。
关键字:贝叶斯,Python,概率模型
概率模型可以定义变量间的关系并用于概率计算。
例如,全条件模型可能需要一个巨大的数据量来覆盖所有可能的实例,而在实际情况当中概率可能难以计算。虽然像所有随机变量条件独立这样简化假设是过于简化的步骤,但比如在朴素贝叶斯的例子当中可能是非常高效的做法。
另外一种选择是建立一个保留已知的随机变量和所有其他例子当中的条件独立性模型。贝叶斯网络是一个概率图模型,可以明显地在一个图模型中用有向边捕获已知的条件依赖。所有丢失的连接定义了模型中的条件独立性。
这样的贝叶斯网络提供了一个有用的工具,可以将某一领域的概率模型进行可视化,回顾所有随机变量之间的关系,在给定可用证据的情况下因果概率的原因。
在这篇文章当中,你将会得到针对贝叶斯网络的简要介绍。
在读完本文之后,你将会知道:
贝叶斯网络是一种概率图模型,由节点和有向边构成。
贝叶斯网络模型捕获随机变量之间的条件依赖和条件独立关系。
模型可以由专家构造或基于数据学习,然后可以用于估计因果或后续事件的推断。
可以基于我的新书《机器学习概率》开始你的项目,这里包括了手把手的教程以及所有范例的Python源代码。
让我们开始吧!
贝叶斯信念网络简介 图片来自Armin S Kowslski,部分版权保留
概览
本教程分为以下五部分;他们是:
1. 概率模型的挑战
2. 概率模型——贝叶斯信念网络
3. 如何建立和使用贝叶斯网络
4. 贝叶斯网络范例
5. Python当中的贝叶斯网络
概率模型的挑战
概率模型的设计和使用是相当有挑战性的。
通常情况下,问题在于缺乏关于完全确定随机变量的条件依赖性的信息。如果这种信息不足的情况确实存在, 那么计算某一时间的全条件概率可能是不切实际的。
解决这一挑战的通用方法是添加一些简化的假设,例如假设模型当中所有的随机变量都是条件独立的。这是一个强假设,虽然它在实际过程中被证明十分有用,为朴素贝叶斯分类算法提供了基础。
另一种方法是建立一个有部分条件独立假设问题的概率模型。这提供了一个介于完全条件模型和完全条件独立模型的方法。
贝叶斯信念网络是一个概率模型的范例,这个模型当中的部分变量是条件独立的。
“因此,贝叶斯信念网络提供了一个中立的方法,比起由朴素贝叶斯分类器建立的条件独立的全局假设约束更少,但是又比完全避免条件独立假设更容易处理。”
——第184页,机器学习,1997
概率模型——贝叶斯信念网络
贝叶斯信念网络是一种概率图模型
概率图模型
概率图模型(Probabilistic graphical model, PGM),或者简单来说“图模型”,是一种用图结构来表征概率模型的方式。
图中的节点表征随机变量,连接节点的边表征随机变量之间的关系。
“图由连通(也被叫做边或者弧)的节点(也被叫做顶点)组成。在概率图模型当中,每个节点表征一个随机变量(或者随机变量组),连接表达了这些变量之间的概率关系。”
——第360页,《模式识别和机器学习》,2006
节点:图模型中的随机变量
边:图模型中随机变量之间的关系
许多不同类型的图模型,虽然两种最常见的是隐马尔科夫链模型和贝叶斯网络。
隐马尔科夫链(HMM)是一种图模型,图的边是无向的,意味着图当中包括环。贝叶斯网络限制性更强,图的边是有向的,意味着他们只可以沿着一个方向前进。这意味着环是不可能存在的,这种结构可以被叫做有向无环图(DAG)。
“有向图对于表征随机变量之间的因果关系时是有用的,而无向图更适合表征随机变量之间的软性限制。”
——第360页,《模式识别和机器学习》,2006
贝叶斯信念网络
贝叶斯信念网络,或者简称“贝叶斯网络”,提供了一种将贝叶斯定理应用到复杂问题当中的简化方式。
尽管从主观上指定了随机变量(节点)的概率分布和随机变量(边)之间的关系,但该网络并不是严格意义上的贝叶斯网络,该模型可被认为是捕获复杂域的“信念”。
与概率完全基于纯粹的过去事件发生次数的频率学派不同,贝叶斯概率是结果当中的主观概率或信念的研究。
贝叶斯网络捕获由模型表征的事件联合概率。
“贝叶斯信念模型描述了一系列变量的联合概率。”
——第185页,《机器学习》,1997.
贝叶斯网络的核心是条件独立性的概念。
独立性指的是不受所有其他变量影响的随机变量。一个因变量是一个概率依赖于一个或更多其他随机变量的随机变量。
条件依赖性描述了多随机变量之间的关系,一个给定变量可能条件依赖于一个或更多个其他变量。
这并不意味着变量是独立的;相反,它是一个变量独立于特定的其他随机变量的明确定义。
概率图模型,例如贝叶斯网络,提供了一种定义一个通过陈述已知变量的所有条件独立假设,定义复杂问题的概率模型,允许未知(潜在的)变量存在。
严格来说,图模型当中边的存在或缺失在模型解释当中都是重要的。
“图模型(GM)是一种通过【条件独立性(Conditional Independence)】CI假设来表征的联合分布。特别地,图当中的节点表征随机变量,(缺乏)边表征CI假设。(这些模型更好的名字其实是 ‘独立性图’)”……
——第308页,《机器学习:概率视角》,2012
贝叶斯网络作为一个概率模型提供了有效的方法。
例如:
可视化:模型提供了一种将模型结构可视化和激发新模型设计的直接的方式
关系:为随机变量间关系的存在和缺失提供了见解。
计算:提供了一种架构化复杂概率计算的方式。
如何建立和使用贝叶斯网络?
设计贝叶斯网络需要定义至少三件事:
1. 随机变量:问题当中的随机变量是?
2. 条件关系:变量之间的条件关系是?
3. 概率分布:每个变量的概率分布是?
对问题领域的专家来说,定义部分或模型设计的所有方面都是可能的,但是基于数据的概率分布必须通过相关领域的数据进行估计。
概率分布和图结构本身可以通过数据估计,虽然可能是一个挑战性的工作。严格来说,以这个目的来使用学习算法很常见;例如,假定连续型随机变量梯度上升的高斯分布用于估计分布参数。
一旦为某个领域的贝叶斯网络已准备好,则其可以被用于推理,例如决策。
推理可经由模型给定情境进行推断。例如,某些事件的结果已知,并被插入随机变量。该模型可被用于估计事件原因的概率或可能的接下来的结果。
“推理(推断)通过引入在已知前提当中设置变量的证据开展,之后计算兴趣概率。”
——第13页,《贝叶斯推理和机器学习》,2012
使用贝叶斯网络的实例包括医疗(症状和疾病),生物信息学(特质和基因),以及演讲时别(话语和时长)。
贝叶斯网络范例
我们可以用一个小的例子来使贝叶斯网络具体化。
考虑一个三变量的问题:A,B,和C。A依赖于B,C依赖于B。
条件依赖性如下:
A条件依赖于B,即P(A|B)
C条件依赖于B,即P(C|B)
我们知道C和A彼此之间没有影响。
我们将条件独立性写作如下:
A条件独立于C,即P(A|B, C)
C条件独立于A,即P(C|B, A)
注意到条件依赖性是在条件依赖性存在的情况下提出的。也就是说,A是条件独立于C,或者在C存在的情况下,A条件依赖于B。
我们也可提出给定C,A的条件依赖性也可写作给定B ,A的条件依赖性,因为A不受到C的影响,可以仅通过给定B的A来计算。
P(A|C, B) = P(A|B)
我们可以看到B不受A和C的影响,没有父节点(parents);我们可以将给定A和C,B的条件独立性写作 P(B, P(A|B), P(C|B)) 或 P(B).
我们也可以将给定B,A和C的联合概率或者基于B的条件概率写作两个条件概率的乘积;例如:
P(A, C | B) = P(A|B) * P(C|B)
该模型总结了P(A, B, C)的联合概率,可计算作:
P(A, B, C) = P(A|B) * P(C|B) * P(B)
我们可将图如下表示:
简化贝叶斯网络的范例
请注意随机变量均被分配了一个节点,条件概率作为节点之间的有向连接。并且注意图当中不可能有环,也就是说,当通过边连通节点进行导航的时候,不可能有环存在。
除此之外,注意图在我们不知道变量概率分布的时候也是有用的。
你可能想通过使用每个随机变量的离散事件的人为概率将此例子进行延伸,并对不同情境进行简单推断练习。
Python中的贝叶斯网络
贝叶斯网络可以通过Python来构建和进行推断。
一个受欢迎的库叫做PyMC,提供了一系列贝叶斯模型的工具,包括贝叶斯网络的图模型。
最近的版本是PyMC3,以Python第3版命名,是在Theano数学计算库的基础上开发的,该库可提供快速的自动微分。
PyMC
https://github.com/pymc-devs/pymc3
“PyMC3是一个用Python写的新型的开源概率编程框架,使用Theano经由自动差分来计算梯度并即时将概率程序编译为C以提高速度。”
——在Python中使用PyMC3进行概率编程,2016
更普遍来说,电脑软件上概率图模型用于推断被认为是“概率编程”。
这种程序被叫做概率程序,【……】我们使用程序变量作为模型成分来创造概率模型。模型成分是PyMC框架当中的一流源语。
——《黑客的贝叶斯方法:概率编程和贝叶斯推断》,2015
更多关于PyMC的贝叶斯方法指导,请参照 Cameron Davidson-Pilon 的免费书籍《黑客的贝叶斯方法》
Cameron Davidson-Pilon
https://github.com/CamDavidsonPilon
延伸阅读
该部分提供了更多基于该主题的资源,您可以进一步了解。
书籍
《贝叶斯推理和机器学习》,2012
《黑客的贝叶斯方法:概率编程和贝叶斯推断》,2015
章节
第6章: 《贝叶斯学习,机器学习》,1997
第8章:《图模型,模式识别和机器学习》,2006
第10章:《有向图模型(贝叶斯网络),机器学习:一种概率视角》,2012
第14章:《概率推理,人工智能:一种现代方法,第三版》,2009
论文
使用PyMC3进行Python概率编程, 2016.
代码
PyMC3, Python的概率编程
变分推断(variational inference):贝叶斯神经网络
文章
Graphical model, Wikipedia.图模型,维基百科
Hidden Markov model, Wikipedia.隐马尔科夫链,维基百科
Bayesian network, Wikipedia.贝叶斯网络,维基百科
Conditional independence, Wikipedia.条件独立性,维基百科
Probabilistic Programming & Bayesian Methods for Hackers概率编程&黑客的贝叶斯方法
总结
本文对贝叶斯网络进行了简要介绍。
具体来说,你可以学到:
贝叶斯网络是一种由节点和有向边构成的概率图
贝叶斯网络可以捕获随机变量之间的条件依赖和条件独立关系
模型可以由专家制定或者从数据中学习,然后可用于估计因果或后续事件的推断。
欢迎评论留言交流。
编辑:王菁
校对:林亦霖
原文标题:
A Gentle Introduction to Bayesian Belief Networks
原文链接:
https://machinelearningmastery.com/introduction-to-bayesian-belief-networks/
译者简介
陈超,北京大学应用心理硕士在读。本科曾混迹于计算机专业,后又在心理学的道路上不懈求索。越来越发现数据分析和编程已然成为了两门必修的生存技能,因此在日常生活中尽一切努力更好地去接触和了解相关知识,但前路漫漫,我仍在路上。
翻译组招募信息
工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。
你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。
其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。
点击文末“阅读原文”加入数据派团队~
转载须知
如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。
发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。
点击“阅读原文”拥抱组织