概率图模型-可分解图-连接树算法-弦图-图论

概率图模型–精确推断算法的原理

本文主要内容

  • 本文从可分解图出发,逐渐引入弦图,三角化图,然后揭示了为什么引入可分解图,因为可分解图是在连接树算法中最终得到的,还讲解了为什么要使用连接树算法,因为连接树算法可以解决不是树的图结构的推断问题,还可以获得团上变量的联合概率分布,从而对单个变量的边际分布的推断就只在包含查询变量的团上进行即可,这也远远减少了计算步骤。
  • 本文最后附带了我写这个博客的时候使用的简答R代码
  • 阅读本文可能需要对概率图模型有一定了解的人(当然我也是学习阶段,小白一个)

可分解图的引入

读论文的时候先遇到的可分解图,那首先给出分解的定义:
修改gRbase包里面的mpd()函数是找出对应的分解,只利用到下面的分解的概念,不要理解成mpd()里面的图必须是弦图
图存在分解与图是可分解图是不一样的概念我的论文里面要求的是可分解图,用mcs()函数进行可分解图的检验

在这里插入图片描述
以上定义的1,3条都好理解,那么第2条的理解是,A集合B集中的节点之间的路径一定要通过S集中的节点,用图的条件独立性可以说,在S已知的条件下,A与B条件独立,A与B里面包含的节点是没有之间相连的。
下面再看一下可分解图的概念
在这里插入图片描述
总结一下就是一个无向图如果本身是完全图(也就是节点之间都是相互连接的)或者不是完全图但是存在真分解(A,B,S),使得对应的子图也存在真分解,那么称该无向图是可分解图。下面给两个可分解图的例子
在这里插入图片描述

在第一个可分解图当中,可以有两个真分解,分别为
A1={A},S1={B},B1={C,D}
A2={A,B},S2={C},B2={D},
最大团有三个,分别为C1(A,B),C1(B,C),C1(C,D),分离集分别为S1={B},S2={C}

其中还有重要的一步,不是存在真分解就一定是可分解图,还要求真分解之后的子图也存在真分解或者子图是完全图,只有再满足这个条件,才可以说原来的图是可分解图 ,大家可以自已验证满足这个条件

以上的处理是为了得到联合概率的简单表示,对于无向图来说联合概率可以分解为定义在最大团上的势能函数的乘积再进行归一化,公式为

在这里插入图片描述在这里插入图片描述

那么如果我们的无向图是可分解图的话,联合概率就可以表示为

在这里插入图片描述
具体到我们的图一来说就是p(x)=C1(A,B)*C1(B,C)*C1(C,D)/(S1(B) *S2©)
这个公式很重要,只有可分解图的联合概率可以直接这样写,减少了计算的步骤,分母变的简单多了
那么为什么要介绍可分解图呢?一方面是因为可分解图的性质比较好,并一方面如果图是可分解的,那么我们要研究整个图的性质可以分解为研究(A+S)或者(B+S)这两个子图的性质。同理可以分析图2,图2也是可分解图,在这个可分解图中A={A},S={B,D},B={C}。从这个可分解图中我们是不是可以发现所有两个三角形,不多说,我们看下面的概念。
在这里插入图片描述

弦图的引入

首先我们要知道弦图和可分解图是等价的

弦:

如下图,下图是一个节点为5的环,这个环中A,C之间,A,D之间,B,E之间,C,E之间没有连接,如果加入边集AC在这个图里面,那么AC就称为该图的一条弦,同理加入边集AD在这个图里面,那么AD也称为该图的一条弦,注意BD之间加边就不叫弦了。
在这里插入图片描述

弦图:

如果有个无向环图中,任意大于等于四个节点的环都有一个弦,那么这个图就称为弦图,如下图所示,下面这个图就是弦图,首先第一步是在5个节点的环中添加弦AC,添加弦AC之后又形成了新的环ACDE,所以又添加了新的弦AD,此时形成的图就满足了定义,大于三个节点的环中都有了弦,这个图为弦图,

