EM算法 實例講解

        第一次接觸EM算法,是在完成半隱馬爾科夫算法大作業時。我先在網上下載了兩份Baum-Welch算法的代碼,通過複製粘貼,修修補補,用java實現了HMM算法(應用是韋小寶擲兩種骰子的問題)。然後,參考有關半隱馬爾科夫算法的論文,照着論文中的公式修改隱馬爾科夫算法,完成了大作業。現在回想起來,就隱隱約約記得有一大堆公式。最近,我看到一篇很好的文章,對EM算法的計算有了進一步的瞭解,文章鏈接爲http://159.226.251.229/videoplayer/em_tutorial.pdf?ich_u_r_i=5f2169937c008ed6744dff42d8b2ab80&ich_s_t_a_r_t=0&ich_e_n_d=0&ich_k_e_y=1545078905750963492497&ich_t_y_p_e=1&ich_d_i_s_k_i_d=5&ich_u_n_i_t=1

        文章中有個例子,能讓人快速瞭解EM算法的使用方法,下圖是例子的示意圖,圖b是EM算法的實例,圖a是讓我們預熱的。

         這是一個拋硬幣的例子,H表示正面向上,T表示反面向上,參數θ表示正面朝上的概率。硬幣有兩個,A和B,硬幣是有偏的。本次實驗總共做了5組,每組隨機選一個硬幣,連續拋10次。如果知道每次拋的是哪個硬幣,那麼計算參數θ就非常簡單了,如上圖所示。

         如果不知道每次拋的是哪個硬幣呢?那麼,我們就需要用EM算法,基本步驟爲:1、給θA和θB一個初始值;2、(E-step)估計每組實驗是硬幣A的概率(本組實驗是硬幣B的概率=1-本組實驗是硬幣A的概率)。分別計算每組實驗中,選擇A硬幣且正面朝上次數的期望值,選擇B硬幣且正面朝上次數的期望值;3、(M-step)利用第三步求得的期望值重新計算θA和θB;4、當迭代到一定次數,或者算法收斂到一定精度,結束算法,否則,回到第2步。

 

        稍微解釋一下上圖的計算過程。初始值θA=0.6,θB=0.5。

        圖中的0.45是怎麼得來的呢?由兩個硬幣的初始值0.6和0.5,容易得出投擲出5正5反的概率是pA=C(10,5)*(0.6^5)*(0.4^5),pB=C(10,5)*(0.5^5)*(0.5^5),  pA/(pA+pB)=0.449,  0.45就是0.449近似而來的,表示第一組實驗選擇的硬幣是A的概率爲0.45。圖中的2.2H,2.2T是怎麼得來的呢?  0.449 * 5H = 2.2H ,0.449 * 5T = 2.2T ,表示第一組實驗選擇A硬幣且正面朝上次數的期望值是2.2。其他的值依次類推。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章