机器学习40讲_31_29_有向图模型贝叶斯网络
你好,我是王天一。
今天我和你分享的主题是有向图模型。
贝叶斯网络。
在上一篇文章中,那我和你分享了最简单的概率图模型,也就是朴素贝斯分类器。
由于普素贝斯假定不同的属性之间相互独立,所以它的概率图呢具有星形的结构。
但是在实际当中,这样的条件独立性几乎是不可能满足,属性之间或多或少总会有一些概率性的关联。
如果将属性之间的关联体现在概率图模型中,也就相当于把朴素贝叶斯当中互相独立的节点给它连接起来。
这时得到的呢就是贝叶斯网络,贝斯网络也叫信念。
网络有一些顶点和连接某些顶点的边构成每个顶点,它都代表着一个随机变量带箭头的。
有向边则表示,随机变量之间的因果关系。
从拓扑结构看,贝叶斯网络是有向无环图,有向指的是连接不同顶点的边是有方向起点和终点不能调换。
这说明由因到果的逻辑关系不能颠倒。
吴环指的是从任意顶点出发,都不能经过若干条边回到这个顶点,在途中呢找不到任何的环路。
这说明任何变量都不能够自己来决定自己。
贝叶斯网络是对随机变量以及存在于他们之间不确定性的一种表示。
它是以因子分解的方式定义了联合概率分布的数据结构,还给出了这个分布当中一系列条件独立性的假设。
这些假设是在网络当中体现出来的。
下面这个例子出自发表于第十二卷第四期AI季刊上的论文傻瓜贝斯网络。
他说明当事件之间的因果关系不能够完全确定的时候,基于概率的贝叶斯网罗是如何发挥作用。
那这个例子呢是这样,假设有一天我回家晚了,还碰巧没带钥匙,所以在敲门之前,我想先看一看家里有没有人我太太的习惯呢,是不在家的时候会把栏外灯给它打开。
但如果有客人约定来访的话,即使他在家的时候也会开灯。
另外呢我还养了一条狗,家里没人的时候会把狗锁在院子里,但狗在院子里呢也不能确定的,就说明家里肯定没人,因为如果他犯错的话,也会被锁在外面,不让进屋。
反正不管怎么样,只要狗在外面听到门口有人,它就会叫。
但是呢我又分辨不出来,到底是不是我家的狗在叫。
那么问题来了啊,如何判断我家里到底有没有人呢?在这个例子当中啊,所有的因果关系都不是绝对的,灯开不意味着家里肯定没人,狗在院子里也是一样。
如果灯是开着的,但是没有听到狗叫或者听到狗叫,但是灯没开这些情况之下呢,就只能对家里有没有人做出一个概率性的推断。
那贝叶斯网络就是概率推断的有利工具,它的条件独立性呢可以在已知的概率值较少的时候啊,依然做出一个精确的推断。
那点击文稿,你可以看到利用上面的这些已知的因果关系所构造出的贝叶斯网络。
从结构上看呢,条件独立性,它在一定程度上简化了随机变量之间的关系。
在给定父节点的条件之下,每个节点都和它所有非后代的节点条件独立。
这意味着每个节点的概率呢,既取决于它的父节点,也取决于它的子节点。
从结构上看啊,父节点、子节点以及子节点的后代节点啊,共同形成一条逻辑关系上的通路。
那概率的变化呢就是在这条通路上传导。
如果说其他节点不在这条通路上,那它就大概率的不会受到处在通路上节点的影响。
在上面例子当中,那听到狗叫是狗在外面的子节点,而它本身呢又没有后代节点。
所以只要狗在外面这个事件确定了,那么能不能听到狗叫就不会被其他任何变量所提供的信息影响到。
但是对于狗是不是在外面这个问题呢?事情就没有这么简单。
他既会受到家人外出和狗犯错,这两个副节点的影响,也会受到听到狗叫这个子节点的影响。
其中每一个的变化呢都会改变。
对于狗在外面这个论述的一个判断。
要对贝叶斯网络进行定量计算的话,就需要给每个根节点所表示的随机变量,给它赋予一个概率值。
同时呢给每一个条件概率赋值啊,那么条件概率体现在哪儿呢?就体现在表示不同节点之间依赖关系的那个有向边上啊,对于每一个有向边,我们都要给它赋值一个条件概率。
那么点击文稿,你可以看到给出的条件概率取值的这个v叶斯网络,根据这些概率呢就可以计算一种情况。
那就是灯开着,但是没有听到狗叫的时候,家里到底有没有人这个概率具体的求解方法呢?今天我们不做讨论,留到后面再进行解释。
本片先把重点放在贝叶斯网络它的结构特性上、结构上的条件独立性。
它的一个好处是降低了贝叶斯网罗所需要求解的概率的数目,从而在根本上降低推断的计算成本。
在上面例子当中啊,如果说不考虑这个条件独立性的话啊,我们不对这个贝叶斯网络进行建模。
那么随机变量的数目总共就是五个。
每一个随机变量呢又都只有两种可能的取值。
所以要定义这五个随机变量的联合分布的话,就得计算二的五次方减一,等于三十一个这么多个联合概率的值。
那么第三十二个呢,你用一减去前面,这三十一个啊就可以得到。
但是在条件独立性的假设之下,每个节点上我只需要计算二的m次方这么多个条件概率。
其中这里的m呢是指向这个节点的,有向边的数目啊,有多少个边指向它有多少个变量,决定了这个变量。
这样计算下来的话,在上面例子当中,我只需要定义十个条件概率就可以解除任何一种可能性。
任何一个事件,它的概率,这呢就是条件独立性所带来的运算上的便利。
那么点击文稿,你可以看到两个联合分布表达式的一个比较这样的简化呢,在我们这里举的这个例子当中,看起来可能并不起眼。
可是一旦当贝叶斯网络的规模增加到具有成百上千个节点的时候,这个简化的重要性就会凸显出来。
贝运斯网络它可以看成是一个条件独立性的大集合。
在这个集合当中呢,除了显示存在的条件、独立关系之外,还能不能根据它的因子分解解读出隐藏的条件独立关系呢?答案是肯定的。
在人工智能基础课当中,我介绍了近邻节点之间顺连分联,还有会连这三种基本的连接方式。
那么这三种基本结构呢都隐含着各自的条件独立性。
它们之间的组合又可以形成更加复杂的连接方式,构成新的条件独立关系。
这呢是贝叶斯网络当中的核心概念,值得多花一些笔墨来进行介绍。
在复杂的网络当中,两个节点就像是公交线路的起点和终点。
他们中间呢通常会隔着若干个站点,也就是其他节点。
这些节点之间的线路呢还都是单行线啊,当然指向的方向可能不一样。
但是每两个节点之间它的指向都只有一个方向。
这时候呢要判断起点和终点之间的线路到底能不能承载信息的传输,就需要使用特定的准则。
不严谨的说呢,我们不考虑数学上定义,在给定一些证据,也就是给定一些固定的随机变量的条件之下,如果一个节点的变化能够影响到另一个节点的变化,那么他们之间的关系就可以表示为低联通。
他们之间呢就会存在着这个低连接的路径。
反过来不存在低连接路径的两个节点,就是低分离的和这个全程命题的低位类相比啊,存在性的低联通这个概念更容易理解啊。
我只要找到一条低连接路径,就可以证明它是低联通的。
反过来,我要证明第分离的话,必须要确定一条,这样的路径都找不到。
所以在证明低分离的时候,我只要证明它不是低联通的就可以。
那么如何判定在给定的证据集的时候,两个节点之间是否是低连通的呢?这时呢就需要让两个节点之间的所有节点都满足以下这两个条件当中的任意一个。
当然两个都满足也是可以的这两个条件是什么呢?第一,两节点中的所有节点都以顺连或者分连的方式相连接啊,并且呢不属于任何的证据集啊,也就是这些节点都不是固定不变,没有固定的取值。
第二,这其中的所有节点可以以汇联的形式连接。
但是节点本身或者它的子节点需要属于证据集啊,就是取值应该是固定满足这两个条件当中,任意一个就可以证明低连通路径的一个存在。
这里面的第一个条件呢容易理解,它相当于在两个节点之间直接构造出一条有向的通道。
通道当中每个节点的取值都不是固定的这呢就保证了信息流动的畅通无阻。
第二个条件呢则是相当于用证据生成两个节点之间的关联啊,可能本来呢两者之间是没有关系的,但是我通过一个固定的取值来建立两者之间的关系。
这就像在上面例子当中,在不知道狗是不是在外面的蛇,家人外出和狗犯错。
这两个节点之间是相互独立啊,互不影响。
可是说一旦狗在外面作为证据出现,我已经确定了狗确实是在外面。
同时呢我又知道家人并没有外出啊,家里有人,这时呢我就可以立刻确定狗犯错这个变量的成立。
哎,就是说狗肯定是犯错。
那么这呢就相当于说是通过汇联结构间接的实现信息通路的一个联通。
低分离性呢它是条件独立性的这个充分必要条件,它既具备可靠性,也具备完备性。
如果说两个节点是低分离的,那么他们肯定就满足条件独立。
反过来,如果两个节点条件独立,两者之间也必定不会存在这个低变通的路径。
所以呢用低分离的概念,可以通过简单的检测网络的连通性来推断因子分解分布的一个独立性。
这呢对于简化大规模的复杂网络是非常重要。
因为前面的条件独立性只是说提出了这样的一个概念,那么低分离才是真正验证这个概念的具体的方法。
由低分离性呢又可以引出这个马尔科夫坦的概念,把所有的节点划分成若干个互斥的相关子集。
如果说在给定这个子集x的条件之下,子集a中的任何变量都和子集b中的任何变量条件独立。
那么满足这一个条件,最小的集合x就是集合a的这个马尔科夫坦。
这里的a和b呢就像两个不同的交际圈啊,你走你的阳关道,我过我的独木桥,只有在x的牵线搭桥之下啊,他们之间才会有所来往。
马尔可夫坦的意义在于划定了描述集合a所需要的这个数据范围。
一个节点的马尔卡夫坦,它包括它的父节点,子节点,还有共负节点,也就是子节点的这个其他的副节点。
马尔可夫坦的意义在于说包含了所有关于集合当中变量的这个信息。
非马尔可夫坦中的变量啊,也就是剩下其他的变量在描述这个a的时候都是冗余的。
所以说如果要计算这个a一中变量概率的话,就不需要惊动所有的变量,只需要对马尔可夫坦进行处理就可以了。
从图结构的角度来分析贝斯网络的话,还可以定义出这个独立图的概念。
所谓的独立独呢是对概率分布进行拆解的产物。
如果说一个概率分布p当中所有的条件独立性都能够在有向无完的图结构g当中表示出来。
那么这个g就是分布p的一个独立图。
有了独立图的概念之后呢,就可以从概率模型和图结构两个角度来定义贝斯网络。
所谓贝斯网络呢,可以看成是由GP构成的一个偶对。
这里面的概率分布p可以根据图结构g进行因子分解。
那么图结构g呢就是分布p分解得到的独立图。
这两种解释可以共同构成对贝叶斯网络以及所有概率图模型。
它的一个综合的阐释。
要在python语言当中实现概率图模型的话,可以使用这个第三方库叫PGM派。
这是由利用python掌握概率图模型这本书的作者啊安库尔安凯所开发。
并且维库利用这个库呢可以实现前文的例子当中所给出的模型在使用的时候建模贝叶斯网络需要用到models模块中的bastion model类定义。
离散的条件概率呢则需要用到factors到discrete这个模块当中的tabular CPD类。
在构造完成之后啊,我们不妨做一个小实验测试一下。
当门外灯亮却没有听到狗叫的时候,家中有人的概率。
这里呢我们是将所有的二元随机变量为真的情况,设为零,值为假的,情况呢则设为一值。
所以门外灯亮却没有听到狗叫就可以记作let ft等于于零hiarback等于一,将这两个变量的取值带入到网络中进行推断,可以计算出家里有人和没人的可能性呢,几乎是一半一半。
今天我和你分享了贝斯网络的基本原理,包含着以下四个要点。
第一,贝叶斯网络是有向无环图,可以用于因果推断。
第二,贝叶斯网络既是具有条件独立性的随机变量的联合分布,也是联合分布的因子分解结果。
第三,贝叶斯网络当中的条件、独立性可以通过低连通路径和低隔离性来描述。
第四,贝叶斯网络的概率分布描述和独立图描述,可以相互转换。
目前呢贝叶斯网络以及它的因果推断,在医疗诊断当中已经得到了广泛的应用。
那么,你是如何看待概率推断,在医疗这一类领域中的使用自动化推断和人类医生相比,又有哪些优势和劣势呢?欢迎分享你的观点。