使用mclust進(jìn)行聚類分析

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提供的所有模型奔则。

模型總結(jié)

為了對(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))
BIC曲線

Mclucst會(huì)選擇其中BIC最大的模型和分組作為最終的結(jié)果。

此外我們可以用MclustBICMclustICL分別進(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為例
plot

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)行許可萤悴。

掃碼即刻交流
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市皆的,隨后出現(xiàn)的幾起案子覆履,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件内狗,死亡現(xiàn)場(chǎng)離奇詭異怪嫌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)柳沙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拌倍,“玉大人赂鲤,你說我怎么就攤上這事≈簦” “怎么了数初?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長梗顺。 經(jīng)常有香客問我泡孩,道長,這世上最難降的妖魔是什么寺谤? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任仑鸥,我火速辦了婚禮,結(jié)果婚禮上变屁,老公的妹妹穿的比我還像新娘眼俊。我一直安慰自己,他們只是感情好粟关,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布疮胖。 她就那樣靜靜地躺著,像睡著了一般闷板。 火紅的嫁衣襯著肌膚如雪澎灸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天遮晚,我揣著相機(jī)與錄音性昭,去河邊找鬼。 笑死鹏漆,一個(gè)胖子當(dāng)著我的面吹牛巩梢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播艺玲,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼括蝠,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了饭聚?” 一聲冷哼從身側(cè)響起忌警,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后法绵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體箕速,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年朋譬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盐茎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡徙赢,死狀恐怖字柠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狡赐,我是刑警寧澤窑业,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站枕屉,受9級(jí)特大地震影響常柄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜搀擂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一西潘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧哥倔,春花似錦秸架、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至沃测,卻和暖如春缭黔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蒂破。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國打工馏谨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人附迷。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓惧互,卻偏偏與公主長得像,于是被迫代替她去往敵國和親喇伯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子喊儡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容