【原】基於模型的聚類和R語言中的高斯混合模型
介紹
聚類模型是一個概念,用於表示我們試圖識別的聚類類型。四種最常見的聚類方法模型是層次聚類,k均值聚類,基於模型的聚類和基於密度的聚類
可以基於兩個主要目標評估良好的聚類算法:
高級內相似性
低級間相似性
基於模型的聚類是迭代方法,通過優化聚類中數據集的分佈,將一組數據集擬合到聚類中。高斯分佈只不過是正態分佈。此方法分三步進行:
首先隨機選擇高斯參數並將其擬合到數據點集。
迭代地優化分佈參數以適應儘可能多的點。
一旦收斂到局部最小值,您就可以將數據點分配到更接近該羣集的分佈。
有關高斯混合模型的詳細信息
基於概率模型的聚類技術已被廣泛使用,並且已經在許多應用中顯示出有希望的結果,從圖像分割,手寫識別,文檔聚類,主題建模到信息檢索。基於模型的聚類方法嘗試使用概率方法優化觀察數據與某些數學模型之間的擬合。
生成模型通常使用EM方法求解,EM方法是用於估計有限混合概率密度的參數的最廣泛使用的方法。基於模型的聚類框架提供了處理此方法中的幾個問題的主要方法,例如組件密度(或聚類)的數量,參數的初始值(EM算法需要初始參數值才能開始),以及分量密度的分佈(例如,高斯分佈)。EM以隨機或啓發式初始化開始,然後迭代地使用兩個步驟來解決計算中的循環:
E-Step。使用當前模型參數確定將數據點分配給羣集的預期概率。
M-Step。通過使用分配概率作爲權重來確定每種混合物的最佳模型參數。
R中的建模
mb = Mclust(iris[,-5])
#定義聚類數
mb3 = Mclust(iris[,-5], 3)
# 最優模型
mb$modelName
# 最優聚類數
mb$G
# 每個聚類的概率
head(mb$z)
summary(mb, parameters = TRUE)
table(iris$Species, mb$classification)
# vs
table(iris$Species, mb3$classification)
比較每個羣集中的數據量
在將數據擬合到模型中之後,我們基於聚類結果繪製模型。
讓我們繪製估計的密度。
plot(mb, "density")
您還可以使用該summary()
函數來獲取最可能的模型和最可能數量的集羣。對於此示例,最可能的簇數爲5,BIC值等於-556.1142。
比較聚類方法
在使用不同的聚類方法將數據擬合到聚類中之後,您可能希望測量聚類的準確性。在大多數情況下,您可以使用集羣內或集羣間度量標準作爲度量。集羣間距離越高越好,集羣內距離越低,越好。
接下來,檢索聚類方法的集羣驗證統計信息:
通常,我們專注於使用within.cluster.ss
和avg.silwidth
驗證聚類方法。該within.cluster.ss
測量表示所述簇內總和的平方,和avg.silwidth
表示平均輪廓寬度。
within.cluster.ss
測量顯示了相關對象在羣集中的緊密程度; 值越小,集羣中的對象越緊密。avg.silwidth
是一種度量,它考慮了羣集中相關對象的緊密程度以及羣集之間的分離方式。輪廓值通常爲0到1; 接近1的值表明數據更好地聚類。
k-means和GMM之間的關係
K均值可以表示爲高斯混合模型的特例。通常,高斯混合更具表現力,因爲數據項對羣集的成員資格取決於該羣集的形狀,而不僅僅取決於其接近度。
與k-means一樣,用EM訓練高斯混合模型可能對初始啓動條件非常敏感。如果我們將GMM與k-means進行比較和對比,我們會發現前者的初始條件比後者更多。
結果
每個聚類被建模爲多元高斯分佈,並通過給出以下內容來指定模型:
集羣數量。
每個羣集中所有數據點的分數。
每個聚類的均值和它的d-by-d協方差矩陣。