mclust
(Model-based clustering) 能夠基于高斯有限混合模型進(jìn)行聚類亩歹,分類以及密度估計(jì)(density estimation)。對(duì)于具有各種協(xié)方差結(jié)構(gòu)的高斯混合模型凡橱,它提供了根據(jù)EM算法的參數(shù)預(yù)測(cè)函數(shù)小作。它也提供了根據(jù)模型進(jìn)行模擬的函數(shù)。還提供了一類函數(shù)献起,整合了基于模型的層次聚類污呼,混合估計(jì)的EM算法汪厨,用于聚類、密度估計(jì)和判別分析中綜合性策略的貝葉斯信息判別標(biāo)準(zhǔn)静秆。最后還有一類函數(shù)能夠?qū)垲悾诸惡兔芏裙烙?jì)結(jié)果中的擬合模型進(jìn)行可視化展示巡李。
簡而言之抚笔,mclust
在R語言上實(shí)現(xiàn)了基于高斯有限混合模型的聚類,分類和密度估計(jì)分析侨拦,并且還有專門的可視化函數(shù)展示分析結(jié)果殊橙。
和
mclust
功能相似的其他R包: 'Rmixmod', 'mixture', 'EMCluster', 'mixtools', 'bgmm', 'flexmix'
安裝和加載
在已有的R語言的基礎(chǔ)上,只需要運(yùn)行如下代碼即可
# 安裝
install.packages("mclust")
# 加載
library(mclust)
聚類實(shí)戰(zhàn)
以一個(gè)例子來介紹一下如何使用mclust
進(jìn)行聚類分析阳谍。我們得要先加載一個(gè)來自于R包'gclus'的數(shù)據(jù)集'wine'蛀柴,該數(shù)據(jù)集有178行,分別是不同區(qū)域的品種葡萄矫夯, 14列鸽疾,其中后13列是化學(xué)分析的測(cè)量值。我們的目標(biāo)是將其進(jìn)行分類训貌。
第一步: 加載數(shù)據(jù)集
install.packages("gclus")
data("wine", package = "gclus")
dim(wine)
第二步 : 使用Mclust
做聚類分析. Mclust
主要功能就是分析當(dāng)前的提供的數(shù)據(jù)是由什么統(tǒng)計(jì)模型
# 第一列和聚類無關(guān)
X <- data.matrix(wine[,-1])
mod <- Mclust(X)
直接在交互行輸入mod
會(huì)得到如下信息
'Mclust' model object: (VVE,3)
Available components:
[1] "call" "data" "modelName"
[4] "n" "d" "G"
[7] "BIC" "bic" "loglik"
[10] "df" "hypvol" "parameters"
[13] "z" "classification" "uncertainty"
這里需要對(duì)結(jié)果稍作解釋制肮,第一行告訴我們'Mclust'以VVE
模型將數(shù)據(jù)分為3類。第3行開始递沪,它告訴我們'Mclust'的輸出結(jié)果中包含了如下內(nèi)容豺鼻,我們可以通過$
來提取。舉個(gè)例子款慨,我們提取Mclust
的聚類結(jié)果和已知結(jié)果進(jìn)行比較
table(wine$Class, mod$classification)
# 如下是輸出信息
1 2 3
1 59 0 0
2 0 69 2
3 0 0 48
# adjustedRandIndex:評(píng)估聚類效果
adjustedRandIndex(wine$Class, mod$classification)
從結(jié)果中儒飒,我們發(fā)現(xiàn)僅有2例沒有正確聚類,說明Mclust
的效果很好檩奠。但是隨之而來的問題是桩了,Mclust
如何挑選模型以及它為什么認(rèn)為聚成3類比較合適呢附帽?我們可以根據(jù)什么信息進(jìn)行模型選擇呢?
模型選擇
為了解答上面的問題井誉,我們需要稍微了解點(diǎn)Mclust
的原理蕉扮。和其他基于模型的方法類似,Mclust
假設(shè)觀測(cè)數(shù)據(jù)是一個(gè)或多個(gè)混合高斯分布的抽樣結(jié)果颗圣,Mclust
就需要根據(jù)現(xiàn)有數(shù)據(jù)去推斷最優(yōu)可能的模型參數(shù)喳钟,以及是由 q幾組分布抽樣而成。mclust
一共提供了14種模型(見下表)在岂,可以用?mclustModelNames
可以查看mclust
提供的所有模型奔则。
為了對(duì)模型有一個(gè)直觀的理解,mclust
提供了這些模型數(shù)據(jù)分為三組前提下在二維中的形狀洁段。
繼續(xù)回到之前的問題应狱,Mclust
如何確定模型和確定分組數(shù)目。之前我們調(diào)用Mclust
時(shí)祠丝,除了必須設(shè)置的輸入?yún)?shù)疾呻,沒有修改其他參數(shù)。其實(shí)Mclust
可以設(shè)置的參數(shù)不少写半,和問題直接相關(guān)的是如下兩個(gè)參數(shù)
- G: 分組數(shù)岸蜗,默認(rèn)情況下是
1:9
- modelNames: 待擬合的模型,默認(rèn)使用所有14種叠蝇。
也就是璃岳,Mclust
默認(rèn)得到14種模型1到9組的分析結(jié)果,然后根據(jù)一定的標(biāo)準(zhǔn)選擇最終的模型和分組數(shù)悔捶。
Mclust
提供了兩種方法用于評(píng)估不同模型在不同分組下的可能性
- BIC( Bayesian Information Criterion ): 貝葉斯信息判別標(biāo)準(zhǔn)
- ICL( integrated complete-data likelihood ): 綜合完全數(shù)據(jù)可能性
Mclust
默認(rèn)用的就是BIC
铃慷,因此我們可以用plot.Mclust
繪制其中BIC變化曲線
plot.Mclust(mod, what = "BIC",
ylim = range(mod$BIC[,-(1:2)], na.rm = TRUE),
legendArgs = list(x = "bottomleft", cex =0.7))
Mclucst
會(huì)選擇其中BIC最大的模型和分組作為最終的結(jié)果。
此外我們可以用MclustBIC
和MclustICL
分別進(jìn)行計(jì)算
par(mfrow=c(1,2))
BIC <- mclustBIC(X)
ICL <- mclustICL(X)
從中選擇最佳的模型分組和模型作為輸入
mod2 <- Mclust(X, G = 3, modelNames = "VVE", x=BIC)
可視化展示
mclust
為不同的輸出都提供了對(duì)應(yīng)的泛型函數(shù)用于可視化蜕该,你需要用plot
就能得到結(jié)果犁柜。例如對(duì)之前的聚類結(jié)果在二維空間展示
drmod <- MclustDR(mod, lambda = 1)
plot(drmod)
# 會(huì)提供一些列選項(xiàng)讓你選擇, 展示不同的結(jié)果
# Dimension reduction for model-based clustering and classification plots:
1: scatterplot
2: contour
3: classification
4: boundaries
5: density
6: evalues
# 以1為例
mclust
還有很多其他功能,例如密度估計(jì)堂淡,自舉推斷(Bootstrap inference)馋缅,這些內(nèi)容建議閱讀"mclust 5: Clustering, Classification and Density Estimation Using Gaussian Finite Mixture Models "
推薦閱讀
想要更好的學(xué)習(xí)這個(gè)R包的使用,還需要去學(xué)習(xí)如下概念
- EM算法( expectation–maximization algorithm )
- BIC
- MLE(maximum likelihood estimator)
版權(quán)聲明:本博客所有文章除特別聲明外绢淀,均采用 知識(shí)共享署名-非商業(yè)性使用-禁止演繹 4.0 國際許可協(xié)議 (CC BY-NC-ND 4.0) 進(jìn)行許可萤悴。