上篇博客我们描述了如何计算贝叶斯网络联合概率的方法。这里再举一个例子:
上图这个例子中,事件a导致了b和c的发生。假设a有、、三种状态,b有、两种状态,c有、,a的每个状态的先验概率是:
0.3 | 0.5 | 0.2 |
b对a的条件概率是:
0.4 | 0.6 | |
0.1 | 0.9 | |
0.8 | 0.2 |
c对a的条件概率是:
0.5 | 0.5 | |
0 | 1.0 | |
0.2 | 0.8 |
注意,同一个事件的状态相互之间必须互斥且完备,互斥是指一个事件不能同时处于两个或两个以上状态中。完备是指一个事件只能处于所列举的某个状态之一,不能处于未知的状态。
显然,根据上篇博客的算法,这个贝叶斯网络的联合概率是:
(1)
具体计算时,把a、b、c的取值直接代入即可。 可能读者会有疑问:这个联合概率公式到底有什么用?用处就是根据某个或者某些结点的当前状态推断其他结点取值某种状态的概率。比如假设上图中已知b=,问c=的概率即是多少?
根据条件概率的定义,我们有:
(2)
把a的状态也考虑在内,则有:
(3)
(4)
(5)
其中,(3)、(5)中的每一个概率都是a、b、c某个状态组合的联合概率。根据公式(1)我们可以很容易地计算出该联合概率的值。比如,根据公式(3)有:
其中,
所以:,同理可以计算出,把它们代入(4)再代入(2)得到最终结果:
这就是在已知b=的情况下,c=的概率。所以在根据贝叶斯网络求条件概率时,任意一个结点都可以是条件,任意一个其他结点都可以是被求解的结点,跟网络中的有向弧以及有向弧的指向没有任何关系。
下图给出了贝叶斯网络在现实生活中的一个应用:
任何一个入度为0的结点旁给出了该结点的先验概率,其他结点旁给出了该结点针对它的所有前驱结点的条件概率。根据这个贝叶斯网络,我们可以很容易地在任意已知条件下计算任意一个结点的概率。比如已知某学生的推荐信Letter=Good,问他SAT成绩=Good的概率是多少?或者反过来,已知他SAT成绩=Good,问他推荐信Letter=Good的概率是多少?计算过程略。
通过这个例子你对贝叶斯网络以及为什么要计算它的联合概率是不是有了更深刻的认识?