簡介
聚類分析用于識(shí)別并集中多元數(shù)據(jù)中相似的對(duì)象,觀測值(或個(gè)體)之間的相似性是通過一些距離度量來定義的,包括歐幾里得距離度量和基于相關(guān)關(guān)系的距離度量。聚類方法分為以k-means為代表的分區(qū)聚類(Partitioning clustering)和層次聚類兩種。
用途
將目標(biāo)劃分為相似群體
尋找離群的異常表現(xiàn)個(gè)體
將大量高緯度數(shù)據(jù)簡單化
總的來說,聚類在利用較少的分組來代表各種不同的數(shù)據(jù)中具有非常好的作用。它產(chǎn)生了有意義和可操作的數(shù)據(jù)結(jié)構(gòu),減少了數(shù)據(jù)復(fù)雜性,并為數(shù)據(jù)關(guān)系模式的探索提供方向。
數(shù)據(jù)準(zhǔn)備
數(shù)據(jù)樣式為一般長格式數(shù)據(jù),即行為觀測個(gè)體、列為具體觀測值。
距離計(jì)算
一般情況下,常用的距離算法是歐氏距離Euclidean distance,R語言dist()函數(shù)調(diào)用的默認(rèn)計(jì)算方式也是歐式距離,當(dāng)然還有Squared Euclidean distance、Manhattan distance、Maximum distance、Mahalanobis distance等和適合非數(shù)字型數(shù)據(jù)的Hamming distance 或Levenshtein distance 也是常用的距離計(jì)算方式。
不僅如此,也可以用相關(guān)距離如:皮爾森相關(guān)距離(Pearson correlation distance)、艾森余弦相關(guān)距離(Eisen cosine correlation distance)、斯皮爾曼相關(guān)距離(Spearman correlation distance)和肯德爾相關(guān)距離(Kendall correlation distance)進(jìn)行聚類分析(常用于基因表達(dá)矩陣)。
R語言實(shí)現(xiàn)
CRAN Task View包含了用于數(shù)據(jù)中搜尋分組信息、建模和可視化的常用包。dist()函數(shù)時(shí)最常用的距離計(jì)算函數(shù);daisy()函數(shù)可以用于計(jì)算非數(shù)值型的觀測值間的距離,此時(shí)高爾系數(shù)將自動(dòng)用作距離度量。factoextra包用于聚類結(jié)果提取和可視化。dendextend包用于兩種系統(tǒng)樹圖的比較。philentropy包和distance函數(shù)實(shí)現(xiàn)了46個(gè)不同距離算法和相似性度量,主要包括了2種度量的計(jì)算方法:距離度量和信息度量。通過不同數(shù)據(jù)的相似度比較,為聚類、分類、統(tǒng)計(jì)推斷、擬合優(yōu)度、非參數(shù)統(tǒng)計(jì)、信息理論和機(jī)器學(xué)習(xí)提供了核心的計(jì)算框架,支持基于單變量或者多變量的概率函數(shù)的計(jì)算。
其他包:NbClust、fpc、vegan: 種群生態(tài)學(xué)數(shù)據(jù)常用包、apcluster:吸引力傳播聚類是一種基于數(shù)據(jù)點(diǎn)之間的“信息傳遞”的聚類算法。與k-means等其它聚類算法不同的是,AP不需要在聚類前確定或估計(jì)類的個(gè)數(shù),廣泛應(yīng)用于計(jì)算機(jī)視覺和計(jì)算生物學(xué)領(lǐng)域。pvclust:層次聚類
K-means 聚類
k-means聚類算法可能是最常用的聚類方法,也是許多更復(fù)雜的聚類技術(shù)的基礎(chǔ),只有好好了解了K-means聚類算法,才能更好的理解其他復(fù)雜的聚類技術(shù)。
k均值聚類算法(k-means clustering algorithm)是一種迭代求解的聚類分析算法,其步驟是,預(yù)將數(shù)據(jù)分為K組,則隨機(jī)選取K個(gè)對(duì)象作為初始的聚類中心,然后計(jì)算每個(gè)對(duì)象與各個(gè)種子聚類中心之間的距離,把每個(gè)對(duì)象分配給距離它最近的聚類中心,也就是調(diào)整集群邊界,從而更新分配。更新和分配的過程會(huì)發(fā)生多次,直到更改不再改善集群的適合性。此時(shí),流程停止,聚類完成。
R語言實(shí)現(xiàn)
1. 估計(jì)聚類的最優(yōu)數(shù)量K
NbClust包中NbClust()函數(shù):通過指定最大聚類數(shù)量和最小聚類數(shù)量后,NbClust()將運(yùn)行一系列距離診斷進(jìn)程,最終通過適合度投票的形式確定最佳聚類數(shù)量。其輸出結(jié)果包括集群數(shù)目和相應(yīng)的票數(shù)柱狀圖和elbow 圖(突出“手肘”點(diǎn)就是最佳分組數(shù)目)。
fpc包中的pamk()函數(shù):利用分組間的最小差異作為決定因素,找到最佳聚類數(shù)量。
vegan包中的cascadeKM()函數(shù):首先指定可能的分組數(shù)量,通過迭代指定的次數(shù)后評(píng)估不同分組數(shù)量間的差異,獲得熱圖和calinski criterion圖診斷結(jié)果。
mclust包中的Mclust()函數(shù):根據(jù)數(shù)據(jù)中的貝葉斯信息準(zhǔn)則(BIC)進(jìn)行分組數(shù)目確定。指定分組范圍后,該函數(shù)最終輸出BIC和分組數(shù)據(jù)圖(最低點(diǎn)為最適組數(shù))、各組分相關(guān)性圖和密度圖,當(dāng)然可以用summary()函數(shù)直接顯示檢測結(jié)果,并根據(jù)最小BIC(Clustering table中的數(shù)值)確定最佳分組數(shù)量。
apcluster包,由于AP不需要在聚類前確定或估計(jì)分組個(gè)數(shù),所以完全可以利用它來找到適合的分組數(shù)目。
cluster中的clusGap()函數(shù):通過計(jì)算分組值的聚類優(yōu)度度量或差距統(tǒng)計(jì)值,報(bào)告最佳分組數(shù)目結(jié)果。以logW和E.logW的差值(gap)為y軸,分組數(shù)量為x軸,SE.sim (Standard Error)即可作帶bar的折線圖,其中最高gap所在的x軸為最佳分組數(shù)量。
2.聚類
kmeans(x, centers, iter.max = 10, nstart = 1,
algorithm = c("Hartigan-Wong", "Lloyd", "Forgy",
"MacQueen"), trace=FALSE)
# nstart 表示初始隨機(jī)分配數(shù)量,最好設(shè)定較高(25-50),利于找到穩(wěn)定結(jié)果。
3.可視化
fviz_cluster()簡易一步可視化函數(shù)。
4. 優(yōu)缺點(diǎn)
需要提前知道K值
對(duì)離群值敏感
對(duì)初始隨機(jī)分配中心敏感
數(shù)據(jù)順序也可能影響結(jié)果
K-Medoids
均值的使用意味著k-means聚類對(duì)異常值非常敏感,但PAM算法提供了一種更穩(wěn)健的解決方式。
pam()cluster{},用法基本與K-means相同。
層次聚類(Hierarchical Clustering)
層次聚類是一種將數(shù)據(jù)中相似的觀測值排列聚集到一起的非參數(shù)方式,是k-means聚類的另一種方法,它不需要我們像k-means方法那樣預(yù)先指定要生成的集群的數(shù)量。以非參的方式進(jìn)行聚類,然后利用樹狀圖展示聚類結(jié)果,以便發(fā)現(xiàn)其中存在的離群值或分組模式。
層次聚類的層次法(Hierarchical methods)先計(jì)算樣本之間的距離,每次將距離最近的點(diǎn)合并到同一個(gè)類。然后再計(jì)算類與類之間的距離,將距離最近的類合并為一個(gè)大類。不停的合并,直到合成了一個(gè)類。其中類與類的距離的計(jì)算方法有:最短距離法,最長距離法,中間距離法,類平均法等。據(jù)層次分解的順序可以分成自下向上和自上向下兩種,自下而上法(Agglomerative)就是一開始每個(gè)個(gè)體(object)都是一個(gè)類,然后根據(jù)距離尋找同類,逐級(jí)向上合并,最后形成一個(gè)類群。自上而下法就是反過來,一開始所有個(gè)體都屬于一個(gè)類群,然后根據(jù)距離關(guān)系排除異己,逐級(jí)向下分開,最后每個(gè)個(gè)體都成為一個(gè)類。
層次聚類方法
比較常用的聚類的方法叫做agglomerative hierarchical clustering(自下而上)的聚類,描述起來比較簡單,但是計(jì)算復(fù)雜度比較高,為了尋找距離最近/遠(yuǎn)和均值,都需要對(duì)所有的距離計(jì)算個(gè)遍,需要用到雙重循環(huán)。
單連接聚合(single-linkage)聚類—取兩個(gè)類中距離最近的兩個(gè)樣本的距離作為這兩個(gè)集合的距離,最后會(huì)得到比較松散的聚類簇 。
完全連接聚合(complete-linkage)聚類 — 是 Single Linkage 的反面極端,取兩個(gè)集合中距離最遠(yuǎn)的兩個(gè)點(diǎn)的距離作為兩個(gè)集合的距離,因此有的簇本來可以是一類,但由于極端點(diǎn)造成他們無法合并,傾向于找到緊湊的分組。
平均聚合聚類 — 取類之間的距離的平均值或中值,分為:使用算術(shù)平均的非權(quán)重成對(duì)組法(UPGMA)、使用質(zhì)心的非權(quán)重成對(duì)組法(UPGMC)、使用算術(shù)平均的權(quán)重成對(duì)組法(WPGMA)、使用質(zhì)心的權(quán)重成對(duì)組法(WPGMC);
Centroid linkage clustering:它計(jì)算簇1的質(zhì)心(長度p變量的平均向量)和簇2的質(zhì)心之間的差異。
Ward最小方差聚類 — ,分組的依據(jù)是使組內(nèi)平方和(即方差分析的方差)最小化,旨在找到緊湊的球形分組。
R語言實(shí)現(xiàn)
這個(gè)CRAN Task View包含了用于數(shù)據(jù)中搜尋分組信息、建模和可視化的常用包。factoextra包用于聚類結(jié)果提取和可視化。dendextend包用于兩種系統(tǒng)樹圖的比較。philentropy包和distance函數(shù)實(shí)現(xiàn)了46個(gè)不同距離算法和相似性度量,主要包括了2種度量的計(jì)算方法:距離度量和信息度量。通過不同數(shù)據(jù)的相似度比較,為聚類、分類、統(tǒng)計(jì)推斷、擬合優(yōu)度、非參數(shù)統(tǒng)計(jì)、信息理論和機(jī)器學(xué)習(xí)提供了核心的計(jì)算框架,支持基于單變量或者多變量的概率函數(shù)的計(jì)算。pvclust是R中比較流行的層次聚類包。
在R中調(diào)用hclust()函數(shù),修改method就可以完成大多數(shù)的聚類工作;而plot函數(shù)又能很好的對(duì)輸出結(jié)果進(jìn)行可視化。
hclust(d, method = "complete", members = NULL)
plot(x, labels = NULL, hang = 0.1, check = TRUE,
axes = TRUE, frame.plot = FALSE, ann = TRUE,
main = "Cluster Dendrogram",
sub = NULL, xlab = NULL, ylab = "Height", ...)
如果想用其他包進(jìn)行可視化,那么hclust {stats}生成的描述聚類的過程的hclust對(duì)象可以轉(zhuǎn)化為嵌套list的dendrogram對(duì)象,可以用ape::as.phylo()轉(zhuǎn)化為phylo對(duì)象,然后用ggtree進(jìn)行g(shù)gplot2類型的可視化。
模型評(píng)估
層次聚類后的數(shù)據(jù)用plot或ggtree進(jìn)行聚類樹展示,我們即可直觀地觀測樣本分布及各樣本中個(gè)體間的整體差異。但面對(duì)眾多的聚類方法,我們就需要通過模型評(píng)估來選擇一個(gè)最具代表性的聚類結(jié)果。
philentropy包和distance函數(shù)實(shí)現(xiàn)了46個(gè)不同距離算法和相似性度量,主要包括了2種度量的計(jì)算方法:距離度量和信息度量。通過不同數(shù)據(jù)的相似度比較,為聚類、分類、統(tǒng)計(jì)推斷、擬合優(yōu)度、非參數(shù)統(tǒng)計(jì)、信息理論和機(jī)器學(xué)習(xí)提供了核心的計(jì)算框架,支持基于單變量或者多變量的概率函數(shù)的計(jì)算。
1. 共軸距離相關(guān)
任意兩個(gè)對(duì)象,在聚類樹上從一個(gè)對(duì)象向上走,到達(dá)與另一個(gè)對(duì)象交匯點(diǎn)向下走,勢(shì)必會(huì)到達(dá)第二個(gè)對(duì)象,交匯點(diǎn)所在的層次水平即是兩個(gè)對(duì)象共軸距離。聚類后的兩個(gè)觀測值之間的共軸距離被定義為兩個(gè)觀測值首次合并成單個(gè)聚類時(shí)的組間差異??梢哉J(rèn)為,如果原始距離與共軸距離之間的相關(guān)性很高,則該樹狀圖是是比較適合聚類模型。
可通過cophenetic()獲取聚類樹中兩兩對(duì)象間的共軸距離矩陣,然后利用cor()函數(shù)計(jì)算共軸距離矩陣和原始距離矩陣相關(guān)系數(shù)(pearson)。
2. Gower距離
Gower距離等于原始距離與共軸距離之間差值的平方和。一般來講,具有最小Gower距離的聚類方法也可視為最具代表原始距離的聚類模型。
gow_asingle <- sum((dis_matrix - clust_matrix)^2)
?
# philentropy
參考文獻(xiàn)
R for Data Science - Learn and explore the fundamentals of data science with R by - Dan Toomey
Practical Guide To Cluster Analysis in R - Unsupervised Machine Learning by - Alboukadel Kassambara