聚類(lèi)分析(Cluster Analysis) 是根據“物以類(lèi)聚”的道理,對樣品或指標進(jìn)行分類(lèi)的一種多元統計分析方法,它是在沒(méi)有先驗知識的情況下,對樣本按各自的特性來(lái)進(jìn)行合理的分類(lèi)。
聚類(lèi)分析被應用于很多方面,在商業(yè)上,聚類(lèi)分析被用來(lái)發(fā)現不同的客戶(hù)群,并且通過(guò)購買(mǎi)模式刻畫(huà)不同的客戶(hù)群的特征;在生物上,聚類(lèi)分析被用來(lái)動(dòng)植物分類(lèi)和對基因進(jìn)行分類(lèi),獲取對種群固有結構的認識;在因特網(wǎng)應用上,聚類(lèi)分析被用來(lái)在網(wǎng)上進(jìn)行文檔歸類(lèi)來(lái)修復信息。
聚類(lèi)分析有兩種主要計算方法,分別是凝聚層次聚類(lèi)(Agglomerative hierarchical method)和K均值聚類(lèi)(K-Means)。
一、層次聚類(lèi) 層次聚類(lèi)又稱(chēng)為系統聚類(lèi),首先要定義樣本之間的距離關(guān)系,距離較近的歸為一類(lèi),較遠的則屬于不同的類(lèi)??捎糜诙x“距離”的統計量包括了歐氏距離(euclidean)、馬氏距離(manhattan)、 兩項距離(binary)、明氏距離(minkowski)。還包括相關(guān)系數和夾角余弦。
層次聚類(lèi)首先將每個(gè)樣本單獨作為一類(lèi),然后將不同類(lèi)之間距離最近的進(jìn)行合并,合并后重新計算類(lèi)間距離。這個(gè)過(guò)程一直持續到將所有樣本歸為一類(lèi)為止。在計算類(lèi)間距離時(shí)則有六種不同的方法,分別是最短距離法、最長(cháng)距離法、類(lèi)平均法、重心法、中間距離法、離差平方和法。
下面我們用
iris 數據集來(lái)進(jìn)行聚類(lèi)分析,在R語(yǔ)言中所用到的函數為
hclust 。首先提取iris數據中的4個(gè)數值變量,然后計算其歐氏距離矩陣。然后將矩陣繪制熱圖,從圖中可以看到顏色越深表示樣本間距離越近,大致上可以區分出三到四個(gè)區塊,其樣本之間比較接近。
然后使用hclust函數建立聚類(lèi)模型,結果存在model1變量中,其中ward參數是將類(lèi)間距離計算方法設置為離差平方和法。使用plot(model1)可以繪制出聚類(lèi)樹(shù)圖。如果我們希望將類(lèi)別設為3類(lèi),可以使用cutree函數提取每個(gè)樣本所屬的類(lèi)別。
model1=hclust(dist.e,method='ward')
result=cutree(model1,k=3)
為了顯示聚類(lèi)的效果,我們可以結合多維標度和聚類(lèi)的結果。先將數據用MDS進(jìn)行降維,然后以不同的的形狀表示原本的分類(lèi),用不同的顏色來(lái)表示聚類(lèi)的結果??梢钥吹絪etose品種聚類(lèi)很成功,但有一些virginica品種的花被錯誤和virginica品種聚類(lèi)到一起。
mds=cmdscale(dist.e,k=2,eig=T)
x = mds$points[,1]
y = mds$points[,2]
library(ggplot2)
p=ggplot(data.frame(x,y),aes(x,y))
p+geom_point(size=3,alpha=0.8,
aes(colour=factor(result),
shape=iris$Species))
二、K均值聚類(lèi) K均值聚類(lèi)又稱(chēng)為動(dòng)態(tài)聚類(lèi),它的計算方法較為簡(jiǎn)單,也不需要輸入距離矩陣。首先要指定聚類(lèi)的分類(lèi)個(gè)數N,隨機取N個(gè)樣本作為初始類(lèi)的中心,計算各樣本與類(lèi)中心的距離并進(jìn)行歸類(lèi),所有樣本劃分完成后重新計算類(lèi)中心,重復這個(gè)過(guò)程直到類(lèi)中心不再變化。
在R中使用
kmeans 函數進(jìn)行K均值聚類(lèi),centers參數用來(lái)設置分類(lèi)個(gè)數,nstart參數用來(lái)設置取隨機初始中心的次數,其默認值為1,但取較多的次數可以改善聚類(lèi)效果。model2$cluster可以用來(lái)提取每個(gè)樣本所屬的類(lèi)別。
model2=kmeans(data,centers=3,nstart=10)
使用K均值聚類(lèi)時(shí)需要注意,只有在類(lèi)的平均值被定義的情況下才能使用,還要求事先給出分類(lèi)個(gè)數。一種方法是先用層次聚類(lèi)以決定個(gè)數,再用K均值聚類(lèi)加以改進(jìn)?;蛘咭?
輪廓系數 來(lái)判斷分類(lèi)個(gè)數。改善聚類(lèi)的方法還包括對原始數據進(jìn)行變換,如對數據進(jìn)行降維后再實(shí)施聚類(lèi)。
cluster擴展包中也有許多函數可用于聚類(lèi)分析,如agnes函數可用于凝聚層次聚類(lèi),diana可用于劃分層次聚類(lèi),pam可用于K均值聚類(lèi),fanny用于模糊聚類(lèi)。