層次聚類分析案例(一)

關(guān)于聚類分析的介紹,可參見本人之前的筆記:聚類分析

案例一:世界銀行樣本數(shù)據(jù)集

創(chuàng)建世界銀行的一個(gè)主要目標(biāo)是對(duì)抗和消除貧困。在這個(gè)不斷發(fā)展的世界中,世界銀行持續(xù)的發(fā)展并精細(xì)地調(diào)整它的政策,已經(jīng)幫助這個(gè)機(jī)構(gòu)逐漸實(shí)現(xiàn)了消除貧困的目標(biāo)。消除貧困的成果以下指標(biāo)的改進(jìn)衡量,這些指標(biāo)包括健康、教育、衛(wèi)生、基礎(chǔ)設(shè)施以及其他需要用于改進(jìn)窮人生活的服務(wù)。與此同時(shí),發(fā)展成果必須保證以一種環(huán)保的、全社會(huì)的、經(jīng)濟(jì)可持續(xù)的方式達(dá)成。

準(zhǔn)備工作

為了進(jìn)行層次聚類,我們需要使用從世界銀行收集的數(shù)據(jù)集。

第1步:收集和描述數(shù)據(jù)

該任務(wù)使用名為WBClust2013的數(shù)據(jù)集。該數(shù)據(jù)以標(biāo)準(zhǔn)格式存儲(chǔ)在名為WBClust2013.csv的CSV格式的文件中。其有80行數(shù)據(jù)和14個(gè)變量。點(diǎn)我獲取數(shù)據(jù)

第一列Country為非數(shù)值型變量,其他列均為數(shù)值型變量。

第2步:探索數(shù)據(jù)

讓我們探索數(shù)據(jù)并理解變量間的關(guān)系。我們通過導(dǎo)入名為WBClust2013.csv的CSV文件開始。存儲(chǔ)數(shù)據(jù)到wbclust數(shù)據(jù)框中:

wbclust = read.csv("ClusteringAnalysis/Practical-Machine-Learning-Cookbook/Chapter03/Data/WBClust2013.csv")

下一步輸出wbclust數(shù)據(jù)框,head()函數(shù)返回wbclust數(shù)據(jù)框。wbclust數(shù)據(jù)框作為一個(gè)輸入?yún)?shù)傳入:

head(wbclust)

結(jié)果如下:


head(wbclust)

第3步:轉(zhuǎn)換數(shù)據(jù)

中心化變量和創(chuàng)建z值是兩個(gè)常見的用于歸一化數(shù)據(jù)的數(shù)據(jù)分析手段。上面提到的數(shù)值型變量需要?jiǎng)?chuàng)建z值。scale()函數(shù)是一個(gè)通用的函數(shù),其默認(rèn)方法中心化并比例縮放一個(gè)數(shù)值化矩陣的列。數(shù)據(jù)框wbclust被傳給該比例函數(shù)。只有數(shù)據(jù)框中數(shù)值化的變量會(huì)被縮放。結(jié)果存儲(chǔ)在wbnorm數(shù)據(jù)框中。

wbnorm = scale(wbclust[,2:13])

head(wbnorm)

結(jié)果如下:


所有的數(shù)據(jù)框都有rownames屬性。rownames()函數(shù)用來獲取或設(shè)置矩陣類變量的行名或列名。數(shù)據(jù)框wbclust以及第一列被傳遞給rownames()函數(shù)。

rownames(wbnorm) = wbclust[,1]

rownames(wbnorm)

調(diào)用rownames(wbnorm)方法顯示第一列的數(shù)值。結(jié)果如下:


第4步:訓(xùn)練并評(píng)估模型效果

下一步是訓(xùn)練模型。首先使用dist()函數(shù)計(jì)算距離矩陣。使用特定的距離度量方法計(jì)算數(shù)據(jù)矩陣行間的距離。使用的距離度量可以是歐式距離、最大距離、曼哈頓距離、堪培拉距離、二進(jìn)制距離,或閔可夫斯基距離。這里的距離度量使用歐式距離。使用歐式距離計(jì)算兩個(gè)向量間的距離為sqrt(sum((x_i-y_i)^2))。結(jié)果被存儲(chǔ)在一個(gè)新的數(shù)據(jù)框dist1中。

dist1 <- dist(wbnorm,method="euclidean")

下一步是使用Ward方法進(jìn)行聚類。hclust()函數(shù)對(duì)一組不同的n個(gè)對(duì)象進(jìn)行聚類分析。第一階段,每個(gè)對(duì)象被指派給它自己的簇。之后每個(gè)階段,算法迭代聚合兩個(gè)最相似的簇。這個(gè)過程不斷持續(xù)直到只剩一個(gè)簇。hclust()函數(shù)要求我們以距離矩陣的形式提供數(shù)據(jù)。dist1數(shù)據(jù)框被作為輸入傳入。默認(rèn)使用全鏈接算法。此外還可以使用不同的聚集方法,包括ward.D、ward.D2、single、complete和average。

cluster1 <- hclust(dist1,method = "ward.D")

cluster1

輸入clust1命令可顯示所使用的聚集方法,計(jì)算距離的方法,以及數(shù)據(jù)對(duì)象的數(shù)量。結(jié)果如下:


第5步:繪制模型

plot()函數(shù)是一個(gè)通用的繪制R語言對(duì)象的函數(shù)。這里plot()函數(shù)用來繪制系統(tǒng)樹圖:

plot(cluster1, labels= wbclust$Country,cex=0.7,
     xlab="",ylab="Distance", main="Clustering for 80 Most Populous Countries")

結(jié)果如下:


rect.hclust()函數(shù)強(qiáng)調(diào)不同的簇,并在系統(tǒng)樹圖的枝干處繪制長方形。系統(tǒng)樹圖首先在某個(gè)等級(jí)上被剪切,之后在選定的枝干上繪制長方形。

clust1對(duì)象以及需要形成的簇的數(shù)量作為輸入變量傳入函數(shù)。

rect.hclust(cluster1,k=5)

結(jié)果如下:


rect.hclust(cluster1,k=12)

cuts()函數(shù)基于期望的簇?cái)?shù)量或者切割高度將樹中的元素切割到不同的簇中。這里,clust1對(duì)象以及需要形成的簇的數(shù)量作為輸入變量傳入函數(shù)。

cuts = cutree(cluster1,k=5)
cuts

結(jié)果如下:


得到每個(gè)簇的國家列表:

for (i in 1:5){
  print(paste("Countries in Cluster ",i))
  print(wbclust$Country[cuts==i])
  print(" ")
}

結(jié)果如下:


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容