当我们要建立贝叶斯网络时,需要首先通过因果关系得到贝叶斯的网络结构,再训练得到贝叶斯网的参数集。这里,参数集往往是通过给定数据集进行统计计算得到,但是,有的时候,给定的数据集不一定是完整的,可能某一条或多条的数据缺失一个或两个数据。
这是需要我们在数据缺失的情况下计算参数集,当然最简单的方法是去掉具有缺失数据的行,这样显然在数据集较小的时候会造成参数集的严重不准确。
在贝叶斯引论那本书中提到要用EM算法来解决这个问题。其实EM算法就是最大化期望值算法,这个过程中我们计算在某随机参数情况下的最大似然值,然后根据此似然值对参数值进行了修正,再次计算极大似然值,不断迭代,知道计算得到的值在可接受的阀值范围内。
下面来说一下,他是咋实现的。
首先,输入数据是贝叶斯网络结构、缺失的数据集、收敛阀值
1、设初始迭代次数为0,网络参数为任意值。收敛阀值a
2、根据贝叶斯估计公式计算网络参数的似然值。
其中:
这里面最值注意的是,在计算的时候一定要进行进行一下归一化才能得到真正的结果哦。
进入循环体:
a、用oldscore记录似然值。
b、计算(E步骤)
c、计算的最大值,即“最大似然”撒(M步骤)
d、此时,得到了newScore,比较newScore和oldscore,如果在收敛阀值内,则迭代结束,newscore就是最终结果。否则,使用oldscore记录newscore,迭代次数加一,继续迭代。
在书中他还介绍了,使用团树传播方法来简化计算过程。后面再记录。流程。
这个算法可以将参数和缺失数据同时计算出来,虽然对方也不清楚他们要什么,但是跑不出这两个。