參考url:
https://jakevdp.github.io/PythonDataScienceHandbook/05.12-gaussian-mixtures.html
1、高斯混合模型(GMM)為什么會出現:k-means算法的缺陷
某些點的歸屬簇比其他點的歸屬簇更加明確,比如中間的兩個簇似乎有一小塊區域重合,因此對重合部分的點將被分配到哪個簇不是很有信心,而且k-means模型本身沒有度量簇的分配概率或不確定性的方法。
理解k-means模型的一種方法是:它在每個簇的中心放置了一個圓圈(在更高維空間中是一個超空間),圓圈半徑根據最遠的點與簇中心點的距離算出。這個半徑作為訓練集分配簇的硬切斷(hard cutoff),即在這個圓圈之外的任何點都不是該簇的成員。
k-means有一個重要特征,它要求這些簇的模型必須是圓形:k-means算法沒有內置的方法來實現橢圓形的簇,因此,如果對同樣的數據進行一些轉換,簇的分配就被變得混亂。
這些變形的簇並不是圓形的,因此圓形的簇擬合效果非常糟糕,k-means強行將數據擬合至4個圓形的簇會導致多個圓形的簇混在一起、互相重疊,右下部分尤其明顯。
k-means的兩個缺點(類的形狀缺少靈活形、缺少簇分配的概率),使得它對許多數據集(特別是低維數據集)的擬合效果不盡人意。
高斯混合模型的兩個基本組成部分:
(1)通過比較每個點與所有簇中心點的距離來度量簇分配的不確定性,而不僅僅是關注最近的簇。
(2)通過將簇的邊界由圓形放寬至橢圓形,從而得到非圓形的簇。
2、一般化E-M:高斯混合模型
高斯混合模型(Gaussian mixture model,GMM)試圖找到多維高斯概率分布的混合體,從而獲得任意數據集最好的模型。
由於GMM有一個隱含的概率模型,因此它也可能找到簇分配的概率結果——在Scikit-Learn中用predict_proba方法實現,這個方法返回一個大小為[n_samples,n_clusters]的矩陣,矩陣會給出任意點屬於某個簇的概率。
高斯混合模型本質上和k-means模型非常類似,它們都使用了期望最大化方法,具體實現如下:
(1)選擇初始簇的中心位置和形狀
(2)重復直至收斂
a、期望步驟(E-step):為每個點找到對應每個簇的概率作為權重。
b、最大化步驟(M-step):更新每個簇的位置,將其標准化,並且基於所有數據點的權重來確定形狀
每個簇的結果並不與硬邊緣的空間(hard-edgedsphere)有關,而是通過高斯平滑模型實現。
高斯模型允許使用全協方差(full covariance),即使是於非常扁平的橢圓形的簇,該模型也可以處理。
其中的超參數covariance_type控制了每個簇的形狀自由度,它的默認值是covariance_type='diag',意思是簇在每個維度的尺寸都可以單獨設置,橢圓邊界的主軸與坐標軸平行。
當covariance_type='spherical'時,該模型通過約束簇的形狀,讓所有維度相等,這樣得到的聚類結果和k-means聚類的特征是相似的,但兩者並不完全相同。
當covariance_type='full'時,該模型允許每個簇在任意方向上用橢圓建模。
3、將GMM用作密度估計
雖然GMM通常被歸類為聚類算法,但它本質上是一個密度估計算法,從技術的角度考慮,即一個GMM擬合的結果並不是一個聚類模型,而是描述數據分布的生成概率模型。
GMM是一種非常方便的建模方法,可以為數據估計出任意維度的隨機分布
作為一種生成模型,GMM提供了一種確定數據集最優成分數量的方法:由於生成模型本身就是數據集的概率分布,因此可以利用該模型來評估數據的似然估計,並利用交叉檢驗防止過擬合,糾正過擬合的標准分析方法有赤池信息量准則(Akaike information criterion,AIC)和貝葉斯信息准則(Bayesian information criterion,BIC),用來調整模型的似然估計,這兩種度量准則的計算方法內置在Scikit-Learn的GMM評估器內。
類的最優數量出現在AIC或BIC曲線最小值的位置,最終結果取決於我們更希望使用哪一種近似。
AIC告訴我們,選擇16個成分可能太多,8個~12個成分可能是更好的選擇。
這里需要注意的是:成分數量的選擇度量的是GMM作為一個密度評估器的性能,而不是作為一個聚類算法的性能,建議把GMM當成一個密度評估器,僅在簡單數據集中才將它作為聚類算法使用。