20贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

Posted FinTech修行僧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20贝叶斯分类器:贝叶斯网络(属性之间存在依赖)相关的知识,希望对你有一定的参考价值。

贝叶斯分类器:贝叶斯网络


贝叶斯网络(Bayesian network),又称信念网络(Belief network),或有向无环图模型(directed acyclic graphical model),是一种概率图模型,于1985年由Judea Pearl首先提出。


它是一种模拟人类推理过程中因果关系的不确定性处理模型,其网络拓朴结构是一个有向无环图(DAG)。 


贝叶斯网络中的结点表示随机变量,它们可以是可观察到的变量,或隐变量、未知参数等。有因果关系(或非条件独立)的变量或命题,则用箭头来连接。


换言之,连接两个节点的箭头代表此两个随机变量具有因果关系,或非条件独立。若两个节点间以一个单箭头连接在一起,表示其中一个节点是“因(parents)”,另一个是“果(children)”,两节点就会产生一个条件概率值。


例如,假设节点 E 直接影响到节点 H,即 E→H,则用从 E 指向 H 的箭头,建立结点 E 到结点 H 的有向弧 (E,H),权值(即连接强度)用条件概率 P(H|E) 来表示,如下图所示:

                        【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

简言之,把某个研究系统中涉及的随机变量,根据是否条件独立绘制在一个有向图中,就形成了贝叶斯网络。主要用来描述随机变量之间的条件依赖,用圈表示随机变量(random variables),用箭头表示条件依赖(conditional dependencies)。


【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

由例子引入贝叶斯网络的概念


在朴素贝叶斯分类器中,我们使用朴素贝叶斯分类实现了SNS社区中不真实账号的检测。在那个解决方案中,我们做了如下假设:

      i、真实账号比非真实账号平均具有更大的日志密度、更大的好友密度以及更多的使用真实头像。

      ii、日志密度、好友密度和是否使用真实头像在账号真实性给定的条件下是独立的。

      

但是,上述第二条假设很可能并不成立。一般来说,好友密度除了与账号是否真实有关,还与是否有真实头像有关,因为真实的头像会吸引更多人加其为好友。因此,我们为了获取更准确的分类,可以将假设修改如下:

      i、真实账号比非真实账号平均具有更大的日志密度、更大的好友密度以及更多的使用真实头像。

      ii、日志密度与好友密度、日志密度与是否使用真实头像在账号真实性给定的条件下是独立的。

      iii、使用真实头像的用户比使用非真实头像的用户平均有更大的好友密度。

      

上述假设更接近实际情况,但问题随之也来了,由于特征属性间存在依赖关系,使得朴素贝叶斯分类不适用了。既然这样,我们便去寻找另外的解决方案。

      

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

        【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)


上图是一个有向无环图,其中每个结点代表一个随机变量,而表示两个随机变量之间的联系,表示指向结点()影响被指向结点()


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

      

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

【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)


第二个表中,横向表头 H 表示条件因变量纵向表头 R 表示结果变量上表为真实账号和非真实账号的概率,而下表为头像真实性对于账号真实性的概率。


这两张表分别为“账号是否真实”和“头像是否真实”的条件概率表。有了这些数据,不但能顺向推断,还能通过贝叶斯定理进行逆向推断。例如,现随机抽取一个账户,已知其头像为假(H=0),求其账号也为假的概率:

【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

也就是说,在仅知道头像为假的情况下,有大约35.7%的概率此账户也为假。如果给出所有结点的条件概率表,则可以在观察值不完备的情况下对任意随机变量进行统计推断。上述方法就是使用了贝叶斯网络。


【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

贝叶斯网络的定义


 一个贝叶斯网络,包括一个有向无环图(DAG)和一个条件概率表集合。DAG中每一个结点表示一个随机变量,可以是可直接观测的变量或隐藏变量,而有向边表示随机变量间的条件依赖;条件概率表中的每一个元素对应DAG中唯一的结点,存储此结点对于其所有直接前驱结点的联合条件概率。


贝叶斯网络借助有向无环图来刻画属性之间的依赖关系,并使用条件概率表来描述属性的联合概率分布。

     

贝叶斯网络有一条极为重要的性质,就是我们断言每一个结点在其直接前驱结点的值确定后,这个结点条件独立于其所有非直接前驱前辈节点这个性质很类似马尔科夫过程。


其实,贝叶斯网络可以看做是Markov链的非线性扩展。这条特性的重要意义在于明确了贝叶斯网络可以方便计算联合概率分布。


对于任意的随机变量,其联合概率可由各自的局部条件概率分布相乘而得:

【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)


而在贝叶斯网络中,由于存在前述性质,任意随机变量组合的联合条件概率分布被化简成:

            【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

其中Parents表示 xi 的直接前驱结点(表示 因 ),概率值可以从相应条件概率表中查到。


如下所示,便是一个简单的贝叶斯网络:

                    【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

因为a导致b,a和b导致c ,所以有

                    【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

      

