聚类分析1:层次聚类
聚類分析是一種數(shù)據(jù)歸約技術(shù),旨在揭露一個(gè)數(shù)據(jù)集中觀測(cè)值的子集。它可以把大量的觀測(cè)值歸約為若干個(gè)類,而事先并不知道類別的個(gè)數(shù)與結(jié)構(gòu)。 最常用的兩種聚類方法是層次聚類(hierarchical agglomerative clustering)和劃分聚類(partitioning clustering)。在層次聚類中,每一個(gè)觀測(cè)值自成一類,這些類每次兩兩合并,直到所有的類被聚成一類為止。在劃分聚類中,首先指定類的個(gè)數(shù)K,然后觀測(cè)值被隨機(jī)分成K類,再重新形成聚合的類。
對(duì)于層次聚類來(lái)說(shuō),最常用的算法是單聯(lián)動(dòng)(single linkage)、全聯(lián)動(dòng)(complete linkage )、平均聯(lián)動(dòng)(average linkage) 、質(zhì)心(centroid)和Ward方法。
| 聚類方法? | 兩類之間的距離定義 |
| 單聯(lián)動(dòng) | 一個(gè)類中的點(diǎn)和另一個(gè)類中的點(diǎn)的最小距離 |
| 全聯(lián)動(dòng) | 一個(gè)類中的點(diǎn)和另一個(gè)類中的點(diǎn)的最大距離 |
| 平均聯(lián)動(dòng) | 一個(gè)類中的點(diǎn)和另一個(gè)類中的點(diǎn)的平均距離(也稱作UPGMA,即非加權(quán)對(duì)組平均) |
| 質(zhì)心 | 兩類中質(zhì)心(變量均值向量)之間的距離。對(duì)單個(gè)的觀測(cè)值來(lái)說(shuō),質(zhì)心就是變量的值 |
| Ward法 | 兩個(gè)類之間所有變量的方差分析的平方和 |
層次聚類方法可以用hclust()函數(shù)來(lái)實(shí)現(xiàn),格式是hclust(d, method=),其中d是通過(guò)dist() 函 數(shù) 產(chǎn) 生 的 距 離 矩 陣 , 并 且 方 法 包 括 "single" 、 "complete" 、 "average" 、"centroid"和"ward"。
對(duì)于劃分聚類來(lái)說(shuō),最常用的算法是K均值(K-means)和圍繞中心點(diǎn)的劃分(PAM)。
聚類分析的一般步驟:
(1):選擇合適的變量。第一(并且可能是最重要的)步是選擇你感覺可能對(duì)識(shí)別和理解數(shù)據(jù)中不同觀測(cè)值分組有重要影響的變量。高級(jí)的聚類方法也不能彌補(bǔ)聚類變量選不好的問(wèn)題。
(2):縮放數(shù)據(jù)。如果我們?cè)诜治鲋羞x擇的變量變化范圍很大,那么該變量對(duì)結(jié)果的影響也是最大的。這往往是不可取的,分析師往往在分析之前縮放數(shù)據(jù)。最常用的方法(scale函數(shù))是將每個(gè)變量標(biāo)準(zhǔn)化為均值為0和標(biāo)準(zhǔn)差為1的變量。
(3):尋找異常點(diǎn)。?許多聚類方法對(duì)于異常值是十分敏感的。可以通過(guò)outliers包中的函數(shù)來(lái)篩選(和刪除)異常單變量離群點(diǎn)。?
(4):計(jì)算距離. 盡管不同的聚類算法差異很大,但是它們通常需要計(jì)算被聚類的實(shí)體之間的距離。兩個(gè)觀測(cè)值之間最常用的距離量度是歐幾里得距離 !
(5):?選擇聚類算法。層次聚類對(duì)于小樣本來(lái)說(shuō)很實(shí)用(如150個(gè)觀測(cè)值或更少),而且這種情況下嵌套聚類更實(shí)用。劃分的方法能處理更大的數(shù)據(jù)量,但是需要事先確定聚類的個(gè)數(shù)。一旦選定了層次方法或劃分方法,就必須選擇一個(gè)特定的聚類算法。這里再次強(qiáng)調(diào)每個(gè)算法都有優(yōu)點(diǎn)和缺點(diǎn)。可以嘗試多種算法來(lái)看看相應(yīng)結(jié)果的穩(wěn)健性。
(6):獲得一種或多種聚類方法。?
(7):確定類的數(shù)目。 常用的是在NbClust包中的NbClust()函數(shù)
(8):獲得最終的聚類解決方案。
(9):結(jié)果可視化
(10):解讀類
(11):驗(yàn)證結(jié)果
計(jì)算距離:
查看在flexclust包中的營(yíng)養(yǎng)數(shù)據(jù)集,它包括對(duì)27種肉、魚和禽的營(yíng)養(yǎng)物質(zhì)的測(cè)量。最初的幾個(gè)觀測(cè)值由下面的代碼給出:
?觀測(cè)值之間的距離越大,異質(zhì)性越大。
例1:營(yíng)養(yǎng)數(shù)據(jù)的平均聯(lián)動(dòng)聚類
data(nutrient, package="flexclust") head(nutrient)energy protein fat calcium iron beef braised 340 20 28 9 2.6 hamburger 245 21 17 9 2.7 beef roast 420 15 39 7 2.0 beef steak 375 19 32 9 2.6 beef canned 180 22 10 17 3.7 chicken broiled 115 20 3 8 1.4 row.names(nutrient) <- tolower(row.names(nutrient)) nutrient.scaled <- scale(nutrient) # 什么情況下歸一化處理? #nutrient.scaled 是矩陣 d <- dist(nutrient.scaled) #注意:d是下三角矩陣;class(d):dist fit.average <- hclust(d, method="average") fit.average Call: hclust(d = d, method = "average")Cluster method : average Distance : euclidean Number of objects: 27 plot(fit.average, hang=-1, cex=.8, main="Average Linkage Clustering")#hang=-1表示將觀測(cè)值標(biāo)簽掛在0下面
?
樹狀圖應(yīng)該從下往上讀,它展示了這些條目如何被結(jié)合成類。每個(gè)觀測(cè)值起初自成一類,然后相距最近的兩類(beef braised和smoked ham)合并。其次, pork roast和pork simmered合并,chicken canned和tuna canned合并。 再次, beef braised/smoked ham這一類和pork roast/pork simmered這一類合并(這個(gè)類目前包含四種食品)。合并繼續(xù)進(jìn)行下去,直到所有的觀測(cè)值合并成一類。高度刻度代表了該高度類之間合并的判定值。對(duì)于平均聯(lián)動(dòng)來(lái)說(shuō),標(biāo)準(zhǔn)是一類中的點(diǎn)和其他類中點(diǎn)的距離平均值。
NbClust包提供了眾多的指數(shù)來(lái)確定在一個(gè)聚類分析里類的最佳數(shù)目。不能保證這些指標(biāo)得出的結(jié)果都一致。事實(shí)上,它們可能不一樣。但是結(jié)果可用來(lái)作為選擇聚類個(gè)數(shù)K值的一個(gè)參考。NbClust()函數(shù)的輸入包括需要做聚類的矩陣或是數(shù)據(jù)框,使用的距離測(cè)度和聚類方法,并考慮最小和最大聚類的個(gè)數(shù)來(lái)進(jìn)行聚類。它返回每一個(gè)聚類指數(shù),同時(shí)輸出建議聚類的最佳數(shù)目。下面的代碼清單使用該方法處理營(yíng)養(yǎng)數(shù)據(jù)的平均聯(lián)動(dòng)聚類。
?
這里,四個(gè)評(píng)判準(zhǔn)則贊同聚類個(gè)數(shù)為2,四個(gè)判定準(zhǔn)則贊同聚類個(gè)數(shù)為3 ,等等。可以試著用“投票”個(gè)數(shù)最多的聚類個(gè)數(shù)(2、 3、 5和15)并選擇其中一個(gè)使得解釋最有意義。 下面的代碼清單展示了五類聚類的方案:
?
當(dāng)需要嵌套聚類和有意義的層次結(jié)構(gòu)時(shí),層次聚類或許特別有用。層次聚類難以應(yīng)用到有數(shù)百甚至數(shù)千觀測(cè)值的大樣本中。不過(guò)劃分方法可以在大樣本情況下做得很好。?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/aloiswei/p/6054333.html
總結(jié)
以上是生活随笔為你收集整理的聚类分析1:层次聚类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何加入Dave英语学习小组
- 下一篇: 常用正则表达式 验证电子邮件网址邮政编码