在这里插入图片描述
那么我们现在来验证一下这个弦图是不是可分解图,验证可知确实是可分解图,这里有三种真分解的方式
A1={B},S1={A,C,D},B1={E}
A2={B},S2={A,C},B2={D,E}
A3={B,C},S3={A,D},B3={E}
足以可见,该弦图是可分解图,这点我们需要记住,其实我们最开始想要得到可分解图,可分解图有很好的性质,可以让我们的分析由全局过度到局部,因此我们引入了弦图,为什么呢,因为弦图和可分解图是等价的
在这里插入图片描述

因此我们的目的就可以换成检验一个图是不是弦图,检验弦图我们有方法,
在这里插入图片描述

节点的次序

检验图是不是弦图,就是检验这个图有没有完美消元序
在这里插入图片描述
查阅了一些资料发现这个我是最好理解的,看下面这个图,这个图当中有5个节点,给这5个节点进行了排序,对于序为1的节点来说,邻居节点为2,3,1前面没有任何节点,所以adj(v1)交上空集,也为空集,空集也是特殊的完全图,对于序为2的节点来说,2节点的邻居节点为1,3,4,2前面只有一个节点1,所以交集为1,是完全图,同理看序为3的节点,邻居为1,2,4,5,那么3前面的节点为1,2,交集为1,2,1,2,之间有边所以是完全图,序为4的节点的交集为2,3,2,3之间有边相连,最后序为5的节点的交集为3,是完全图。所以该弦图有最优节点排序
在这里插入图片描述
完美节点顺序也就是完美消元序,也就是消元的时候按照节点顺序依次进行消元,下面这个图就不满足上面讨论的性质,该图就不是弦图,但是我说的不满足上面的性质是我试出来的,
在这里插入图片描述

那么真正的判定方法是什么呢,这里引用博客,先从最朴素的算法理解,说的是每次找出一个单纯点,然后把相关的边都删除,重复进行,如果最后所有的点都被删除了,那么就说明得到的删除节点的序列是最优的,那么该图也就是弦图
引用博客当中对单纯点进行了介绍,单纯点就是如果一个节点的邻居节点是全连接的,那么这个节点就是单纯点正如上面的那个图节点1就是单纯点,因为2,3有连接,同理节点2就不是单纯点,因为1,4没有连接,那么现在就利用这样原始的朴素的办法进行判断,1,4,5都是单纯点,假设第一次删除的是1,那么把1和相对应的边删除以后,得到的新的图的单纯点为2,4,5,假设删除的是2,那么得到的新图的单纯点为4,5,假设删除的是4,那么剩下的图只有3,5,3,5都是单纯点,随便删掉一个,剩下 的那个点自已也是单纯点,所以按照每一步都删除单纯点的方法,可以把图中的点全部删除,所以该图是弦图
还有用的最多的算法是MCS算法(最大势搜索算法)利用最大势搜索
最大势搜索算法可以给出一个节点的消元顺序,注意不管是不是弦图都可以给出一个消元顺序,给出的这个消元顺序应该是代价最小的(当然这是我理解的),然后对这个消元顺序再利用最优消元顺序的定义进行判断,若满足,那么给出的这个节点顺序就是最优的节点顺序,拥有了最优的节点顺序,那么它就一定是弦图。
所以在我看来,逻辑是这样的,我们想要判断是不是弦图,判断弦图需要利用节点的最优消元顺序,那么最大势搜索算法(MCS)给出我们一个节点的消元顺序,就对这个顺序进行定义的判断,若符合,那么这个次序就是最优节点顺序,该图就是弦图
由此可以最优节点顺序不唯一,只有有一个这样的最优节点顺序,那么这个图就是弦图
在这里插入图片描述

