一文詳解高斯混合模型原理

達觀資料發表於2017-12-01

文/陳運文 達觀資料CEO

什麼是高斯混合模型(Gaussian Mixture Model)

高斯混合模型(Gaussian Mixture Model)通常簡稱GMM,是一種業界廣泛使用的聚類演算法,該方法使用了高斯分佈作為引數模型,並使用了期望最大(Expectation Maximization,簡稱EM)演算法進行訓練。

本文對該方法的原理進行了通俗易懂的講解,期望讀者能夠更直觀地理解方法原理。文字的最後還分析了高斯混合模型了另一種常見聚類演算法K-means的關係,實際上在特定約束條件下,K-means演算法可以被看作是高斯混合模型(GMM)的一種特殊形式(達觀資料 陳運文)。

1 什麼是高斯分佈?

高斯分佈(Gaussian distribution)有時也被稱為正態分佈(normal distribution),是一種在自然界大量的存在的、最為常見的分佈形式。在提供精確數學定義前,先用一個簡單的例子來說明。

如果我們對大量的人口進行身高資料的隨機取樣,並且將採得的身高資料畫成柱狀圖,將會得到如下圖1所示的圖形。這張圖模擬展示了334個成人的統計資料,可以看出圖中最多出現的身高在180cm左右2.5cm的區間裡。 圖1 由334個人的身高資料構成的正態分佈直方圖

圖1 由334個人的身高資料構成的正態分佈直方圖

這個圖形非常直觀的展示了高斯分佈的形態。接下來看下嚴格的高斯公式定義,高斯分佈的概率密度函式公式如下:

enter image description here

公式中包含兩個引數,引數μ 表示均值,引數 σ表示標準差,均值對應正態分佈的中間位置,在本例中我們可以推測均值在180cm附近。標準差衡量了資料圍繞均值分散的程度。

學過大學高數的同學應該還記得,正態分佈的一個背景知識點是,95%的資料分佈在均值周圍2個標準差的範圍內。本例中大約20到30左右是標準差引數的取值,因為大多數資料都分佈在120cm到240cm之間。

上面的公式是概率密度函式,也就是在已知引數的情況下,輸入變數指x,可以獲得相對應的概率密度。還要注意一件事,就是在實際使用前,概率分佈要先進行歸一化,也就是說曲線下面的面積之和需要為1,這樣才能確保返回的概率密度在允許的取值範圍內。

如果需要計算指定區間內的分佈概率,則可以計算在區間首尾兩個取值之間的面積的大小。另外除了直接計算面積,還可以用更簡便的方法來獲得同樣的結果,就是減去區間x對應的累積密度函式(cumulative density function,CDF)。因為CDF表示的是數值小於等於x的分佈概率。

回到之前的例子來評估下引數和對應的實際資料。假設我們用柱狀線來表示分佈概率,每個柱狀線指相應身高值在334個人中的分佈概率,用每個身高值對應的人數除以總數(334)就可以得到對應概率值,圖2用左側的紅色線(Sample Probability)來表示。

如果我們設定引數μ =180,σ =28,使用累積密度函式來計算對應的概率值——右側綠色線(Model Probability),可以肉眼觀察到模型擬合的精度。

圖2 對給定使用者,身高分佈的取樣概率用紅色柱狀圖表示,高斯模型在引數μ=180,σ=28時計算出的概率用綠色柱狀圖表示

圖2 對給定使用者,身高分佈的取樣概率用紅色柱狀圖表示,高斯模型在引數μ=180,σ=28時計算出的概率用綠色柱狀圖表示

觀察圖2可以看出,剛才我們們猜測的均值引數180和標準差引數28擬合的效果很不錯,雖然可能稍微偏小了一點點。當然我們可以不斷調校引數來擬合得更好些,但是更準確的辦法是通過演算法來生成它們,這個過程就被稱為模型訓練(model training)。最常用的方法是期望最大(EM)演算法,下文會進行詳細講解。

順便一提,取樣的資料和全體資料的分佈多少總是存在一定差異的。這裡首先假設了採集的334個使用者的資料能代表全體人口的身高分佈。另外我們還假定了隱含的資料分佈是高斯分佈,並以此來繪製分佈曲線,並以此為前提預估潛在的分佈情況。如果採集越來越多的資料,通常身高的分佈越來越趨近於高斯(儘管仍然有其他不確定因素),模型訓練的目的就是在這些假設前提下儘可能降低不確定性(達觀資料 陳運文)。

2 期望最大與高斯模型訓練

模型的EM訓練過程,直觀的來講是這樣:我們通過觀察取樣的概率值和模型概率值的接近程度,來判斷一個模型是否擬合良好。然後我們通過調整模型以讓新模型更適配取樣的概率值。反覆迭代這個過程很多次,直到兩個概率值非常接近時,我們停止更新並完成模型訓練。

現在我們要將這個過程用演算法來實現,所使用的方法是模型生成的資料來決定似然值,即通過模型來計算資料的期望值。通過更新引數μ和σ來讓期望值最大化。這個過程可以不斷迭代直到兩次迭代中生成的引數變化非常小為止。該過程和k-means的演算法訓練過程很相似(k-means不斷更新類中心來讓結果最大化),只不過在這裡的高斯模型中,我們需要同時更新兩個引數:分佈的均值和標準差

3 高斯混合模型(GMM)

高斯混合模型是對高斯模型進行簡單的擴充套件,GMM使用多個高斯分佈的組合來刻畫資料分佈。

