高斯混合模型Gaussian Mixture Models

項目地址:https://github.com/Daya-Jin/ML_for_learner/blob/master/mixture/GaussianMixture.ipynb
原博客:https://daya-jin.github.io/2019/03/15/Gaussian_Mixture_Models/

算法概述

高斯混合模型(Gaussian Mixture Models)是一種無監督聚類模型。GMM認爲不同類別的特徵密度函數是不一樣的(實際上也不一樣),GMM爲每個類別下的特徵分佈都假設了一個服從高斯分佈的概率密度函數:

P(xck)=12πσkexp((xμk)22σk2)P(xck)N(μk,σk) \begin{aligned} P(x|c_{k})&=\frac{1}{\sqrt{2\pi}\sigma_{k}}exp(-\frac{(x-\mu_{k})^{2}}{2\sigma_{k}^2}) \\ P(x|c_{k})&{\sim}N(\mu_{k},\sigma_{k}) \\ \end{aligned}

而數據中又可能是由多個類混合而成,所以數據中特徵的概率密度函數可以使用多個高斯分佈的組合來表示:

P(x)=k=1KP(ck)P(xck)=k=1KπkN(xμk,σk) \begin{aligned} P(x)&=\sum\limits_{k=1}^{K}P(c_{k})P(x|c_{k}) \\ &=\sum\limits_{k=1}^{K}\pi_{k}N(x|\mu_{k},\sigma_{k}) \\ \end{aligned}

其中πk\pi_{k}爲類分佈概率,也可看做是各高斯分佈函數的權重係數,也叫做混合係數(mixture coefficient),其滿足k=1Kπk=1\sum_{k=1}^{K}\pi_{k}=1

Expectation-Maximization

模型的形式有了,給定一組數據XX,我們需要得到一組參數{μ,σ}\{\mu,\sigma\},使得在這組參數下觀測數據XX出現的概率最大,即最大似然估計。對於數據中的所有樣本,其出現的概率(似然函數)爲:

i=1NP(xi)=i=1Nk=1KπkN(xiμk,σk) \prod\limits_{i=1}^{N}P(x_{i})=\prod\limits_{i=1}^{N}\sum\limits_{k=1}^{K}\pi_{k}N(x_{i}|\mu_{k},\sigma_{k})

對數似然函數爲:

i=1Nln{k=1KπkN(xiμkσk)} \sum\limits_{i=1}^{N}\ln\{\sum\limits_{k=1}^{K}\pi_{k}N(x_{i}|\mu_{k}\sigma_{k})\}

假設我們現在有了參數{μ,σ}\{\mu,\sigma\},需要計算某個樣本對應的類簇,由貝葉斯公式有:

P(ckxi)=P(ck,xi)P(xi)=P(xick)P(ck)P(xi)=πkN(xiμk,σk)k=1KπkN(xiμk,σk) \begin{aligned} P(c_{k}|x_{i})&=\frac{P(c_{k},x_{i})}{P(x_{i})} \\ &=\frac{P(x_{i}|c_{k})P(c_{k})}{P(x_{i})} \\ &=\frac{\pi_{k}N(x_{i}|\mu_{k},\sigma_{k})}{\sum\limits_{k=1}^{K}\pi_{k}N(x_{i}|\mu_{k},\sigma_{k})} \end{aligned}

可以看出就是一個softmax的形式。同時,有了P(ckxi)P(c_{k}\|x_{i})之後,又可以計算出某個類別的分佈概率與該類別下的統計量:

Nk=i=1NP(ckxi)πk=NkN=1Ni=1NP(ckxi)μk=1Nki=1NP(ckxi)xiσk=1Nki=1NP(ckxi)(xiμk)2\begin{aligned} N_{k}&=\sum\limits_{i=1}^{N}P(c_{k}|x_{i}) \\ \pi_{k}&=\frac{N_{k}}{N}=\frac{1}{N}\sum\limits_{i=1}^{N}P(c_{k}|x_{i}) \\ \mu_{k}&=\frac{1}{N_{k}}\sum\limits_{i=1}^{N}P(c_{k}|x_{i})x_{i} \\ \sigma_{k}&=\sqrt{\frac{1}{N_{k}}\sum\limits_{i=1}^{N}P(c_{k}|x_{i})(x_{i}-\mu_{k})^{2}} \\ \end{aligned}

其中NkN_{k}爲類別kk出現的頻率期望。

以上兩步計算實質上對應了期望最大化(Expectation-Maximization)算法的E步(E-step)跟M步(M-step)。

多維數據時的情況

在多維數據下,需要爲每個類生成一個多維高斯分佈,表示方式與單維情況稍有不同:

N(xiμk,Σk)=1(2π)n/2Σk1/2exp(12(xiμk)TΣk1(xiμk)) N(x_{i}|\mu_{k},\Sigma_{k})=\frac{1}{(2\pi)^{n/2}\Sigma_{k}^{1/2}}exp(-\frac{1}{2}(x_{i}-\mu_{k})^{T}\Sigma_{k}^{-1}(x_{i}-\mu_{k}))

訓練

有了算法框架,怎麼訓練模型呢。在初始時隨機生成KK個高斯分佈,然後不斷地迭代EM算法,直至似然函數變化不再明顯或者達到了最大迭代次數。

E-step

在給定的多維高斯分佈下,計算各樣本屬於各個類別的概率:

P(ckxi)=πkP(ckxi)k=1KπkP(ckxi) P(c_{k}|x_{i})=\frac{\pi_{k}P(c_{k}|x_{i})}{\sum\limits_{k=1}^{K}\pi_{k}P(c_{k}|x_{i})}

M_step

根據概率重新計算更優的高斯參數:

Nk=x=1NP(ckxi)πk=NkNμk=1Nki=1NP(ckxi)xiΣk=1Nki=1NP(ckxi)(xiμk)T(xiμk) \begin{aligned} N_{k}&=\sum\limits_{x=1}^{N}P(c_{k}|x_{i}) \\ \pi_{k}&=\frac{N_{k}}{N} \\ \mu_{k}&=\frac{1}{N_{k}}\sum\limits_{i=1}^{N}P(c_{k}|x_{i})x_{i} \\ \Sigma_{k}&=\frac{1}{N_{k}}\sum\limits_{i=1}^{N}P(c_{k}|x_{i})(x_{i}-\mu_{k})^{T}(x_{i}-\mu_{k}) \\ \end{aligned}

實現指導

完整代碼

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