相關文章:
機器學習 | 目錄
機器學習 | 聚類評估指標
機器學習 | EM 算法原理
無監督學習 | KMeans與KMeans++原理
無監督學習 | KMeans之Sklearn實現:電影評分聚類
無監督學習 | 層次聚類 之凝聚聚類原理及Sklearn實現
無監督學習 | DBSCAN 原理及Sklearn實現
本文大部分內容搬運自周至華老師的《機器學習》[1]。
1. 高斯混合聚類
與 k 均值 用原型向量來刻畫聚類結構不同,高斯混合(Mixture-of-Gaussian)聚類採用概率模型來表達聚類原型。
我們先簡單回顧下多元高斯(正態)分佈的定義。對 n 維樣本空間 X 中的隨機向量 x,若服從高斯分佈
,其概率密度函數爲:
p(x)=(2π)2n∣Σ∣211e−21(x−μ)TΣ−1(x−μ)(1)
其中 μ 是 n 維均值向量,Σ 是 n×n 的協方差矩陣。由上式可知,高斯分佈完全由均值向量 μ 和協方差矩陣 Σ 這兩個參數確定。爲了明確顯示高斯分佈與相應參數的依賴關係,將概率密度函數記爲 p(x∣μ,Σ)。
1.1 高斯混合分佈
我們可以定義高斯混合分佈
:
pM=αi⋅p(x∣μi,Σi)(2)
該分佈共由 k 個混合成分組成,每個混合成分對應一個高斯分佈。其中 μi 與 Σi 是第 i 個高斯混合成分的參數,而 αi>0 爲對應的“混合係數
”(muxture coefficient),且 ∑i=1kαi=1。
假設樣本的生成過程由高斯混合分佈給出:首先,根據 α1,α2,...,αk 定義的先驗分佈選擇高斯混合成分,其中 αi 爲選擇第 i 個混合成分的概率;然後,根據被選擇的混合成分的概率密度函數進行採樣,從而生成相應的樣本。
若訓練集 D={x1,x2,...,xm} 由上述過程生成,令隨機變量 zj∈{1,2,...,k} 表示生成樣本 xj 的高斯混合成分,其取值未知。顯然,zj 的先驗概率 P(zj=i) 對應於 αi(i=1,2,...,k)。
根據貝葉斯定理,有:
pM(xj,zj=i)=pM(xj)⋅pM(zj=i∣xj)(3)
pM(xj,zj=i)=P(zj=i)⋅pM(xj∣zj=i)(4)
所以 zj 的後驗分佈對應於:
pM(zj=i∣xj)=pM(xj)P(zj=i)⋅pM(xj∣zj=i)=∑l=1kαl⋅p(xj∣μl,Σl)αi⋅p(xj∣μi,Σi)(5)
換言之,pM(zj=i∣xj) 給出了樣本 xj 由第 i 個高斯混合成分生成的後驗概率,爲方便敘述,將其簡記爲 γji(i=1,2,...,k)。
當高斯混合分佈 (2) 已知時,高斯混合聚類將樣本集 D 劃分爲 k 個簇 C={C1,C2,...,Ck},每個樣本 xj 的簇標記 λj 如下確定:
λj=i∈{1,2,…,k}argmaxγji(6)
因此,從原型聚類的角度來看,高斯混合聚類時採用概率模型(高斯分佈)對原型進行刻畫,簇劃分則由原型對應後驗概率確定。
1.2 參數求解
對於高斯混合分佈中的參數 {(αi,μi,Σi)∣1≤i≤k} 的求解,對於給定樣本集 D,可採用極大似然估計,即:
LL(D)=ln(j=1∏mpM(xj))=j=1∑mln(i=1∑kαi⋅p(xj∣μi,Σi))(7)
常採用 EM 算法 進行迭代優化求解。下面我們做一個簡單的推導。
若參數 {(αi,μi,Σi)∣1≤i≤k} 能使式 (7) 最大化,則由 ∂μi∂LL(D)=0、∂Σi∂LL(D)=0 有:
μi=∑j=1mγji∑j=1mγjixj(8)
Σi=∑j=1mγji∑j=1mγji(xj−μi)(xj−μi)T(9)
從式 (8) 可以看出各混合成分的均值 μi 可通過樣本加權平均來估計,樣本權重是每個樣本屬於該成分的後驗概率。
對於混合係數 αi,除了要最大化 LL(D),還要滿足 αi≥0,∑i=1kαi=1。考慮 LL(D) 的拉格朗日形式:
LL(D)+λ(i=1∑kαi−1)(10)
其中 λ 爲拉格朗日乘子。對式 (10) 求 αi 的導數爲 0,有:
j=1∑m∑l=1kαl⋅p(xj∣μl,Σl)p(xj∣μi,Σi)+λ=0(11)
兩邊同乘以 αi ,對所有樣本求和可知 λ=−m,有:
αi=m1j=1∑mγji(12)
即每個高斯成分的混合係數有樣本屬於該成分的平均後驗概率確定。
1.3 EM 算法
由上述推導即可獲得高斯混合模型的 EM 算法:E 步:在每步迭代中,先根據當前參數來計算每個樣本屬於每個高斯成分的後驗概率 γji;M 步:根據式 (8)、(9)、(11) 更新模型參數 {(αi,μi,Σi)∣1≤i≤k}。
高斯混合聚類算法如下圖所示。算法第 1 行對高斯混合分佈的模型參數進行初始化(通常是隨機或使用 KMeans 進行初始化),然後,在第 2-12 行基於 EM 算法對模型參數進行迭代更新。若 EM 算法的停止條件滿足(例如已到達最大迭代輪數,或似然函數 LL(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]:
- n_components:混合高斯模型個數,默認爲1
- covariance_type:協方差類型,包括{‘full’,‘tied’, ‘diag’, ‘spherical’}四種,分別對應完全協方差矩陣(元素都不爲零),相同的完全協方差矩陣(HMM會用到),對角協方差矩陣(非對角爲零,對角不爲零),球面協方差矩陣(非對角爲零,對角完全相同,球面特性),默認‘full’ 完全協方差矩陣
- tol:EM迭代停止閾值,默認爲1e-3.
- reg_covar:協方差對角非負正則化,保證協方差矩陣均爲正,默認爲0
- max_iter:最大迭代次數,默認100
- n_init:初始化次數,用於產生最佳初始參數,默認爲1
- init_params: {‘kmeans’, ‘random’}, defaults to ‘kmeans’.初始化參數實現方式,默認用kmeans實現,也可以選擇隨機產生
- weights_init:各組成模型的先驗權重,可以自己設,默認按照7產生
- means_init:初始化均值,同8
- precisions_init:初始化精確度(模型個數,特徵個數),默認按照7實現
- random_state :隨機數發生器
- warm_start :若爲True,則fit()調用會以上一次fit()的結果作爲初始化參數,適合相同問題多次fit的情況,能加速收斂,默認爲False。
- verbose :使能迭代信息顯示,默認爲0,可以爲1或者大於1(顯示的信息不同)
- 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.