贝叶斯网络比朴素贝叶斯更复杂,而想构造和训练出一个好的贝叶斯网络更是异常艰难。


但是贝叶斯网络是模拟人的认知思维推理模式,用一组条件概率函数以及有向无环图对不确定性的因果推理关系建模,因此其具有更高的实用价值。


【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

贝叶斯网络的三种结构


贝叶斯网络结构有效地表达了属性间的条件独立性,给定父结点集,贝叶斯网络假设每个属性与它的非后裔属性独立,也与其非直接前驱前辈结点属性独立,即每个属性只与其直接前驱结点属性相关,即具有马尔科夫性。


给定如下图所示的贝叶斯网络:

                      【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

从图中可以比较直观地看出:

(1)x1,x2,...,x7 的联合概率分布是

【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

(2)x1和x2 独立 (对应V型结构);

(3)x6和x7在给定x4的条件下独立(对应 同父结构);


根据上图,第1点可能很容易理解,但第2、3点中所述的条件独立是啥意思呢?其实第2、3点是贝叶斯网络中3种结构形式中的其中二种。为了说清楚这个问题,需要引入D-Separation(有向分离)这个概念,但在此之前,我们需要先介绍一下贝叶斯网络的三种结构,如下图所示:

【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)


【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

同父结构


                    【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

在同父网络结构中,我们有P(a,b,c)=P(c)*P(a|c)*P(b|c)(依据贝叶斯网络任意随机变量组合的联合条件概率分布公式),

又由于 P(a,b|c)=P(a,b,c)/P(c)(贝叶斯公式),

然后我们将P(a,b,c)=P(c)*P(a|c)*P(b|c)带入上式,得到:

                            P(a,b|c)=P(a|c)*P(b|c)

也就是说在c给定的条件下,a,b被阻断(blocked),a和b是独立的。


因此,在同父结构中,给定父结点c的取值,则其子结点a和b之间条件独立。


【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

V型结构


                    【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

有:P(a,b,c) = P(a)*P(b)*P(c|a,b)成立,化简后可得:

【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)


在c未知的条件下,a、b被阻断(blocked),a和b是独立的 。


这里证明用到了边缘化的概念:即在联合概率中,把最终结果中那些不需要的事件c 通过合并成它们的全概率,而消去它们(对离散随机变量用求和得全概率,对连续随机变量用积分得全概率)


因此,在V型结构中,给定子结点c 的取值,其父结点a和b比不独立;只有在子结点c 未知时,a和b结点才独立。


【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

顺序结构


            【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

有:P(a,b,c)=P(a)*P(c|a)*P(b|c) ,化简后可得:

【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

即:在c给定的条件下,a,b被阻断(blocked),a和b是独立的。


因此,在顺序结构中,给定C的值,a和b是独立的。


三种贝叶斯网络结构总结如下:

(1)顺序结构:x—>z—>y,x和y关于z条件独立。

(2)同父结构:x<—z—>y,x和y关于Z条件独立。

(3)V型结构:x—>z<—y,x和y边缘独立。若已知结果z反而可能不独立。


【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

补充知识点


D-Separation  的概念

D-Separation(directed separation)是一种用来判断变量是否条件独立的图形化方法。换言之,对于一个DAG(有向无环图)E,D-Separation方法可以快速的判断出两个节点之间是否是条件独立的。


阻塞(Block)

设X,Y,Z分别是一个有向无环图G里互没有交集的节点集,Z阻塞X中的任一个节点到Y中的任一个节点的通路,当且仅当节点集Z满足如下条件:

如果G中有顺序结构x—>z—>y或同父结构x<—z—>y,则节点z包含在集合Z中;

如果G中有V型结构x—>z<—y,则节点z及其后裔节点(descendants)一定不包含在集合Z中。


有向分离(D-separation):

如果集合Z阻塞X到Y中的任何一条通路(path),则称在这个DAG里,集合Z有向分离X和Y。也称Z 为X和Y的切割集。


条件独立

给定Z的条件下,若 X 和 Y 满足

                    【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

则称在给定Z的条件下,X和Y条件独立,记作:【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)



【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

贝叶斯网络的学习


若网络结构已知,即属性间的依赖关系已知,则贝叶斯网的学习过程相对简单,只需通过对训练样本“计数”,估计出每个结点的条件概率表即可。


但在现实应用中,我们往往并不知晓网络结构,于是贝叶斯网学习的首要任务就是根据训练数据集来找出结构最“恰当”的贝叶斯网。


评分搜索”(score search)是求解最恰当贝叶斯网络的常用方法。具体来说,我们先定义一个评分函数,以此来评估贝叶斯网络与训练数据的契合程度,然后基于这个评分函数来寻找结构最优的贝叶斯网。显然,评分函数引入了关于我们希望获得什么样的贝叶斯网的归纳偏好。


常用评分函数通常基于信息论准则,此类准则将学习问题看作一个数据压缩任务,学习的目标是找到一个能以最短编码长度描述训练数据的模型,此时编码的长度包括了描述模型自身所需的字节长度和使用该模型描述数据所需的字节长度。