上面谈到了弦图,我们知道弦图就是可分解图,利用可分解图我们可以更好的写出联合概率分布,可分解图还是针对无向图来说的,我们下面把有向图上的联合概率串起来
在这里插入图片描述
按照有向图上面的联合概率可以写成每个变量的局部条件概率的乘积,所以首先有
在这里插入图片描述
然后利用贝叶斯公式把条件概率写成联合除以边缘的形式,大家看一下最后化简的公式,分子像不像我们的团的乘积,分母像不像分离集的乘积,如果当箭头改成无向的,你会发现就是这样的,箭头改成无向的时候这个图你会发现它是可分解图,这就再次印证了,可分解图的联合概率分布可以写成最大团的乘积除以分离集的乘积的形式
在这里插入图片描述
当我们利用这个有向图进行推理时,比如我们要求p(A),那么就是依次对B,C,D进行积分或者是求和,积分或者求和的过程其实也就对应的是消元的过程,消元时必然避免不了我们要有一个节点的消元顺序,最后我们可以找到一个最好的节点消元顺序,因为最好的节点消元顺序对应着最小的消元代价,我这里通俗的解释一下什么是消元代价
在解释消元代价之前先介绍结构图和端正图(道德图)

结构图

下面给一个复杂一点的有向图
在这里插入图片描述

这个有向图的端正图(道德图)为下图,道德图的意思是把有向图当中的箭头变成无向的,然后把配偶节点用无向边相连。如A,B之间,C,D之间是配偶。
道德图就是结构图,在结构图当中进行消元代价的计算,比如为了计算p(A),需要消除B,D,C,E,F,G,H,
假设我们就按照这样的顺序进行消元,消除B时,我们从下图可以看出B的邻居节点为A,C有两个,加上B自已有三个变量,假设每个变量都是二值离散变量,那么消除B的代价为2^3=8,消除B的具体过程为

  1. 在下面这个最原始的结构图中把与B节点相邻的节点两两相连,A,C相连,由于AC本来就是相连的可能会忽略这个过程,如果AC之间原来没有无向边相连,那么在消除B时也需要首先把他们连在一起
  2. 在结构图中把B节点去掉,那B节点不在了,与B节点连接的边自然而然就不在了

消除B之后就会形成新的结构图,在新的结构图上计算消除节点的代价,下一个消除的是D,消除C时同样按照这样的过程

  • 首先与D相邻的节点为C,E,检查CE之间是不是有边相连,若没边则加边
  • 删除D节点和与D相连的边

