高斯混合模型(GMM)及其EM算法的理解

https://blog.csdn.net/jinping_shi/article/details/59613054

高斯混合模型(Gaussian Mixed Model)指的是多個高斯分佈函數的線性組合,理論上GMM可以擬合出任意類型的分佈,通常用於解決同一集合下的數據包含多個不同的分佈的情況(或者是同一類分佈但參數不一樣,或者是不同類型的分佈,比如正態分佈和伯努利分佈)。

如圖1,圖中的點在我們看來明顯分成兩個聚類。這兩個聚類中的點分別通過兩個不同的正態分佈隨機生成而來。但是如果沒有GMM,那麼只能用一個的二維高斯分佈來描述圖1中的數據。圖1中的橢圓即爲二倍標準差的正態分佈橢圓。這顯然不太合理,畢竟肉眼一看就覺得應該把它們分成兩類。

圖1
圖1

這時候就可以使用GMM了!如圖2,數據在平面上的空間分佈和圖1一樣,這時使用兩個二維高斯分佈來描述圖2中的數據,分別記爲N(μ1,Σ1)N(μ1,Σ1)N(μ2,Σ2)N(μ2,Σ2). 圖中的兩個橢圓分別是這兩個高斯分佈的二倍標準差橢圓。可以看到使用兩個二維高斯分佈來描述圖中的數據顯然更合理。實際上圖中的兩個聚類的中的點是通過兩個不同的正態分佈隨機生成而來。如果將兩個二維高斯分佈N(μ1,Σ1)N(μ1,Σ1)N(μ2,Σ2)N(μ2,Σ2)合成一個二維的分佈,那麼就可以用合成後的分佈來描述圖2中的所有點。最直觀的方法就是對這兩個二維高斯分佈做線性組合,用線性組合後的分佈來描述整個集合中的數據。這就是高斯混合模型(GMM)。

圖2
圖2

高斯混合模型(GMM)

設有隨機變量XX,則混合高斯模型可以用下式表示: 

p(x)=k=1KπkN(x|μk,Σk)p(x)=∑k=1KπkN(x|μk,Σk)

其中N(x|μk,Σk)N(x|μk,Σk)稱爲混合模型中的第kk分量(component)。如前面圖2中的例子,有兩個聚類,可以用兩個二維高斯分佈來表示,那麼分量數K=2K=2πkπk混合係數(mixture coefficient),且滿足: 

k=1Kπk=1∑k=1Kπk=1

0πk10≤πk≤1

可以看到πkπk相當於每個分量N(x|μk,Σk)N(x|μk,Σk)的權重。

GMM的應用

GMM常用於聚類。如果要從 GMM 的分佈中隨機地取一個點的話,實際上可以分爲兩步:首先隨機地在這 K 個 Component 之中選一個,每個 Component 被選中的概率實際上就是它的係數πkπk ,選中 Component 之後,再單獨地考慮從這個 Component 的分佈中選取一個點就可以了──這裏已經回到了普通的 Gaussian 分佈,轉化爲已知的問題。

將GMM用於聚類時,假設數據服從混合高斯分佈(Mixture Gaussian Distribution),那麼只要根據數據推出 GMM 的概率分佈來就可以了;然後 GMM 的 K 個 Component 實際上對應KK個 cluster 。根據數據來推算概率密度通常被稱作 density estimation 。特別地,當我已知(或假定)概率密度函數的形式,而要估計其中的參數的過程被稱作『參數估計』。

例如圖2的例子,很明顯有兩個聚類,可以定義K=2K=2. 那麼對應的GMM形式如下: 

p(x)=π1N(x|μ1,Σ1)+π2N(x|μ2,Σ2)p(x)=π1N(x|μ1,Σ1)+π2N(x|μ2,Σ2)

上式中未知的參數有六個:(π1,μ1,Σ1;π2,μ2,Σ2)(π1,μ1,Σ1;π2,μ2,Σ2). 之前提到GMM聚類時分爲兩步,第一步是隨機地在這KK個分量中選一個,每個分量被選中的概率即爲混合係數πkπk. 可以設定π1=π2=0.5π1=π2=0.5,表示每個分量被選中的概率是0.5,即從中抽出一個點,這個點屬於第一類的概率和第二類的概率各佔一半。但實際應用中事先指定πkπk的值是很笨的做法,當問題一般化後,會出現一個問題:當從圖2中的集合隨機選取一個點,怎麼知道這個點是來自N(x|μ1,Σ1)N(x|μ1,Σ1)還是N(x|μ2,Σ2)N(x|μ2,Σ2)呢?換言之怎麼根據數據自動確定π1π1π2π2的值?這就是GMM參數估計的問題。要解決這個問題,可以使用EM算法。通過EM算法,我們可以迭代計算出GMM中的參數:(πk,xk,Σk)(πk,xk,Σk).

