前面我们已经知道朴素贝叶斯分类器基于一个很强的假定,即对于给定的某个类别,各特征属性之间是相互独立的。这个假定简化了计算过程和减少了分类器的复杂度,但是其限制条件却太过苛刻。因为直观上我们知道,现实世界中各特征属性之间很有可能是相互关联的,我们不能忽略这个特征。为了对现实世界进行更好的建模以得到更加准确的分类。接下来我要讲述第四部分的内容,即贝叶斯网络。

  


  (1)贝叶斯网络定义


   贝叶斯网络(Bayesian Networks, BNs)也称作贝叶斯网(Bayesian Nets)或者信念网络(Belief Networks)。它是表示变量之间相互作用的图形模型。贝叶斯网络由节点和节点之间的弧组成,每个节点对应一个随机变量X,并且具有一个对应该随机变量的概率P(X)。如果存在一条从节点X到节点Y的有向弧,则表明X对Y有直接影响,该影响被条件概率P(Y/X)所指定。另外,贝叶斯网络是一个有向无环图,即图中没有环。节点和节点之间的弧定义了网络的结构,而条件概率是给定结构的参数。


  


   

贝叶斯网络因果推断python 贝叶斯 网络_条件概率


   对于图(a)中朴素贝叶斯网络而言,假定特征属性B、C、D之间是相互独立的,所以他们之间没有边相连。也就是说,在给定A的情况下特征属性B的发生与给定A的情况下特征属性C的发生是相互独立的。由于各个属性都有一条从A指向其的边,所以所有的属性都依赖于类别变量A。而对于图(b)中贝叶斯网络而言,B到C和C到D之间是有边相连的,这也意味着他们之间是有关联的。这在很大程度上减轻了条件独立性的假设。也就是说给定A的情况下特征属性C的发生还与给定A情况下B的发生是有联系。


   上面我们提到,节点之间如果有边表示他们之间是有联系的,而因为该边是有向的,如果有一条A到B的有向弧,其含义我们暂时可以理解为A“causes”B,后面我们还会详细介绍它。这个信息可以指引我们建立一个图的结构。


   对于贝叶斯网络而言,我们必须定义每个节点的条件概率分布(Conditional Probability Distribution, CPD)。如果该变量是离散的,那么他们可以用条件概率表(CPT)来表示。 条件概率表列出了每个节点对于父节点不同组合取值时,它取不同值的概率。下面我们来看一个具体的例子,假定每个节点都只有两种取值,即T(true)或者F(false)。


   

贝叶斯网络因果推断python 贝叶斯 网络_概率分布_02


  

  


   P(C, S, R, W) = P(C) * P(S|C) * P(R|C,S) * P(W|C,S,R)


  


   P(C, S, R, W) = P(C) * P(S|C) * P(R|C) * P(W|S,R)


  


  




  


   使用贝叶斯网络通常我们希望通过它得到概率推理。例如对于上述网络,假如我们已经观察到“草地湿了”,我们知道有两种可能,但是,哪一种更有可能是的呢?利用贝叶斯定理我们可以得到如下计算(1表示true,0表示false)。   

贝叶斯网络因果推断python 贝叶斯 网络_概率分布_03


  

   

贝叶斯网络因果推断python 贝叶斯 网络_贝叶斯网络因果推断python_04


  

  




  (3)因果性(Causality)


   前面我们提到过,贝叶斯网络中,从A指向B的有向弧,我们可以理解为A导致B的发生。一个有趣的问题是:我们能区分出变量之间的因果性和纯粹的关联性吗?答案是,有时候,并且你需要测量至少三个变量之间的关系才行。所以在利用贝叶斯网络来做推理之前,我们还必须学习其结构,也就是将节点之间的关系通过图来建模。这就是第四部分我们要将的内容。


   到这里,我们可以知道,贝叶斯网络描述了一种概率分布,它通过指定一些条件独立的假定和一组条件概率来管理一组变量(A Bayesian network describes the probability distribution governing a set of variables by specifying a set of conditional independence assumptions along with a set of conditional probabilities)。另外,对于条件独立性的假定仅仅应用在其子集变量中。




  (4)学习贝叶斯网络结构


  


   有两种方法学习贝叶斯网络的结构:参数学习和结构学习。


   参数学习适用于网络结构是已知的。它又有2种情况:第一种情况是网络结构是已知的,并且网络结构中没有隐藏或者丢失变量;另一种是网络结构也是已知的,但是有隐藏或者丢失的变量。在第一种情况下,主要的任务是估计条件概率;而在第二种情况下,需要一个本地优化解决方案,例如期望最大化算法(Expectation Maximization, EM)。


   当数据集D潜在的结构未知的时候,此时应该运用结构学习。结构学习的任务可以表述如下:给定一个训练集D,找到一个与D最相匹配的网络B,此时D是一个独立的实例。结构学习也有两种不同的从数据集中找到接近图概率模型学习的方法。即基于依附分析的方法(dependency-analysis-based methods)和搜索计分方法(search and score methods)。


   基于依附分析的方法依赖于这样一个假定,即所研究的潜在的网络中节点之间有很多依赖关系。算法通过对训