項目地址: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(x∣ck)P(x∣ck)=2πσk1exp(−2σk2(x−μk)2)∼N(μk,σk)
而數據中又可能是由多個類混合而成,所以數據中特徵的概率密度函數可以使用多個高斯分佈的組合來表示:
P(x)=k=1∑KP(ck)P(x∣ck)=k=1∑KπkN(x∣μk,σk)
其中πk爲類分佈概率,也可看做是各高斯分佈函數的權重係數,也叫做混合係數(mixture coefficient),其滿足∑k=1Kπk=1。
Expectation-Maximization
模型的形式有了,給定一組數據X,我們需要得到一組參數{μ,σ},使得在這組參數下觀測數據X出現的概率最大,即最大似然估計。對於數據中的所有樣本,其出現的概率(似然函數)爲:
i=1∏NP(xi)=i=1∏Nk=1∑KπkN(xi∣μk,σk)
對數似然函數爲:
i=1∑Nln{k=1∑KπkN(xi∣μkσk)}
假設我們現在有了參數{μ,σ},需要計算某個樣本對應的類簇,由貝葉斯公式有:
P(ck∣xi)=P(xi)P(ck,xi)=P(xi)P(xi∣ck)P(ck)=k=1∑KπkN(xi∣μk,σk)πkN(xi∣μk,σk)
可以看出就是一個softmax的形式。同時,有了P(ck∥xi)之後,又可以計算出某個類別的分佈概率與該類別下的統計量:
Nkπkμkσk=i=1∑NP(ck∣xi)=NNk=N1i=1∑NP(ck∣xi)=Nk1i=1∑NP(ck∣xi)xi=Nk1i=1∑NP(ck∣xi)(xi−μk)2
其中Nk爲類別k出現的頻率期望。
以上兩步計算實質上對應了期望最大化(Expectation-Maximization)算法的E步(E-step)跟M步(M-step)。
多維數據時的情況
在多維數據下,需要爲每個類生成一個多維高斯分佈,表示方式與單維情況稍有不同:
N(xi∣μk,Σk)=(2π)n/2Σk1/21exp(−21(xi−μk)TΣk−1(xi−μk))
訓練
有了算法框架,怎麼訓練模型呢。在初始時隨機生成K個高斯分佈,然後不斷地迭代EM算法,直至似然函數變化不再明顯或者達到了最大迭代次數。
E-step
在給定的多維高斯分佈下,計算各樣本屬於各個類別的概率:
P(ck∣xi)=k=1∑KπkP(ck∣xi)πkP(ck∣xi)
M_step
根據概率重新計算更優的高斯參數:
NkπkμkΣk=x=1∑NP(ck∣xi)=NNk=Nk1i=1∑NP(ck∣xi)xi=Nk1i=1∑NP(ck∣xi)(xi−μk)T(xi−μk)
實現指導
完整代碼