GMM參數估計過程

GMM的貝葉斯理解

在介紹GMM參數估計之前,我們先改寫GMM的形式,改寫之後的GMM模型可以方便地使用EM估計參數。GMM的原始形式如下: 

p(x)=k=1KπkN(x|μk,Σk)(1)(1)p(x)=∑k=1KπkN(x|μk,Σk)

前面提到πkπk可以看成是第kk類被選中的概率。我們引入一個新的KK維隨機變量zzzk(1kK)zk(1≤k≤K)只能取0或1兩個值;zk=1zk=1表示第kk類被選中的概率,即:p(zk=1)=πkp(zk=1)=πk;如果zk=0zk=0表示第kk類沒有被選中的概率。更數學化一點,zkzk要滿足以下兩個條件: 

zk{0,1}zk∈{0,1}

Kzk=1∑Kzk=1

例如圖2中的例子,有兩類,則zz的維數是2. 如果從第一類中取出一個點,則z=(1,0)z=(1,0);,如果從第二類中取出一個點,則z=(0,1)z=(0,1).

zk=1zk=1的概率就是πkπk,假設zkzk之間是獨立同分布的(iid),我們可以寫出zz的聯合概率分佈形式: 

p(z)=p(z1)p(z2)...p(zK)=k=1Kπzkk(2)(2)p(z)=p(z1)p(z2)...p(zK)=∏k=1Kπkzk

因爲zkzk只能取0或1,且zz中只能有一個zkzk爲1而其它zj(jk)zj(j≠k)全爲0,所以上式是成立的。

圖2中的數據可以分爲兩類,顯然,每一類中的數據都是服從正態分佈的。這個敘述可以用條件概率來表示: 

p(x|zk=1)=N(x|μk,Σk)p(x|zk=1)=N(x|μk,Σk)

即第kk類中的數據服從正態分佈。進而上式有可以寫成如下形式: 
p(x|z)=k=1KN(x|μk,Σk)zk(3)(3)p(x|z)=∏k=1KN(x|μk,Σk)zk

上面分別給出了p(z)p(z)p(x|z)p(x|z)的形式,根據條件概率公式,可以求出p(x)p(x)的形式: 

p(x)=zp(z)p(x|z)=i=1KπkN(x|μk,Σk) (zk=01)(4)(4)p(x)=∑zp(z)p(x|z)=∑i=1KπkN(x|μk,Σk) (zk=0的項爲1,省略)

可以看到GMM模型的(1)式與(4)式有一樣的形式,且(4)式中引入了一個新的變量zz,通常稱爲隱含變量(latent variable)。對於圖2中的數據,『隱含』的意義是:我們知道數據可以分成兩類,但是隨機抽取一個數據點,我們不知道這個數據點屬於第一類還是第二類,它的歸屬我們觀察不到,因此引入一個隱含變量zz來描述這個現象。

注意到在貝葉斯的思想下,p(z)p(z)是先驗概率, p(x|z)p(x|z)是似然概率,很自然我們會想到求出後驗概率p(z|x)p(z|x): 

γ(zk)=p(zk=1|x)=p(zk=1)p(x|zk=1)p(x,zk=1)=p(zk=1)p(x|zk=1)Kj=1p(zj=1)p(x|zj=1) ()=πkN(x|μk,Σk)Kj=1πjN(x|μj,Σj) ((3)(4))(5)(5)γ(zk)=p(zk=1|x)=p(zk=1)p(x|zk=1)p(x,zk=1)=p(zk=1)p(x|zk=1)∑j=1Kp(zj=1)p(x|zj=1) (全概率公式)=πkN(x|μk,Σk)∑j=1KπjN(x|μj,Σj) (結合(3)(4))

上式中我們定義符號γ(zk)γ(zk)來表示來表示第kk個分量的後驗概率。在貝葉斯的觀點下,πkπk可視爲zk=1zk=1的先驗概率。

上述內容改寫了GMM的形式,並引入了隱含變量zz和已知xx後的的後驗概率γ(zk)γ(zk),這樣做是爲了方便使用EM算法來估計GMM的參數。

EM算法估計GMM參數

EM算法(Expectation-Maximization algorithm)分兩步,第一步先求出要估計參數的粗略值,第二步使用第一步的值最大化似然函數。因此要先求出GMM的似然函數。

假設x={x1,x2,...,xN}x={x1,x2,...,xN},對於圖2,xx是圖中所有點(每個點有在二維平面上有兩個座標,是二維向量,因此x1,x2x1,x2等都用粗體表示)。GMM的概率模型如(1)式所示。GMM模型中有三個參數需要估計,分別是ππμμΣΣ. 將(1)式稍微改寫一下: 

