首先介紹高斯混合模型:
高斯混合模型是指具有以下形式的概率分布模型:

一般其他分布的混合模型用相應的概率密度代替(1)式中的高斯分布密度即可。
給定訓練集
,我們希望構建該數據聯合分布

這里
,其中
是概率
,並且
,用
表示
可能的取值。
因此,我們構建的模型就是假設
是由
生成,而
是從
中隨機選擇出來的,那么
就服從
個依賴於
的高斯分布中的一個。這就是一個高斯混合模型
是潛在隨機變量,即它是隱藏的或者觀察不到的,這將使得估計問題變得棘手。
上面公式太多,作一個總結,總體意思是
關於
的條件分布符合高斯分布(即正態分布),這個
是潛在變量,它的值未知,但是
服從多項式分布,於是
關於
的條件分布就是高斯混合模型,而
是一個潛在變量,值不確定,進而導致高斯混合模型的概率估計也變得棘手。
可以看出,我們構建的高斯混合模型參數有
和
,為了估計出這些參數,寫出參數的似然函數:

變量
意味着每一個
來自於
個高斯分布中的哪一個,如果我們知道變量
的值,最大化似然函數問題將變得容易,似然函數將會變成如下形式:

那么參數的最大似然估計可以計算出:

可以看出,當
已知的時候,最大似然函數的的估計與前面討論過的高斯判別分析模型(關於高斯判別模型參見生成式學習算法)幾乎一樣,除了這里
替代了高斯判別模型中類別標簽的角色。
但是在這個問題中
是未知的,該怎么辦?就得運用EM算法。在應用到我們的這個問題中,EM算法分兩步,在E步驟中,算法試圖猜測出
的值,在M步驟中,根據E步驟猜測的值更新參數。需要注意的是在M步驟中假定E步驟中的猜測是正確的,算法流程如下:
E-step: 對於每一個
,令:

M-step: 更新參數:

重復上面兩步直至收斂(參數不再發生明顯變化)
在E-step中計算
關於
的后驗概率時,參數
和
用的都是當前的值,第一步時可以隨機初始化,用貝葉斯公式,我們可以得到:

分子上的
是由均值為
,方差為
的高斯分布在
處的概率密度給出,
由參數
給出. 在E-step中對
的猜測只是猜測它是某個值得概率,被稱作“軟猜測”,與之對應的“硬猜測”就是一個最好的猜測,即不是0就是1.
和上面我們在推導
已知時,參數估計的公式相比,EM算法中的參數更新僅僅是用
代替了
.
EM算法和k-means算法(參考我的博文K-means聚類算法原理和C++實現)很類似,除了k-means是一個“硬” 類別分配(為每個樣本選擇一個確定的類別),而這里是以概率
的“軟”分配(就是
取某個值的概率)。同k-means一樣,EM算法也容易陷入局部最優,所以多次運行,每次都將參數初始化為不同的值將會是一個很好的解決辦法。
EM算法就是不斷重復猜測
的值,但是到底是如何進行的呢,如何保證收斂性呢,在下一篇博文將繼續討論,從而使得EM算法能夠更加容易應用到各種存在潛在變量的參數估計問題中,而且將討論如何保證算法收斂。
