周末去给同事分享贝叶斯网络,每次分享过后的东西都没有记录感觉挺可惜的,故把准备分享过程中的一些笔记、资料、关键点等写成文章记录下来。
1、贝叶斯网络的定义
一个贝叶斯网络是一个有向无环图(DAG),其节点表示一个变量,边代表变量之间的联系,节点存储本节点相当于其父节点的条件概率分布。
其中每个节点受其父节点所影响,即其父节点代表原因,子节点表示结果。
用数学的形式描述就是贝叶斯网络各变量的联合概率分布等于其每个节点的以其父为条件概率的乘积。
即:
2、贝叶斯网络的推导
贝叶斯网络的推导即回答该贝叶斯网络上所有可能的概率问题,以上图为例,可以回答P(x2=0),P(x3=1|x2=0),P(x2=0,x3=1,x4=0)等任意的概率问题。
(1)精确推导
较为简单的贝叶斯网络可以使用精确推导方式。根据贝叶斯网络的结构可求其联合概率分布,然后根据全概率公式、贝叶斯公式则可推出任意在此网络上概率的形式。
如贝叶斯网络如下:
则其概率问题的推导如下:
精确推导在计算过程中可以使用动态规划做一些优化(如消元法),也可根据一些图论的知识做一些优化(如基于团的推导方法)。
(2)模糊推导
有时候贝叶斯网络过大,则需要使用模糊推导。
模糊推导的方法有很多,这里讲如何使用MCMC(马尔科夫链蒙特卡洛)中的吉布斯抽样来进行推导。
I、样本
样本由观测数据和未知数据组成,即x1,x2,?,x3,?....xn,其中未观测到的数据就以?表示,推理的目的就是求未知节点在已有观测值下的概率分布,即P(?|x1,x2..xn)。
II、马尔科夫毯
贝叶斯网络中的Markov branket指一个节点X的父节点、子节点、子节点的父节点(不包括自己),下文叙述中用MB(X)来表示节点X的马尔科夫毯。
III、算法流程
初始化:初始化未知变量的条件概率分布,根据该分布进行抽样,给未知节点赋值。
(1)随机选择未知节点
(2)根据该未知节点的条件概率分布进行抽样,给该节点赋值。
(3)重新计算该节点的分布P(?)=P(?|MB(?))
(4)返回(1)迭代,直到收敛。
3、贝叶斯网络的训练
(1)结构已知,样本完整
使用最大似然估计的方法(如果离散值使用统计的方法)来获取每个节点的条件概率分布即可。
(2)结构已知,样本不完整
如果存在无法观测的节点(即样本不完整),则可以使用EM方法来训练,大致过程如下:
初始化:随机各节点的条件概率分布
E-step:根据各节点已有条件概率分布,补全样本(如果连续则补全为均值,离散补全为出现概率最大的值)
M-step:根据“完整”的观测值使用最大似然估计或者统计来得到新的各节点概率分布,替换原有值。
(3)结构未知
获取贝叶斯网络结构大致有以下三种方法:
I、由专家建模。
II、使用基于相关性的网络训练方法
大致思路为计算各变量相关性(如互信息,卡方检验等),然后在相关性大的节点之间建立边,再通过和样本拟合程度确定边的方向。
III、基于打分的方法
首先确立打分函数,如MDL等,一个打分函数来描述一个贝叶斯网络的好坏,通常要考虑网络结构(越简单越好)和与样本拟合程度(拟合越大越好)。
其次使用启发式算法(如模拟退火等)在整个网络结构空间进行检索,搜索到一个局部最优值作为算法结果。