p(x|π,μ,Σ)=k=1KπkN(x|μk,Σk)(6)(6)p(x|π,μ,Σ)=∑k=1KπkN(x|μk,Σk)

爲了估計這三個參數,需要分別求解出這三個參數的最大似然函數。先求解μkμk的最大似然函數。對(6)式取對數後再對μkμk求導並令導數爲0即得到最大似然函數。 

0=n=1NπkN(xn|μk,Σk)jπjN(xn|μj,Σj)Σk(xnμk)(7)(7)0=−∑n=1NπkN(xn|μk,Σk)∑jπjN(xn|μj,Σj)Σk(xn−μk)

注意到上式中分數的一項的形式正好是(5)式後驗概率的形式。兩邊同乘Σ1kΣk−1,重新整理可以得到: 

μk=1Nkn=1Nγ(znk)xn(8)(8)μk=1Nk∑n=1Nγ(znk)xn

其中: 

Nk=n=1Nγ(znk)(9)(9)Nk=∑n=1Nγ(znk)

(8)式和(9)式中,NN表示點的數量。γ(znk)γ(znk)表示點nnxnxn)屬於聚類kk的後驗概率。則NkNk可以表示屬於第kk個聚類的點的數量。那麼μkμk表示所有點的加權平均,每個點的權值是Nn=1γ(znk)∑n=1Nγ(znk),跟第kk個聚類有關。

同理求ΣkΣk的最大似然函數,可以得到: 

Σk=1Nkn=1Nγ(znk)(xnμk)(xnμk)T(10)(10)Σk=1Nk∑n=1Nγ(znk)(xn−μk)(xn−μk)T

最後剩下πkπk的最大似然函數。注意到πkπk有限制條件Kk=1πk=1∑k=1Kπk=1,因此我們需要加入拉格朗日算子: 

lnp(x|π,μ,Σ)+λ(k=1Kπk1)ln⁡p(x|π,μ,Σ)+λ(∑k=1Kπk−1)

求上式關於πkπk的最大似然函數,得到: 

0=n=1NN(xn|μk,Σk)jπjN(xn|μj,Σj)+λ(11)(11)0=∑n=1NN(xn|μk,Σk)∑jπjN(xn|μj,Σj)+λ

上式兩邊同乘πkπk,可以得到λ=Nλ=−N,進而可以得到πkπk更簡潔的表達式: 

πk=NkN(12)(12)πk=NkN

EM算法估計GMM參數即最大化(8),(10)和(12)。需要用到(5),(8),(10)和(12)四個公式。我們先指定ππμμΣΣ的初始值,帶入(5)中計算出γ(znk)γ(znk),然後再將γ(znk)γ(znk)帶入(8),(10)和(12),求得πkπkμkμkΣkΣk;接着用求得的πkπkμkμkΣkΣk再帶入(5)得到新的γ(znk)γ(znk),再將更新後的γ(znk)γ(znk)帶入(8),(10)和(12),如此往復,直到算法收斂。

EM算法

  1. 定義分量數目KK,對每個分量kk設置πkπkμkμkΣkΣk的初始值,然後計算(6)式的對數似然函數。
  2. E step 
    根據當前的πkπkμkμkΣkΣk計算後驗概率γ(znk)γ(znk) 
    γ(znk)=πkN(xn|μn,Σn)Kj=1πjN(xn|μj,Σj)γ(znk)=πkN(xn|μn,Σn)∑j=1KπjN(xn|μj,Σj)
  3. M step 
    根據E step中計算的γ(znk)γ(znk)再計算新的πkπkμkμkΣkΣk 
    μnewkΣnewkπnewk=1Nkn=1Nγ(znk)xn=1Nkn=1Nγ(znk)(xnμnewk)(xnμnewk)T=NkNμknew=1Nk∑n=1Nγ(znk)xnΣknew=1Nk∑n=1Nγ(znk)(xn−μknew)(xn−μknew)Tπknew=NkN

    其中: 
    Nk=n=1Nγ(znk)Nk=∑n=1Nγ(znk)
  4. 計算(6)式的對數似然函數 
    lnp(x|π,μ,Σ)=n=1Nln{k=1KπkN(xk|μk,Σk)}ln⁡p(x|π,μ,Σ)=∑n=1Nln⁡{∑k=1KπkN(xk|μk,Σk)}
  5. 檢查參數是否收斂或對數似然函數是否收斂,若不收斂,則返回第2步。

Reference

  1. 漫談 Clustering (3): Gaussian Mixture Model
  2. Draw Gaussian distribution ellipse
  3. Pang-Ning Tan 等, 數據挖掘導論(英文版), 機械工業出版社, 2010
  4. Christopher M. Bishop etc., Pattern Recognition and Machine Learning, Springer, 2006

發佈了7 篇原創文章 · 獲贊 21 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章