消除节点D一共涉及了三个变量C,D,E,所以消除D的代价为2^3=8
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
不知道大家有没有好奇,在消除变量的过程中,为什么需要检验与该变量相邻的节点之间是不是有边呢,拿消除E节点为例,与E节点相连的节点为G,H,E,H,G这三个节点是不是对应的概率分布p(G|E),p(H|E),那么把E消除之后就只剩下关于G,H的概率分布了,我们认为一个概率分布的节点是相互有关系的也就是有连接的。
加边的过程可以认为是三角化的过程
三角化其实也就是加弦的过程,三角化图也就是弦图 ,三角化是为了得到弦图,得到弦图就是得到了可分解图。
之所以将那么多就是为了说概率图模型当中的精确推断算法的连接树算法的,是为了说明为什么要使用连接树算法,因为连接树算法可以的得到可分解图。下面介绍一下连接树算法的原理

  • 对于有向图来说
    . 首先进行道德化得到结构图(道德图)
    然后对得到的无向图,给出一个节点顺序(可以通过MCS算法),利用这个节点顺序进行加边操作(三角化操作)
    三角化之后得到的图就是弦图,也就是可分解图,对这最终的无向图可以转换成一个聚类树的形式,(我认为转换成聚类树是为了让我们直观的看出来最大团集合分离集是什么样的

  • 对于无向图来说自然没有上面的道德化的过程,只有三角化的过程和转换成聚类树的过程

最终得到的无向图为
在这里插入图片描述
转化为聚类树的形式为下面这棵树,那么这个有向图的联合概率可以写为P(A,B,C)P(D,C,E)P(C,F)P(E,G)P(E,H)/P©P(E)
对于无向图最后三角化之后得到的图,也有团和分离集,其实团和部分变量的联合分布都可以叫做因子,如果有无向图最后经过三角化得到的图跟上图一样,那么该无向图的联合概率分布可以写为C1(A,B,C)C2(D,C,E)C3(C,F)C4(E,G)C5(E,H)/S1©S2(E)
也就是把概率换成了势能函数
在这里插入图片描述
上面讲的是在联合树算法当中的联合概率分布有了不一样的形式,现在讲一下在推断问题上面联合树算法有什么不同呢,我突然想到为什么要转化成这样的聚类树了,为了在树结构上使用想念传播算法,我们之间学得信念传播算法是点与点之间的消息传递,在普通树上面的信念传播算法是这样的

  1. 首先从根节点向叶节点传递消息
  2. 然后再从叶节点向根节点传递消息
  3. 每个节点的边际分布正比于该节点接受到的信息的乘积

大家可以看一下,普通树上的信念传播算法方便了计算边际分布,把每个消息储存起来,不用重复计算,但是我们要知道普通树结构非常有局限,只能适用于部分有向图和无向图(默认大家知道什么是数结构),为了加深记忆,我还是写一下树结构吧,树结构可分为有向树和无向树

  • 如果一个有向图满足任意两个变量只有一条路径(忽略方向)且只有一个没有父节点的节点,那么这个有向图为树结构,其中唯一没有父节点的节点称为根节点
  • 如果一个无向图满足任意两个变量只有一条路径,那么这个无向图也为树结构,在树结构的无向图当中,任意一个节点都可以作为根节点

下面展示一下普通的有向树(左)和普通的无向树(右)
在这里插入图片描述)在这里插入图片描述
但是当遇到不是树结构的图时怎么使用想念传播算法呢?这个时候就是上面的聚类树的作用了,也就是利用连接树算法逐渐把图解构转换成弦图,转换成弦图之后就可以得到聚类树,你仔细观察一下普通有向树和聚类树,你会发现在普通有向树种,一个圆圈表示单独的有个变量,消息是在单个变量之间传递的,最后方便得到的是每个变量的边际概率分布;那么在聚类树当中,一个圆圈表示的是一个变量的集合,一个团,消息是在一个团到另外一个团上传递的,在聚类树上同样也是三步走信息传递,只不是这里的节点是团而已,最后得到的是某个团上变量的联合概率分布,比如在聚类树中我们可以得到P(A,B,C),P(D,C,E),P(C,F),P(E,G),P(E,H),那么比如我们现在想要求一个变量的A的边际分布,我们只需要找到包含A节点的概率分布或团,这里只有P(A,B,C),那么就是只需对B,C进行积分或者求和(边缘化)即可。
这样就简单多了啊,之间我们求边际分布时需要对除了查询变量和证据变量之外的所有节点都进行边缘化操作(主要原因还是因为我们最开始只知道所有变量的联合概率分布),那么现在利用连接树算法,我们可以知道每个团中变量的联合概率分布,那么我们只需要找到一个包含查询变量的团,然后在这个团中对除了查询变量以外的变量进行边缘化即可。

总结

本篇文章应该算是我对概率图模型里面的精确推断算法的完整总结了,可能以后用的也不多,主要用的是近似推断算法里面的MCMC算法,但是自已进行梳理以后发现知识真的是融汇贯通的。

参考文献

图模型的结构_分解和可压缩性_王晓飞
probabilistic graphical models principles and applications by luis enrique sucar (z-lib.org)
Learning Probabilistic Graphical Models in R by David Bellot (z-lib.org)
https://blog.csdn.net/u011815404/article/details/99188055

代码

本文的简单R代码,因为有些图是自已生成的

library("parallel")
library("BiocGenerics")
library("gRbase")
library("gRain")
library("graph")
library("grid")
library("Rgraphviz")
p1=ug(~A:B+B:C+C:D)
plot(p1)
p2=ug(~A:B:D+B:C:D)
plot(p2)
p3=ug(~A:B+B:C+C:D+D:E+E:A)
plot(p3)
p4=ug(~A:B:C+A:C:D+A:D:E)
plot(p4)
p5=dag(~A+B:A+C:B+D:C)
plot(p5)
p6=dag(~A+B+D+C:A:B+E:C:D+F:C+G:E+H:E)
plot(p6)
p7=moralize(p6)
plot(p7)

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值