因做實驗的需要,最近在學習EM算法,算法介紹的資料網上是有不少,可是沒有一篇深入淺出的介紹,算法公式太多,比較難懂,畢竟她是ML領域10大經典算法之一 ,且一般是結合GMM模型的參數估計來介紹EM的。看過不少EM的資料,現將自己對EM算法用稍微通俗點的文字寫下來,當然你可以用GMM這個具體的例子來幫助理解。
問題的提出:給定一些樣本數據x,且知道該數據是有k個高斯混合產生的,現在要用給的樣本數據x去估計模型的參數sida,即在該參數sida下產生x數據的概率最大。(其實就是個MLE估計)
-
原問題等價與求sida,使得滿足max(logP((x/sida))),那么我們為什么不直接用MLE去估計呢?通過關於EM算法各種推導公式(我這里基本把這些公式都省略掉,因為介紹這方面的資料有不少)可以看出,對數里面有求和的項,說白了,就算用MLE的方法去做解不出來,因為各種求偏導什么的很難求。
-
所以在EM算法中有個假設,即我們不僅知道觀測到的數據x,而且還知道它屬於隱變量z的哪一類(在GMM中,隱變量z表示各個單高斯模型)。此時原問題的求解等價於求sida,使得滿足max(logP((x,z)/sida))。
-
為什么2中就能用MLE解決呢,又通過查看EM算法各種公式推導可以看出,2與1的不同在與2中那些對數符號里面沒有了求和項,所以各種求導方法等在此可以應用。
-
但是我們的z變量是隱含的,也就是說未知的,那么2中的MLE該怎么做呢?通過查找EM算法的公式推導過程可以看出,2中的求max(logP((x,z)/sida))中的sida可以等價與求max[Ez(logP(x,z)/sida)],即求logP((x,z)/sida)關於變量z的期望最大。
-
既然是求其關於z的期望,那么我們應該知道z的概率分布才行。比較幸運的是在EM體系中,關於z的分布也是很容易求得的,即z的后驗分布P(z/x,sida)很容易求出來。
-
E-step:首先隨便取一組參數sida,求出5中z的后驗分布,同時求出logP((x,z)/sida)關於z的期望,即Ez(logp((x,z)/sida))。
-
M-step:前面已經講到,6中的期望最大用MLE很容易解決,所以M-step時采用MLE求得新的參數sida,又從前面的介紹可知,6中的期望最大時的參數等價於原問題的求解的參數。
-
返回6,7之間迭代,直到滿足logP((x,z)/sida)基本不再變化。