混合高斯模型(Mixtures of Gaussians)和EM算法
主要內容:
1、 概率論預備知識
2、 單高斯模型
3、 混合高斯模型
4、 EM算法
5、 K-means聚類算法
一、概率論預備知識
1、 數學期望/均值、方差/標准差
2、 正態分布、協方差
3、 多維高斯(正態)分布
- 概率密度函數PDF定義如下:
二、單高斯模型(Single GaussianModel, SGM)
注意與一維高斯分布不同,其中x是維數為d的樣本向量(列向量),u是模型期望,C是模型方差。
對於單高斯模型,由於可以明確訓練樣本是否屬於該高斯模型(如訓練人臉膚色模型時,將人臉圖像膚色部分分割出來,形成訓練集),故μ通常由訓練樣本均值代替,C由樣本方差代替。為了將高斯分布用於模式分類,假設訓練樣本屬於類別K,那么,式(1)可以改為如下形式:
式(2)表明樣本屬於類別K的概率大小。從而將任意測試樣本輸入式(2),均可以得到一個標量,然后根據閾值t來確定該樣本是否屬於該類別,閾值t可以為經驗值,也可以通過實驗確定,通常意義下,t一般取0.7-0.75.
幾何意義理解:根據單高斯分布pdf的含義,我們可以知道,符合SGM分布的二維點在平面上應該近似橢圓;相應地,三維點在空間中則近似於橢球狀。
二維情況如下所示:
三、混合高斯模型(GaussianMixture Model,GMM)
高斯混合模型是單一高斯概率率密度函數的延伸。例如:有一批觀察數據,數據個數為n,在d 維空間中的分布不是橢球狀,那么就不適合以一個單一的高密度函數來描述這些數據點的概率密度函數。此時我們采用一個變通方案,假設每個點均由一個單高斯分布生成,而這一批數據共由M(明確)個單高斯模型生成,具體某個數據
屬於哪個單高斯模型未知,且每個單高斯模型在混合模型中占的比例
未知,將所有來自不同分布的數據點混在一起,該分布稱為高斯混合分布。
從數學上講,我們認為這些數據的概率分布密度函數可以通過加權函數表示:
其中
表示第j個SGM的PDF。
高斯混合模型(GMM),顧名思義,就是數據可以看作是從數個高斯分布中生成出來的。雖然我們可以用不同的分布來隨意地構造 XX Mixture Model ,但是 GMM是 最為流行。另外,Mixture Model 本身其實也是可以變得任意復雜的,通過增加 Model 的個數,我們可以任意地逼近任何連續的概率密分布。
通常用EM(ExpectationMaximum)算法對GMM參數進行估計。
(1)初始化
(2)估計步驟(E-step)
(3)最大化步驟(M-step)
(4)收斂條件
不斷地迭代步驟(2)和(3),重復更新上面三個值,直到
與k-means作比較:
與k-means一樣,給定的訓練樣本是,我們將隱含類別標簽用
表示。與k-means的硬指定不同,我們首先認為是
滿足一定的概率分布的,這里我們認為滿足多項式分布,
,其中
,有k個值{1,…,k}可以選取。而且我們認為在給定
后,滿足多值高斯分布,即
。由此可以得到聯合分布
。
另一篇博文對GMM的介紹也深入淺出,值得一看,內容如下:
使用期望最大化算法(Expectation-Maximization)來進行密度估計(density estimation)。
與k-means一樣,給定的訓練樣本是,我們將隱含類別標簽用
表示。與k-means的硬指定不同,我們首先認為是
滿足一定的概率分布的,這里我們認為滿足多項式分布,
,其中
,有k個值{1,…,k}可以選取。而且我們認為在給定
后,
滿足多值高斯分布,即
。由此可以得到聯合分布
。
整個模型簡單描述為對於每個樣例,我們先從k個類別中按多項式分布抽取一個
,然后根據所對應的k個多值高斯分布中的一個生成樣例
,。整個過程稱作混合高斯模型。注意的是這里的
仍然是隱含隨機變量。模型中還有三個變量
和
。最大似然估計為
。對數化后如下:
這個式子的最大值是不能通過前面使用的求導數為0的方法解決的,因為求的結果不是close form。但是假設我們知道了每個樣例的
,那么上式可以簡化為:
實際上,當知道后,最大似然估計就近似於高斯判別分析模型(Gaussian discriminant analysis model)了。所不同的是GDA中類別y是伯努利分布,而這里的z是多項式分布,還有這里的每個樣例都有不同的協方差矩陣,而GDA中認為只有一個。
之前我們是假設給定了,實際上是不知道的,那么怎么辦呢?考慮之前提到的EM的思想,第一步是猜測隱含類別變量z,第二步是更新其他參數,以獲得最大的最大似然估計。具體如下:
在E步中,我們將其他參數看作常量,計算
的后驗概率,也就是估計隱含類別變量。估計好后,利用上面的公式重新計算其他參數,計算好后發現最大化最大似然估計時,
值又不對了,需要重新計算,周而復始,直至收斂。
這個式子利用了貝葉斯公式。
這里我們使用代替了前面的,由簡單的0/1值變成了概率值。
對比K-means可以發現,這里使用了“軟”指定,為每個樣例分配的類別是有一定的概率的,同時計算量也變大了,每個樣例i都要計算屬於每一個類別j的概率。與K-means相同的是,結果仍然是局部最優解。對其他參數取不同的初始值進行多次計算不失為一種好方法。
四、EM算法(ExpectationMaximum)
EM的整個推導過程,在這里不細說,詳細參考:
http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html
這篇博文寫得非常詳細,對於理解EM算法很有幫助。
五、 K-means算法
k-means算法是輸入聚類個數k,以及包含 n個數據對象的數據庫,輸出滿足方差最小標准的k個聚類。同一聚類中的對象相似度較高;而不同聚類中的對象相似度較小。聚類相似度是利用各聚類中對象的均值所獲得一個“中心對象”(引力中心)來進行計算的。
k-means算法的基本步驟:
(1)從 n個數據對象任意選擇k個對象作為初始聚類中心;
(2)根據每個聚類對象的均值(中心對象),計算每個對象與這些中心對象的距離;並根據最小距離重新對相應對象進行划分;
(3)重新計算每個(有變化)聚類的均值(中心對象);
(4)計算標准測度函數,當滿足一定條件,如函數收斂時,則算法終止;如果條件不滿足則回到步驟(2)。
六、參考文獻
http://blog.csdn.net/hevc_cjl/article/details/9733945高斯混合模型學習筆記
http://www.cnblogs.com/CBDoctor/archive/2011/11/06/2236286.html 混合高斯模型算法
http://blog.pluskid.org/?p=39 漫談 Clustering (3): Gaussian Mixture Model
http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006924.html混合高斯模型(Mixtures of Gaussians)和EM算法
http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html (EM算法)The EM Algorithm
http://www.cppblog.com/Terrile/archive/2011/01/19/120051.html GMM的C++實現