R程式設計中的層次聚類是什麼?


介紹

在資料分析和機器學習的廣闊領域中,層次聚類是一種強大的技術,它根據個體或物件的相似性對它們進行分組。當結合R程式語言的多功能性和效率時,它成為一個更有價值的工具,用於揭示大型資料集中的隱藏模式和結構。在本文中,我們將探討層次聚類的內容,深入研究其各種型別,並透過一個實際示例進行說明,並在R中提供程式碼實現。

層次聚類

層次聚類是一種無監督學習演算法,它旨在透過基於預定距離度量迭代合併或劃分相似實體來建立聚類。與k均值聚類等其他方法不同,在k均值聚類中,我們需要預先定義所需聚類的數量,層次聚類構建一個稱為樹狀圖的樹狀結構,可以將其切割到一定高度以獲得多個聚類解決方案。

層次聚類的型別

層次聚類主要有兩種方法:

  • 凝聚的(自下而上):此方法首先將每個人都視為其自身的聚類,然後連續合併小的聚類,直到達到包含所有資料點的單個大型聚類。連線準則的選擇在這裡起著至關重要的作用。

  • 分裂的(自上而下):與凝聚方法相反;分裂層次聚類從包含所有資料點的單個大型聚類開始,然後遞迴地將其劃分為較小的子聚類,直到達到單個觀察值作為單獨的聚類。

使用R程式設計實現層次聚類

層次聚類是透過使用曼哈頓距離計算距離來實現的。

演算法

步驟1:首先,我們需要載入樣本資料集。

步驟2:在聚類之前,需要進行資料預處理。如果存在缺失值,我們可能需要標準化變數或處理缺失值。

步驟3:根據所選度量(例如歐幾里德距離或曼哈頓距離)計算觀測值之間的差異距離或距離。

步驟4:建立層次聚類,我們的距離矩陣準備就緒後,我們可以使用R中的`hclust()`函式進行層次聚類。

步驟5:生成的“hc”物件儲存後續步驟所需的所有資訊。

步驟6:繪製樹狀圖,我們可以透過在R中繪製樹狀圖來視覺化我們的聚類。

示例

library(cluster) 
 
# Create a sample dataset set.seed(123) 
x <- matrix(rnorm(100), ncol = 5) 
 
# Finding distance matrix 
distance_mat <- dist(x, method = 'manhattan') distance_mat 
 
# Fitting Hierarchical Clustering Model 
# to the training dataset set.seed(240) # Setting seed 
Hierar_cl <- hclust(distance_mat, method = "average") 
Hierar_cl 
 
# Plotting dendrogram plot(Hierar_cl) 
 
# Choosing no. of clusters # Cutting tree by height abline(h = 5.5, col = "green") 
 
# Cutting tree by no. of clusters fit <- cutree(Hierar_cl, k = 3 ) fit  table(fit) 
rect.hclust(Hierar_cl, k = 11, border = "red") 

輸出

1	2        3        4        5        6        7        8 
2	2.928416                                                                
3	3.820964 4.579451                                                       
4	5.870407 3.963824 6.920070                                              
5	4.712898 3.357644 5.192501 2.041704                                     
6	3.724940 5.188503 2.298511 7.529122 6.906090                            
7	4.378470 3.603915 6.073011 6.448175 6.242628 5.408591                   
8	2.909887 2.270199 5.993941 6.134220 5.627842 5.830570 3.531025          
9	2.545686 4.500523 5.703258 5.466749 3.856739 6.130000 6.203371 4.746715 
10	5.861279 5.127758 9.368977 8.324293 8.236305 8.704556 3.295965 5.013834 
11	6.085281 3.179450 4.827798 5.101238 4.895692 5.436850 2.873268 4.584566 
12	5.590643 2.816420 6.061696 4.307201 3.803264 6.670747 4.914120 4.986817 
13	4.435100 3.563707 6.249931 6.596065 5.579229 5.771611 1.893134 3.980554 
14	6.402935 4.233552 6.619402 4.029210 2.452428 8.633337 5.044223 5.761055 
15	4.785512 2.544131 7.087874 5.618391 5.530404 7.696926 2.610109 3.284796 
16	7.566986 7.161528 6.313095 7.075204 5.756949 6.740845 5.668959 7.578376 
17	6.380095 4.860359 5.530564 7.704619 7.499072 6.327322 3.290148 5.335482 
18	6.818578 4.550758 9.130209 5.378824 5.184404 9.739261 6.419430 4.339261 
19	3.282054 2.655900 3.616115 5.178834 3.243561 4.331110 3.510374 3.815444 
20	3.236401 2.604102 5.008448 5.395216 3.577502 6.633752 5.481153 3.662209 
9	10       11       12       13       14       15       16 
2                                                                          
3                                                                          
4                                                                          
5                                                                          
6                                                                          
7                                                                          
8                                                                          
9                                                                          
10	6.099033                                                                
11	6.734916 5.530202                                                       
12	6.804009 7.368849 4.130914                                              
13	4.591857 3.200043 3.839703 4.870051                                     
14	5.335886 6.919997 4.519932 5.595756 4.300131                            
15	6.393326 3.634753 3.218255 4.662948 4.028726 4.327200                   
16	5.414681 7.171170 5.198525 8.439225 4.010792 3.776011 7.892429          
17	8.925781 6.482177 4.055843 6.170564 5.183282 6.868406 3.874253 8.586946 
18	6.552868 7.159270 5.279163 5.245416 7.472245 6.473367 3.809321 9.815098 
19	3.707689 6.167308 3.286156 3.779404 2.967265 4.302227 5.200031 4.681604 
20	3.297399 6.324931 4.913250 4.907588 4.817754 3.963564 4.663005 6.219969 
         17       18       19 
2                             
3                             
4                             
5 
6
7
8
9
10
11
12
13
14
15
16
17
18 6.804331                  
19 5.625103 6.543116         
20 7.029360 5.821915 2.451658
Call:
hclust(d = distance_mat, method = "average")

Cluster method   : average 
Distance         : manhattan
Number of objects: 20 
  
 [1] 1 1 2 1 1 2 1 1 1 1 1 1 1 1 1 3 2 1 1 1
fit
  1   2  3 
 16   3  1

結論

層次聚類是一種多功能且強大的技術,用於發現數據集中的潛在結構。透過利用其實際應用並在R程式語言中實現它,我們現在已經獲得了對層次聚類的理解和實踐經驗。這種方法在客戶細分、影像分析和生物資訊學等各個領域具有巨大的潛力,幫助專家揭示隱藏的模式,從而推動明智的決策過程。

更新於:2023年7月26日

315次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告