無監督學習 | GMM 高斯混合聚類原理及Sklearn實現


相關文章:

機器學習 | 目錄

機器學習 | 聚類評估指標

機器學習 | EM 算法原理

無監督學習 | KMeans與KMeans++原理

無監督學習 | KMeans之Sklearn實現:電影評分聚類

無監督學習 | 層次聚類 之凝聚聚類原理及Sklearn實現

無監督學習 | DBSCAN 原理及Sklearn實現

本文大部分內容搬運自周至華老師的《機器學習》[1]

1. 高斯混合聚類

kk 均值 用原型向量來刻畫聚類結構不同,高斯混合(Mixture-of-Gaussian)聚類採用概率模型來表達聚類原型

我們先簡單回顧下多元高斯(正態)分佈的定義。對 nn 維樣本空間 X\mathcal{X} 中的隨機向量 xx,若服從高斯分佈,其概率密度函數爲:

p(x)=1(2π)n2Σ12e12(xμ)TΣ1(xμ)(1) p(\boldsymbol{x})=\frac{1}{(2 \pi)^{\frac{n}{2}}|\boldsymbol{\Sigma}|^{\frac{1}{2}}} e^{-\frac{1}{2}(\boldsymbol{x}-\boldsymbol{\mu})^{\mathrm{T}} \boldsymbol{\Sigma}^{-1}(\boldsymbol{x}-\boldsymbol{\mu})} \tag{1}

其中 μ\munn 維均值向量,Σ\Sigman×nn \times n 的協方差矩陣。由上式可知,高斯分佈完全由均值向量 μ\mu 和協方差矩陣 Σ\Sigma 這兩個參數確定。爲了明確顯示高斯分佈與相應參數的依賴關係,將概率密度函數記爲 p(xμ,Σ)p(x|\mu,\Sigma)

1.1 高斯混合分佈

我們可以定義高斯混合分佈

pM=αip(xμi,Σi)(2)p_{\mathcal{M}}= \alpha_i \cdot p(x|\mu_i,\Sigma_i) \tag{2}

該分佈共由 kk 個混合成分組成,每個混合成分對應一個高斯分佈。其中 μi\mu_iΣi\Sigma_i 是第 ii 個高斯混合成分的參數,而 αi>0\alpha_i >0 爲對應的“混合係數”(muxture coefficient),且 i=1kαi=1\sum_{i=1}^k \alpha_i =1

假設樣本的生成過程由高斯混合分佈給出:首先,根據 α1,α2,...,αk\alpha_1,\alpha_2,...,\alpha_k 定義的先驗分佈選擇高斯混合成分,其中 αi\alpha_i 爲選擇第 ii 個混合成分的概率;然後,根據被選擇的混合成分的概率密度函數進行採樣,從而生成相應的樣本。

若訓練集 D={x1,x2,...,xm}D = \{x_1,x_2,...,x_m\} 由上述過程生成,令隨機變量 zj{1,2,...,k}z_j \in \{1,2,...,k\} 表示生成樣本 xjx_j 的高斯混合成分,其取值未知。顯然,zjz_j 的先驗概率 P(zj=i)P(z_j=i) 對應於 αi(i=1,2,...,k)\alpha_i(i=1,2,...,k)

根據貝葉斯定理,有:

pM(xj,zj=i)=pM(xj)pM(zj=ixj)(3)p_{\mathcal{M}}(x_j,z_j=i)=p_{\mathcal{M}}(x_j) \cdot p_{\mathcal{M}}(z_j=i|x_j) \tag{3}

pM(xj,zj=i)=P(zj=i)pM(xjzj=i)(4)p_{\mathcal{M}}(x_j,z_j=i)=P(z_j=i)\cdot p_{\mathcal{M}}(x_j|z_j=i) \tag{4}

所以 zjz_j 的後驗分佈對應於:

pM(zj=ixj)=P(zj=i)pM(xjzj=i)pM(xj)=αip(xjμi,Σi)l=1kαlp(xjμl,Σl)(5) \begin{aligned} p_{\mathcal{M}}\left(z_{j}=i | \boldsymbol{x}_{j}\right) &=\frac{P\left(z_{j}=i\right) \cdot p_{\mathcal{M}}\left(\boldsymbol{x}_{j} | z_{j}=i\right)}{p_{\mathcal{M}}\left(\boldsymbol{x}_{j}\right)} \\ &=\frac{\alpha_{i} \cdot p\left(\boldsymbol{x}_{j} | \boldsymbol{\mu}_{i}, \boldsymbol{\Sigma}_{i}\right)}{\sum_{l=1}^{k} \alpha_{l} \cdot p\left(\boldsymbol{x}_{j} | \boldsymbol{\mu}_{l}, \mathbf{\Sigma}_{l}\right)} \end{aligned} \tag{5}

換言之,pM(zj=ixj)p_{\mathcal{M}}(z_j=i|x_j) 給出了樣本 xjx_j 由第 ii 個高斯混合成分生成的後驗概率,爲方便敘述,將其簡記爲 γji(i=1,2,...,k)\gamma_{ji} (i=1,2,...,k)

當高斯混合分佈 (2) 已知時,高斯混合聚類將樣本集 DD 劃分爲 kk 個簇 C={C1,C2,...,Ck}C=\{C_1,C_2,...,C_k\},每個樣本 xjx_j 的簇標記 λj\lambda_j 如下確定:

λj=argmaxi{1,2,,k}γji(6) \lambda_{j}=\underset{i \in\{1,2, \ldots, k\}}{\arg \max } \gamma_{j i} \tag{6}

因此,從原型聚類的角度來看,高斯混合聚類時採用概率模型(高斯分佈)對原型進行刻畫,簇劃分則由原型對應後驗概率確定。

1.2 參數求解

對於高斯混合分佈中的參數 {(αi,μi,Σi)1ik}\{(\alpha_i,\mu_i,\Sigma_i) | 1\leq i\leq k\} 的求解,對於給定樣本集 DD,可採用極大似然估計,即:

LL(D)=ln(j=1mpM(xj))=j=1mln(i=1kαip(xjμi,Σi))(7) \begin{aligned} L L(D) &=\ln \left(\prod_{j=1}^{m} p_{\mathcal{M}}\left(\boldsymbol{x}_{j}\right)\right) \\ &=\sum_{j=1}^{m} \ln \left(\sum_{i=1}^{k} \alpha_{i} \cdot p\left(\boldsymbol{x}_{j} | \boldsymbol{\mu}_{i}, \mathbf{\Sigma}_{i}\right)\right) \end{aligned} \tag{7}

常採用 EM 算法 進行迭代優化求解。下面我們做一個簡單的推導。

若參數 {(αi,μi,Σi)1ik}\{(\alpha_i,\mu_i,\Sigma_i) | 1\leq i\leq k\} 能使式 (7) 最大化,則由 LL(D)μi=0\frac{\partial L L(D)}{\partial \boldsymbol{\mu}_{i}}=0LL(D)Σi=0\frac{\partial L L(D)}{\partial \boldsymbol{\Sigma}_{i}}=0 有:

μi=j=1mγjixjj=1mγji(8) \boldsymbol{\mu}_{i}=\frac{\sum_{j=1}^{m} \gamma_{j i} \boldsymbol{x}_{j}}{\sum_{j=1}^{m} \gamma_{j i}} \tag{8}

Σi=j=1mγji(xjμi)(xjμi)Tj=1mγji(9) \mathbf{\Sigma}_{i}=\frac{\sum_{j=1}^{m} \gamma_{j i}\left(\boldsymbol{x}_{j}-\boldsymbol{\mu}_{i}\right)\left(\boldsymbol{x}_{j}-\boldsymbol{\mu}_{i}\right)^{\mathrm{T}}}{\sum_{j=1}^{m} \gamma_{j i}} \tag{9}

從式 (8) 可以看出各混合成分的均值 μi\mu_i 可通過樣本加權平均來估計,樣本權重是每個樣本屬於該成分的後驗概率。

對於混合係數 αi\alpha_i,除了要最大化 LL(D)L L(D),還要滿足 αi0,i=1kαi=1\alpha_i \geq 0,\sum_{i=1}^k \alpha_i =1。考慮 LL(D)L L(D) 的拉格朗日形式:

LL(D)+λ(i=1kαi1)(10)L L(D)+\lambda\bigg(\sum_{i=1}^k \alpha_i -1 \bigg) \tag{10}

其中 λ\lambda 爲拉格朗日乘子。對式 (10) 求 αi\alpha_i 的導數爲 0,有:

j=1mp(xjμi,Σi)l=1kαlp(xjμl,Σl)+λ=0(11) \sum_{j=1}^{m} \frac{p\left(\boldsymbol{x}_{j} | \boldsymbol{\mu}_{i}, \mathbf{\Sigma}_{i}\right)}{\sum_{l=1}^{k} \alpha_{l} \cdot p\left(\boldsymbol{x}_{j} | \boldsymbol{\mu}_{l}, \mathbf{\Sigma}_{l}\right)}+\lambda=0 \tag{11}

兩邊同乘以 αi\alpha_i ,對所有樣本求和可知 λ=m\lambda = -m,有:

αi=1mj=1mγji(12)\alpha_i = \frac{1}{m} \sum_{j=1}^m \gamma_{ji} \tag{12}

即每個高斯成分的混合係數有樣本屬於該成分的平均後驗概率確定。


1.3 EM 算法

由上述推導即可獲得高斯混合模型的 EM 算法E 步:在每步迭代中,先根據當前參數來計算每個樣本屬於每個高斯成分的後驗概率 γji\gamma_{ji}M 步:根據式 (8)、(9)、(11) 更新模型參數 {(αi,μi,Σi)1ik}\{(\alpha_i,\mu_i,\Sigma_i) | 1\leq i\leq k\}

高斯混合聚類算法如下圖所示。算法第 1 行對高斯混合分佈的模型參數進行初始化(通常是隨機或使用 KMeans 進行初始化),然後,在第 2-12 行基於 EM 算法對模型參數進行迭代更新。若 EM 算法的停止條件滿足(例如已到達最大迭代輪數,或似然函數 LL(D)L L(D) 增長很少甚至不再增長),則在第 14-17 行根據高斯混合分佈確定簇劃分,在第 18 行返回最終結果。

圖1 高斯混合聚類算法的 EM 算法

2. Sklearn 實現

sklearn.mixture.GaussianMixture(n_components=1, covariance_type=’full’, tol=0.001, reg_covar=1e-06, max_iter=100, n_init=1, init_params=’kmeans’, weights_init=None, means_init=None, precisions_init=None, random_state=None, warm_start=False, verbose=0, verbose_interval=10)

參數 [2]

  1. n_components:混合高斯模型個數,默認爲1
  2. covariance_type:協方差類型,包括{‘full’,‘tied’, ‘diag’, ‘spherical’}四種,分別對應完全協方差矩陣(元素都不爲零),相同的完全協方差矩陣(HMM會用到),對角協方差矩陣(非對角爲零,對角不爲零),球面協方差矩陣(非對角爲零,對角完全相同,球面特性),默認‘full’ 完全協方差矩陣
  3. tol:EM迭代停止閾值,默認爲1e-3.
  4. reg_covar:協方差對角非負正則化,保證協方差矩陣均爲正,默認爲0
  5. max_iter:最大迭代次數,默認100
  6. n_init:初始化次數,用於產生最佳初始參數,默認爲1
  7. init_params: {‘kmeans’, ‘random’}, defaults to ‘kmeans’.初始化參數實現方式,默認用kmeans實現,也可以選擇隨機產生
  8. weights_init:各組成模型的先驗權重,可以自己設,默認按照7產生
  9. means_init:初始化均值,同8
  10. precisions_init:初始化精確度(模型個數,特徵個數),默認按照7實現
  11. random_state :隨機數發生器
  12. warm_start :若爲True,則fit()調用會以上一次fit()的結果作爲初始化參數,適合相同問題多次fit的情況,能加速收斂,默認爲False。
  13. verbose :使能迭代信息顯示,默認爲0,可以爲1或者大於1(顯示的信息不同)
  14. verbose_interval :與13掛鉤,若使能迭代信息顯示,設置多少次迭代後顯示信息,默認10次。

參考文獻

[1] 李航. 統計學習方法[M]. 北京: 清華大學出版社, 2012: 95-96.

[2] QuantumChaos.SKlearn庫EM算法混合高斯模型參數說明及代碼實現[EB/OL].https://blog.csdn.net/lihou1987/article/details/70833229?utm_source=copy, 2017-04-26.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章