MDL准则(Minimal Description Length,最小描述准则)

对贝叶斯网学习而言,模型就是一个贝叶斯网,同时,每个贝叶斯网描述了一个在训练数据上的概率分布,自有一套编码机制能使那些经常出现的样本有更短的编码。因此,我们应该选择那个综合编码长度(包括描述网络和编码数据)最短的贝叶斯网。


评分函数

【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)


不幸的是,从所有可能的网络结构空间中搜索最优贝叶斯网结构是一个NP难问题,难以快速求解。


有两种常用的策略能在有限时间内求得近似解:

第一种是贪心法,例如从某个网络结构出发,每次调整一条边(增加或删除,调整方向),直到评分函数值不再降低为止;

第二种是通过给网络结构施加约束来消减搜索空间,例如将网络结构限定为树形结构等;


因此,贝叶斯网络的构造和学习过程可总结为:

第一步,确定随机变量之间的拓扑关系,形成DAG---构造网络

第二步,训练贝叶斯网络,即构造每个结点的条件概率表



【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

贝叶斯网络的推断(即模型预测)


贝叶斯网络训练好之后就能用来回答“查询”,即通过一些属性变量的观测值来推测其他属性变量的取值。


例如,若我们观测到西瓜色泽青绿、敲声浑浊、根蒂蜷缩,想知道它是否成熟、甜度如何。这样通过已知变量观测值来推测待查询变量的过程称为“推断”,已知变量观测值称为“证据”。


最理想的是直接根据贝叶斯网络定义的联合概率分布来精确计算后验概率,但这样的精确推断已被证明是NP难的。换言之,当网络结点较多、连接稠密时,难以进行精确推断,此时需要借助近似推断。通过降低精度要求,在有限时间内求得近似解。在现实应用中,近似推断常使用吉布斯采样(Gibbs sampling) 来完成。


【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)


【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

吉布斯采样Gibbs sampling


吉布斯采样的基本思想很直接,就是依次对各个分量进行采样,在采样其他分量时,认为其他分量固定,且依据已有的条件概率对分量进行采样。这就将多维采样问题转换为了对一维分布进行采样。如下图所示:

【20】贝叶斯分类器:贝叶斯网络(属性之间存在依赖)

以上算法收敛后,得到的就是概率分布的样本。当然这些样本并不独立,但是我们此处要求的是采样得到的样本符合给定的概率分布,并不要求独立。吉布斯采样的目的是为了获得一个样本,不是计算概率。


举个例子:

甲 能 E:吃饭、学习、打球,时间T:上午、下午、晚上,天气W:晴朗、刮风、下雨。现在要一个sample,这个sample可以是:打球+下午+晴朗。

问题是我们不知道p(E,T,W),或者说,不知道三件事的联合分布。当然,如果知道的话,就没有必要用gibbs sampling了。但是,我们知道三件事的conditional distributio,也就是说,p(E|T,W),p(T|E,W),p(W|E,T)。现在要做的就是通过这三个已知的条件分布,再用gibbs sampling的方法,得到joint distribution(联合分布)。


具体方法如下:

首先随便初始化一个组合,比如: 学习+晚上+刮风,然后依条件概率改变其中的一个变量。具体说,假设我们知道晚上+刮风,我们依据已有的条件概率,给E更改一个变量,比如,学习-->吃饭。我们再依条件概率更改下一个变量,根据学习+刮风,把晚上变成上午。类似地,把刮风变成刮风(当然可以变成相同的变量)。


这样学习+晚上+刮风-->吃饭+上午+刮风。同样的方法,得到一个序列,每个单元包含三个变量,也就是一个马尔可夫链。然后跳过初始的一定数量的单元(比如100个),然后隔一定的数量取一个单元(比如隔20个取1个)。这样sample到的单元,是逼近联合分布的。





参考文献

【1】周志华 · 机器学习 · 清华大学出版社

【2】从贝叶斯方法谈到贝叶斯网络 http://blog.csdn.net/zdy0_2004/article/details/41096141

【3】算法杂货铺--- 分类算法之贝叶斯网络  http://www.cnblogs.com/leoo2sk/archive/2010/09/18/bayes-network.html

【4】LDA-math-MCMC 和 Gibbs Sampling https://cosx.org/2013/01/lda-math-mcmc-and-gibbs-sampling

【5】随机采样和随机模拟:吉布斯采样Gibbs Sampling   http://blog.csdn.net/pipisorry/article/details/51373090




以上是关于20贝叶斯分类器:贝叶斯网络(属性之间存在依赖)的主要内容,如果未能解决你的问题,请参考以下文章

朴素贝叶斯分类算法预测具有属性的人是不是买电脑python

机器学习系列——6朴素贝叶斯分类器下

18贝叶斯分类器:朴素贝叶斯分类器(属性之间条件独立)

从朴素贝叶斯分类器到贝叶斯网络(下)

西瓜书学习—贝叶斯分类(下)

机器学习:半朴素贝叶斯分类器