舉例來說:想象下現在我們們不再考察全部使用者的身高,而是要在模型中同時考慮男性和女性的身高。假定之前的樣本里男女都有,那麼之前所畫的高斯分佈其實是兩個高斯分佈的疊加的結果。相比只使用一個高斯來建模,現在我們可以用兩個(或多個)高斯分佈(陳運文):

enter image description here

該公式和之前的公式非常相似,細節上有幾點差異。首先分佈概率是K個高斯分佈的和,每個高斯分佈有屬於自己的μ和σ 引數,以及對應的權重引數,權重值必須為正數,所有權重的和必須等於1,以確保公式給出數值是合理的概率密度值。換句話說如果我們把該公式對應的輸入空間合併起來,結果將等於1。

回到之前的例子,女性在身高分佈上通常要比男性矮,畫成圖的話如圖3。

圖3 男性和女性身高的概率分佈圖

圖3 男性和女性身高的概率分佈圖

圖3的y-軸所示的概率值,是在已知每個使用者性別的前提下計算出來的。但通常情況下我們並不能掌握這個資訊(也許在採集資料時沒記錄),因此不僅要學出每種分佈的引數,還需要生成性別的劃分情況( \varphi_{i}\varphi_{i} )。當決定期望值時,需要將權重值分別生成男性和女性的相應身高概率值並相加。

注意,雖然現在模型更復雜了,但仍然可使用與之前相同的技術進行模型訓練。在計算期望值時(很可能通過已被混合的資料生成),只需要一個更新引數的最大化期望策略。

4 高斯混合模型的學習例項

前面的簡單例子裡使用了一維高斯模型:即只有一個特徵(身高)。但高斯不僅侷限於一維,很容易將均值擴充套件為向量,標準差擴充套件為協方差矩陣,用n-維高斯分佈來描述多維特徵。接下來的程式清單裡展示了通過scikit-learn的高斯混合模型執行聚類並對結果進行視覺化展示。 enter image description here

在初始化GMM演算法時,傳入了以下引數:

-n_components ——使用者混合的高斯分佈的數量。之前的例子裡是2個 -covariance_type ——約定協方差矩陣的屬性,即高斯分佈的形狀。參考下面文件來具體瞭解:http://scikit-learn.org/stable/modules/mixture.html -n_iter —— EM的迭代執行次數 計算結果如下圖(Iris資料集) -有關make_ellipses ——make_ellipses來源於plot_gmm_classifier方法,作者為scikit-learn的Ron Weiss和Gael Varoquaz。根據協方差矩陣繪製的二維圖形,可以找出方差最大和其次大的座標方向,以及相對應的量級。然後使用這些座標軸將相應的高斯分佈的橢圓圖形繪製出來。這些軸方向和量級分別被稱為特徵向量(eigenvectors)和特徵值(eigenvalues)。

圖4展示了Iris資料集的4-D高斯聚類結果在二維空間上的對映圖

圖4展示了Iris資料集的4-D高斯聚類結果在二維空間上的對映圖

make_ellipses方法概念上很簡單,它將gmm物件(訓練模型)、座標軸、以及x和y座標索引作為引數,執行後基於指定的座標軸繪製出相應的橢圓圖形。

5 k-means和GMM的關係

在特定條件下,k-means和GMM方法可以互相用對方的思想來表達。在k-means中根據距離每個點最接近的類中心來標記該點的類別,這裡存在的假設是每個類簇的尺度接近且特徵的分佈不存在不均勻性。這也解釋了為什麼在使用k-means前對資料進行歸一會有效果。高斯混合模型則不會受到這個約束,因為它對每個類簇分別考察特徵的協方差模型。

K-means演算法可以被視為高斯混合模型(GMM)的一種特殊形式。整體上看,高斯混合模型能提供更強的描述能力,因為聚類時資料點的從屬關係不僅與近鄰相關,還會依賴於類簇的形狀。n維高斯分佈的形狀由每個類簇的協方差來決定。在協方差矩陣上新增特定的約束條件後,可能會通過GMM和k-means得到相同的結果。

實踐中如果每個類簇的協方差矩陣繫結在一起(就是說它們完全相同),並且矩陣對角線上的協方差數值保持相同,其他數值則全部為0,這樣能夠生成具有相同尺寸且形狀為圓形類簇。在此條件下,每個點都始終屬於最近的中間點對應的類。(達觀資料 陳運文)

在k-means方法中使用EM來訓練高斯混合模型時對初始值的設定非常敏感。而對比k-means,GMM方法有更多的初始條件要設定。實踐中不僅初始類中心要指定,而且協方差矩陣和混合權重也要設定。可以執行k-means來生成類中心,並以此作為高斯混合模型的初始條件。由此可見並兩個演算法有相似的處理過程,主要區別在於模型的複雜度不同。

整體來看,所有無監督機器學習演算法都遵循一條簡單的模式:給定一系列資料,訓練出一個能描述這些資料規律的模型(並期望潛在過程能生成資料)。訓練過程通常要反覆迭代,直到無法再優化引數獲得更貼合資料的模型為止。

編者注:

上文選自由達觀研究院編寫而成的《達觀資料技術實踐特刊》,該書集合了當下最熱門的人工智慧領域自然語言處理、個性化推薦、垂直搜尋引擎三大方向的技術實踐總結,融合了達觀技術團隊在服務華為、中興、招行、平安、京東雲等不同行業上百家企業後的技術感悟,是國內第一本系統介紹NLP、深度學習等AI技術實踐應用的電子刊,歡迎各位技術愛好者前往下載

相關文章