當我們要建立貝葉斯網絡時,需要首先通過因果關系得到貝葉斯的網絡結構,再訓練得到貝葉斯網的參數集。這里,參數集往往是通過給定數據集進行統計計算得到,但是,有的時候,給定的數據集不一定是完整的,可能某一條或多條的數據缺失一個或兩個數據。
這是需要我們在數據缺失的情況下計算參數集,當然最簡單的方法是去掉具有缺失數據的行,這樣顯然在數據集較小的時候會造成參數集的嚴重不准確。
在貝葉斯引論那本書中提到要用EM算法來解決這個問題。其實EM算法就是最大化期望值算法,這個過程中我們計算在某隨機參數情況下的最大似然值,然后根據此似然值對參數值進行了修正,再次計算極大似然值,不斷迭代,知道計算得到的值在可接受的閥值范圍內。
下面來說一下,他是咋實現的。
首先,輸入數據是貝葉斯網絡結構、缺失的數據集、收斂閥值
1、設初始迭代次數為0,網絡參數為任意值。收斂閥值a
2、根據貝葉斯估計公式計算網絡參數的似然值。
其中:
這里面最值注意的是,在計算的時候一定要進行進行一下歸一化才能得到真正的結果哦。
進入循環體:
a、用oldscore記錄似然值。
b、計算(E步驟)
c、計算的最大值,即“最大似然”撒(M步驟)
d、此時,得到了newScore,比較newScore和oldscore,如果在收斂閥值內,則迭代結束,newscore就是最終結果。否則,使用oldscore記錄newscore,迭代次數加一,繼續迭代。
在書中他還介紹了,使用團樹傳播方法來簡化計算過程。后面再記錄。流程。
這個算法可以將參數和缺失數據同時計算出來,雖然對方也不清楚他們要什么,但是跑不出這兩個。