1. 程式人生 > >【機器學習】【層次聚類演算法-1】HCA(Hierarchical Clustering Alg)的原理講解 + 示例展示數學求解過程

【機器學習】【層次聚類演算法-1】HCA(Hierarchical Clustering Alg)的原理講解 + 示例展示數學求解過程

層次聚類(Hierarchical Clustering)是聚類演算法的一種,通過計算不同類別資料點間的相似度來建立一棵有層次的巢狀聚類樹。在聚類樹中,不同類別的原始資料點是樹的最低層,樹的頂層是一個聚類的根節點。建立聚類樹有自下而上合併和自上而下分裂兩種方法,本篇文章介紹合併方法。

hierarchicalcluster

層次聚類的合併演算法

層次聚類的合併演算法通過計算兩類資料點間的相似性,對所有資料點中最為相似的兩個資料點進行組合,並反覆迭代這一過程。簡單的說層次聚類的合併演算法是通過計算每一個類別的資料點與所有資料點之間的距離來確定它們之間的相似性,距離越小,相似度越高。並將距離最近的兩個資料點或類別進行組合,生成聚類樹。

歐幾里德距離矩陣

層次聚類使用歐式距離來計算不同類別資料點間的距離(相似度)。我們在前面的幾篇文章中都曾經介紹過歐氏距離的計算方法,本篇文章將通過建立一個歐式距離矩陣來計算和對比不同類別資料點間的距離,並對距離值最小的資料點進行組合。以下是歐式距離的計算公式。

Euclidean distance

以下為示例資料,我們通過歐氏距離計算下面A到G的歐式距離矩陣,並通過合併的方法將相似度最高的資料點進行組合,並建立聚類樹。

資料

建立歐式距離矩陣的方法很簡單,將每個類別的資料點分別與A-G中的每個資料點計算距離值,其中A—>B表示資料點A到資料點B的距離,B—>A則代表資料點B到資料點A的距離。這兩個距離值是相同的,因此歐式距離矩陣呈對角線對稱(綠色部分和藍色部分)。其中對角線的0值是資料點與自己的距離值。我們將所有資料點間的距離結果進行對比,選擇其中距離最近的兩個資料點進行組合,並迭代這一過程。下圖顯示了歐式矩陣的邏輯和計算方法。

歐式距離矩陣1

資料點之間的距離    

對於示例中的資料點,我們通過計算獲得了下面的歐式距離矩陣。其中資料點B到資料點C的距離在所有的距離值中最小,為1.00。以下為資料點間距離值的計算公式。

BtoA

經過計算資料點B和資料點C與其他資料點相比有最高的相似度。因此,我們將資料點B和資料點C進行組合。並再次計算其他資料點間的距離。

距離矩陣1

資料點與組合資料點間的距離

將資料點B與資料點C進行組合後,重新計算各類別資料點間的距離矩陣。資料點間的距離計算方式與之前的方法一樣。這裡需要說明的是組合資料點(B,C)與其他資料點間的計算方法。當我們計算(B,C)到A的距離時,需要分別計算B到A和C到A的距離均值。

BCtoA

經過計算資料點D到資料點E的距離在所有的距離值中最小,為1.20。這表示在當前的所有資料點中(包含組合資料點),D和E的相似度最高。因此我們將資料點D和資料點E進行組合。並再次計算其他資料點間的距離。

距離矩陣2

後面的工作就是不斷的重複計算資料點與資料點,資料點與組合資料點間的距離。這個步驟應該由程式來完成。這裡由於資料量較小,我們手工計算並列出每一步的距離計算和資料點組合的結果。

這一步中,資料點A和資料點F的距離值在所有距離值中最小,因此我們將A和F進行組合,生成組合資料點(A,F)。

距離矩陣3

到此為止除了資料點G以外,其他的資料點都已經根據距離值(相似度)進行了組合。聚類樹的最底層已經完成。下面我們將繼續計算組合資料點間的距離,並對相似度最高的組合資料點進行合併。

兩個組合資料點間的距離

計算兩個組合資料點間距離的方法有三種,分別為Single Linkage,Complete Linkage和Average Linkage。在開始計算之前,我們先來介紹下這三種計算方法以及各自的優缺點。

Single Linkage

Single Linkage的計算方法是將兩個組合資料點中距離最近的兩個資料點間的距離作為這兩個組合資料點的距離。這種方法容易受到極端值的影響。兩個很相似的組合資料點可能由於其中的某個極端的資料點距離較近而組合在一起。

Complete Linkage

Complete Linkage的計算方法與Single Linkage相反,將兩個組合資料點中距離最遠的兩個資料點間的距離作為這兩個組合資料點的距離。Complete Linkage的問題也與Single Linkage相反,兩個不相似的組合資料點可能由於其中的極端值距離較遠而無法組合在一起。

Average Linkage

Average Linkage的計算方法是計算兩個組合資料點中的每個資料點與其他所有資料點的距離。將所有距離的均值作為兩個組合資料點間的距離。這種方法計算量比較大,但結果比前兩種方法更合理。

我們使用Average Linkage計算組合資料點間的距離。下面是計算組合資料點(A,F)到(B,C)的距離,這裡分別計算了(A,F)和(B,C)兩兩間距離的均值。

AFtoBC

通過計算及對比不同組合資料點間間的距離。(A,F)到(B,C)的距離在所有組合資料點間最小,為13.25。說明(A,F)到(B,C)相似度最高。因此,將(A,F)到(B,C)組合為(A,F,B,C)。

距離矩陣4

使用與之前相同的方法計算出組合資料點(D,E)和G的距離在目前所有組合資料點中最小。為34.70。將(D,E)和G組合為(D,E,G)。

距離矩陣5

最終,通過計算和合並,我們獲得了兩個組合資料點(A,F,B,C)和(D,E,G)。這也是聚類樹的最頂層的兩個資料點。下面,我們按之前的計算步驟來構建聚類樹。

距離矩陣6

層次聚類樹狀圖

將前面的每一步的計算結果以樹狀圖的形式展現出來就是層次聚類樹。最底層是原始A到G的7個數據點。依照7個數據點間的相似度組合為聚類樹的第二層(A,F),(B,C),(D,E)和G。以此類推生成完整的層次聚類樹狀圖。以下為簡單的示意圖。

Hierarchical Clustering