一文讀懂EM指望最大化算法和一維高斯混合模型GMM

EM最大指望算法是一個數值求解似然函數極大值的迭代算法,就好像梯度降低算法是一種數值求解損失函數極小值的迭代算法同樣。node

EM算法一般適合於隨機變量依賴於另一些不可觀測的隨機變量(稱之爲隱含變量或者中間變量)的場景web

此時因爲似然函數的表示形式較爲複雜(含有對隱含變量的累加求和或者積分),難以求導獲取似然函數的極大值,也沒法方便地應用梯度降低算法進行優化。算法

EM算法是一個相似梯度降低算法的迭代算法,它首先給隨機變量分佈參數賦初始值,而後尋找到了一個便於優化的似然函數的下界 (剛好爲似然函數在某個分佈下的指望Expectation,指望中消去了隱變量),並經過不斷地優化(Maximization) 這個下界求解似然函數的極值微信

EM算法在機器學習的許多算法中都有使用到,如markdown

  • KMeans:實際上K-Means是一種Hard EM算法, 隱變量直接取最大機率的位置。
  • 支持向量機的SMO算法
  • LDA主題模型參數估計
  • 混合高斯模型的參數估計
  • HMM隱馬爾科夫模型的參數估計

本篇文章咱們將詳述EM算法的推導過程,並以一維GMM高斯混合模型爲例,示範EM算法的應用方法。機器學習

公衆號後臺回覆關鍵字:源碼,獲取本文含所有公式的markdown文件。編輯器

一,EM最大指望算法

當咱們關心的隨機變量依賴於另一些不可觀測的隨機變量時,經過對咱們關心的隨機變量採樣,咱們將難以直接經過最大似然估計的方法推斷咱們關心的隨機變量分佈律中的未知參數。svg

例如咱們有100個學生的身高數據,其中有一些是男生,另一些是女生。男生和女生的身高服從不一樣的正態分佈,可是咱們不知道哪些數據是男生的,哪些是女生的,這是這個模型的隱含變量,是不能夠被觀測到的。函數

那麼如何根據這批身高數據估計男女生各自正態分佈的均值和方差,以及這批數據中男生的比例呢?學習

指望最大化算法 EM (Expectation Maximization)這時候就派上用場了,它可以解決這種含有隱含隨機變量的模型的參數估計的問題。

設觀測隨機變量爲 , 隱含隨機變量爲 ,待肯定參數爲

肯定時, 的分佈函數由 給出。

按照極大似然原理,並使用全機率公式,似然函數能夠寫成

對數似然函數能夠寫成

對數似然函數中,因爲有對 的求和,若是嘗試對 求偏導等於0來計算最優的 ,將難以獲得對應的解析解。這和目標函數很是複雜時,沒法直接解析求解只能使用梯度降低這類迭代算法是同樣的。

從原則上說,在一些較爲簡單的狀況下咱們也可以使用梯度降低法求解對數似然的最優值,例如當隱藏變量Z是離散隨機變量時,且可取值較少,咱們很容易將對z的求和表示出來,從而能夠計算梯度進而使用梯度降低法。

但對於通常狀況,對z的求和將難以進行,若是Z是連續的隨機變量,對z的求和將變成積分,此時使用梯度降低法將更加困難。

咱們能夠嘗試和梯度降低算法效果至關的迭代算法。最大指望算法EM正是能夠實現這個目的。

大概原理以下,咱們首先給 賦初始值 ,而後在此基礎上,找到一個可使得對數似然函數變大的 ,而後再在此基礎上找到一個可以使對數似然函數變得更大的 ,如此即可不斷地提升對數似然函數的值。迭代執行n幹次後,若是 的差值足夠小,那麼咱們認爲就找到了比較合適的  做爲 的估計值。

下面闡述最大指望算法的原理推導。

假設在第n次迭代,咱們的對數似然函數取值爲

咱們但願找到一個 使得

下面咱們開始尋找符合條件的

構造函數

因爲 是嚴格凹函數,Jensen不等式成立

存在如下縮放:

注意到

所以

取 

則有

即符合咱們尋找的條件。

消去無關量,咱們能夠獲得

注意到 其實是一個分佈,所以右邊能夠理解成求隨機變量

分佈下指望的最大值。

總結下 EM算法算法的流程:

(1) 初始化

注意這裏的模型參數 要是完備的,即給定這些參數,可以計算聯合機率分佈函數

,對於男女生混合身高的例子,咱們的參數應當包括 ,即男平生均身高和身高標準差,女平生均身高和身高標準差,以及男生的比例。

(2) 計算E步,又分紅兩小步,先計算機率分佈 ,再算出指望

(3) 對E求極大,解出 的新的估計,將新的估計值代入第(1)步,直到收斂。

能夠證實EM算法是收斂的,但不能保證它能收斂到全局最優,所以能夠嘗試多個不一樣的初始值,計算結果,並挑選可以使似然函數取值最大的結果。

二,一維GMM高斯混合模型

高斯分佈模型也叫正態分佈模型,其機率密度函數以下:

GMM高斯混合模型的機率密度函數爲多個高斯分佈的線性組合:

其中 爲正數,而且:

高斯混合模型的 參數能夠理解爲樣本屬於第 類的機率。

則高斯混合模型的機率密度函數能夠表示成以下形式:

根據EM算法,

(1)咱們首先取初始化參數

而後執行迭代過程。

(2)咱們先求指望值

代入貝葉斯公式

(3)咱們求指望極大值對應的 做爲  

考慮到約束


根據拉格朗日乘子法,做拉格朗日函數

取極大值時咱們有:

因而咱們有:

解得:

如此迭代,直到收斂。

本文分享自微信公衆號 - Python與算法之美(Python_Ai_Road)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索