機器學習算法總結(六)——EM算法與高斯混合模型


  極大似然估計是利用已知的樣本結果,去反推最有可能(最大概率)導致這樣結果的參數值,也就是在給定的觀測變量下去估計參數值。然而現實中可能存在這樣的問題,除了觀測變量之外,還存在着未知的隱變量,因為變量未知,因此無法直接通過最大似然估計直接求參數值。EM算法是一種迭代算法,用於含有隱變量的概率模型的極大似然估計,或者說是極大后驗概率估計。

1、經典的三硬幣模型  

  引入一個例子來說明隱變量存在的問題。假設有3枚硬幣,分別記作A,B,C。這些硬幣正面出現的概率分別是π,p,q。我們的實驗過程如下,先投擲硬幣A,根據其結果選出硬幣B和硬幣C,正面選B,反面選C;然后投擲選出的硬幣,此時出現正面記作1,出現反面記作0。在這個例子中我們觀察到的變量只是B或者C的結果,而對A的結果並不知道,在這里A的結果也就是我們的隱變量。A的結果對最終的結果是有影響的,因此在估計參數時必須將A的結果考慮進去。

1、EM算法

  我們將觀測變量表示為Y = (Y1,Y2,....,Yn),隱變量表示為Z = (Z1,Z2,....,Zn),則觀測數據的似然函數可以表示為

  

  在這里P(Y|θ) 是P(Y, Z|θ) 的邊緣概率,通過轉換后可以表示成右邊的形式,我們將其轉換成對數形式,這樣便於求聯合概率

  

  然而對於這樣的式子直接根據極大化求θ的值是很困難的,因為這里還存在隱變量Z,在這里引入EM算法,通過迭代求解,假設在第i 次迭代后θ的估計值為θ(i)。我們希望新估計值能是L(θ)增加,通過迭代逐步的達到最大值。為此我們考慮第i+1步迭代后兩者的差:

  

  利用Jensen不等式將上述式子展開並得到其下界(對數函數是凹函數):

  

  令

  

  則有

  

  在這里B(θ, θ(i)) 是L(θ) 的一個下界,而且由的表達式可知

  

  因此任何能使得B(θ, θ(i)) 增大的θ,也能使得L(θ) 增大。因此求θ值使得B(θ, θ(i)) 增大就可以轉變成求θ使得L(θ) 增大,即求

  

  將上述式子展開可得(在這里去掉常數項,因為常數項不會影響最終的結果)

  

  因此問題就演變成了求Q函數的極大化。EM算法的整體思路就是初始化θ的值為θ(0),然后通過迭代去求得最終的θ值,迭代的終止條件應該是L(θ) 的增加不明顯(具體可以設定一個增加值的閥值來控制)。下面的圖可以形象的表示EM算法的迭代更新過程

  

  EM算法的具體流程如下:

  輸入:觀測變量數據Y,隱變量數據Z,聯合分布P(Y, Z|θ),條件分布P(Z|Y, θ)

  輸出:模型參數θ

  1)選擇參數θ的初始值θ(0),開始迭代

  2)E步:記θ(i)次迭代參數為θ的估計值,在第i+1次迭代的E步,計算(基於當前求得的模型參數θ猜測隱變量的期望值,因此E步也稱為期望步)

  

  3)M步:求使得Q函數極大化的θ值,確定第i+1次迭代的參數的估計值θ(i+1)

  

  4)重復2, 3步直至收斂

  注意:EM算法是對初始化參數敏感的

 

2、高斯混合模型(GMM)

  EM算法的一個重要應用場景就是高斯混合模型的參數估計。高斯混合模型就是由多個高斯模型組合在一起的混合模型(可以理解為多個高斯分布函數的線性組合,理論上高斯混合模型是可以擬合任意類型的分布),例如對於下圖中的數據集如果用一個高斯模型來描述的話顯然是不合理的

  

  對於上圖如果我們用兩個高斯模型來描述,則如下

  

  然而對於兩個高斯模型我們如何將其組合在一起呢,最簡單的方式就是通過線性組合的形式來組合,其具體表達式如下:

  

  其中αk是系數,αk ≥ 0,且所有的α總和為1,k表示第k個模型,其中Φ(y|θk) 是高斯分布密度(θk = (μk,σk2)),具體表達式如下

  

  高斯混合模型常用語聚類中(現實中大多數分布都是正態分布,而在聚類中的各個類別可能是分布參數不同的正態分布)。對於高斯模型的應用大致是先隨機在這K個模型中任選一個模型(αk是第k個模型被選中的概率,注意在這里的混合模型和集成學習中的模型是不一樣的,這里實際應用的只是混合模型中的一個),然后再用這個模型進行預測。而且在用高斯混合模型進行聚類時,混合模型中的模型個數k事實上就是聚類的簇數k。

  用EM算法來估計高斯混合模型的參數,在這里參數θ = (α1,α2,...,αk;θ1,θ2,...,θk),在估計之前我們得預先明確隱變量。先假定觀測數據yj(j = 1,2,...,N),具體yj的產生過程如下,首先依照概率αk選擇第k個高斯分布模型,然后用這個模型生成觀測數據yj。在這里觀測數據是已知的,而觀測數據具體來自哪個模型是未知的(這就和之前提過的三硬幣模型是很相似的,知道模型被選擇的概率就好比知道選擇B,C硬幣的概率,但是卻不知道本次預測的結果是由B得出的還是C得出的),因此就引出了我們的隱變量,隱變量的具體表達式如下:

  

  γjk是0-1隨機變量,確定了觀測變量和隱變量之后,那么完全數據就是

  

  之后就可以用EM算法去估計參數θ,具體流程如下

  1)初始化θ值,開始迭代

  2)E步:依照當前的模型參數,計算

  

  3)M步:計算新一輪迭代的模型參數

  

  4)重復2, 3步直至算法收斂

  其實高斯混合模型和K-means(也可以用EM算法描述)方法很相似,簡單來說,K-means的結果是每個數據點被分配到其中某一類中,而高斯混合模型是給出這些點被分配給某一類的概率,可以看作是軟聚類(也就是允許兩個類之間有重合區域)。高斯混合模型是對初始值敏感的,也就是說如果運氣不好,選取的初始值不好,最終的模型結果也不會很好,因此很多時候我們會用K-means做預訓練,獲得較好的結果,然后再用高斯混合模型進行訓練進一步優化預測結果(高斯混合模型也是要給出聚類的簇數K值,在初始化參數時給出的)具體的做法就是:先用K-means粗略的估計出簇心,然后將簇心作為高斯混合模型的初始均值(μ值),然后再去估計高斯混合模型中的參數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM