5. EM算法-高斯混合模型GMM+Lasso


1. EM算法-數學基礎

2. EM算法-原理詳解

3. EM算法-高斯混合模型GMM

4. EM算法-GMM代碼實現

5. EM算法-高斯混合模型+Lasso

1. 前言

前面幾篇博文對EM算法和GMM模型進行了介紹,本文我們通過對GMM增加一個懲罰項。

2. 不帶懲罰項的GMM

原始的GMM的密度函數是

\[p(\boldsymbol{x}|\boldsymbol{\pi},\boldsymbol{\mu},\boldsymbol{\Sigma})=\sum_{k=1}^K\pi_k\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k,\boldsymbol{\Sigma}_k) \]

\[\sum_{k=1}^K\pi_k=1 \]

其中\(K\)是高斯組件的個數,\([\pi_1,\pi_2,...,\pi_k]\)是每個組件的權重。其中的\(\boldsymbol{\mu}_k,\boldsymbol{\Sigma}_k\)是組件\(k\)的均值和協方差矩陣。

log極大似然函數的公式是:

\[L(\theta,\theta^{(j)})=\sum_{k=1}^Kn_k[log\pi_k-\frac{1}{2}(log(\boldsymbol{\Sigma_k})+\frac{{(x_i-\boldsymbol{\mu}_k})^2}{\boldsymbol{\Sigma}_k})]\;\;\;\;\;(1) \]

這里有一個響應度的變量\(\gamma_{ik}\),響應度\(\gamma_{ik}\)代表了第\(i\)個樣本,在第\(k\)個組件上的響應程度。響應度的計算公式也很簡單。

\[\gamma_{ik}=\frac{\pi_k\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k,\boldsymbol{\Sigma}_k)}{\sum_{k=1}^K\pi_k\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k,\boldsymbol{\Sigma}_k)} \]

通過\(L(\theta, \theta^{j})\)\(\mu_k\)\(\Sigma_k\)求偏倒等於0得到

\[\mu_k=\frac{1}{n_k}\sum_{i=1}^N\gamma_{ik}x_i\;\;\;\;\;(2) \]

\[\Sigma_k=\frac{1}{n_k}\sum_{i=1}^N\gamma_{ik}(x_i-\mu_k)^2 \]

\[\pi_k=\frac{n_k}{N} \]

其中的\(n_k=\sum_{i=1}^N\gamma_{ik}\)

到這里為止我們不帶懲罰項的所有變量都計算出來了,只要一直循環E步M步,就能使得loglikelihood最大化。

3. 帶懲罰項的GMM

在帶penality的GMM中,我們假設協方差是一個對角矩陣,這樣的話,我們計算高斯密度函數的時候,只需要把樣本各個維度與對應的\(\mu_k\)\(\sigma_k\)計算一維高斯分布,再相加即可。不需要通過多維高斯進行計算,也不需要協方差矩陣是半正定的要求。

我們給上面的(1)式加入一個懲罰項,

\[\lambda\sum_{k=1}^K\sum_{j=1}^P\frac{|\mu_k-\bar{x}_j|}{s_j} \]

其中的\(P\)是樣本的維度。\(\bar{x}_j\)表示每個維度的平均值,\(s_j\)表示每個維度的標准差。這個penality是一個L1范式,對\(\mu_k\)進行約束。

加入penality后(1)變為

\[L(\theta,\theta^{(j)})=\sum_{k=1}^Kn_k[log\pi_k-\frac{1}{2}(log(\boldsymbol{\Sigma_k})+\frac{{(x_i-\boldsymbol{\mu}_k})^2}{\boldsymbol{\Sigma}_k})] - \lambda\sum_{k=1}^K\sum_{j=1}^P\frac{|\mu_k-\bar{x}_j|}{s_j} \]

這里需要注意的一點是,因為penality有一個絕對值,所以在對\(\mu_k\)求導的時候,需要分情況。於是(2)變成了

\[\mu_k=\frac{1}{n_k}\sum_{i=1}^N\gamma_{ik}x_i \]

\[\mu_k= \left \{\begin{array}{cc} \frac{1}{n_k}(\sum_{i=1}^N\gamma_{ik}x_i - \frac{\lambda\sigma^2}{s_j}), & \mu_k >= \bar{x}_j\\ \frac{1}{n_k}(\sum_{i=1}^N\gamma_{ik}x_i + \frac{\lambda\sigma^2}{s_j}), & \mu_k < \bar{x}_j \end{array}\right. \]

3.1 注意點

  • 在帶有penality的GMM中,如果從一開始迭代時,\(\lambda>0\)那這時loglikelihood很容易陷入一個局部最大值。如果前幾個迭代我們先令\(\lambda=0\),而后在令\(\lambda>0\),這樣能夠尋找到一個比較好的最大值點。
  • 由於在算EM的時候,很容易出現underflow活着overflow,這是我們可以通過一個近似公式來避開這個問題。

\[log(\sum_hexp(a_h)) = m + log(\sum_hexp(a_h - m))\;\;\;m=max(a_h) \]

  • 初始值很影響EM的聚類的結果,所以我們需要改變seed來多次運行程序,尋找導最好的EM結果。

4. 總結

本文對GMM模型進行了改良,加入了L1的penality項,使得\(\mu_k\)不會偏離\(\bar{x}_j\)太大,導致過擬合。下一篇博客通過代碼,詳細的展示這個過程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM