1. 程式人生 > >層次聚類的介紹

層次聚類的介紹



AGNES演算法(自底向上層次聚類)

       AGNES(Agglomerative Nesting) 是凝聚的層次聚類演算法,如果簇C1中的一個物件和簇C2中的一個物件之間的距離是所有屬於不同簇的物件間歐式距離中最小的,C1和C2可能被合併。這是一種單連線方法,其每個簇可以被簇中的所有物件代表,兩個簇之間的相似度由這兩個簇中距離最近的資料點對的相似度來確定。

       演算法描述:

              輸入:包含n個物件的資料庫,終止條件簇的數目k

              輸出:k個簇

(1)       將每個物件當成一個初始簇

(2)       Repeat

(3)                根據兩個簇中最近的資料點找到最近的兩個簇

(4)                合併兩個簇,生成新的簇的集合

(5)       Until達到定義的簇的數目

       演算法效能:

(1)       簡單,但遇到合併點選擇困難的情況。

(2)       一旦一組物件被合併,不能撤銷

(3)       演算法的複雜度為O(n的平方),不適合大資料集

       DIANA(Divisive Analysis)演算法屬於分裂的層次聚類,首先將所有的物件初始化到一個簇中,然後根據一些原則(比如最鄰近的最大歐式距離),將該簇分類。直到到達使用者指定的簇數目或者兩個簇之間的距離超過了某個閾值。

       DIANA用到如下兩個定義:

(1)       簇的直徑:在一個簇中的任意兩個資料點都有一個歐氏距離,這些距離中的最大值是簇的直徑

(2)       平均相異度(平均距離):

       演算法描述:

              輸入:包含n個物件的資料庫,終止條件簇的數目k

              輸出:k個簇,達到終止條件規定簇數目

(1)       將所有物件整個當成一個初始簇

(2)       For ( i=1;i!=k;i++) Do Begin

(3)         在所有簇中挑選出具有最大直徑的簇;

(4)           找出所挑出簇裡與其他點平均相異度最大的一個點放入splinter group,剩餘的放入old party中。

(5)           Repeat

(6)             在old party裡找出到splinter group中點的最近距離不大於old party中點的最近距離的點,並將該點加入splinter group

(7)           Until 沒有新的old party的點被分配給splinter group;

(8)       Splinter group 和old party為被選中的簇分裂成的兩個簇,與其他簇一起組成新的簇集合

(9)       END

       演算法效能:

              缺點是已做的分裂操作不能撤銷,類之間不能交換物件。如果在某步沒有選擇好分裂點,可能會導致低質量的聚類結果。大資料集不太適用。


層次聚類演算法的分析:

層次聚類法的優點是可以通過設定不同的相關引數值,得到不同粒度上的多層次聚類結構;在聚類形狀方面,層次聚類適用於任意形狀的聚類,並且對樣本的輸入順序是不敏感的。 
層次聚類的不足之處是演算法的時間複雜度大,層次聚類的結果依賴聚類的合併點和分裂點的選擇。並且層次聚類過程最明顯的特點就是不可逆性,由於物件在合併或分裂之後,下一次聚類會在前一次聚類基礎之上繼續進行合併或分裂,也就是說,一旦聚類結果形成,想要再重新合併來優化聚類的效能是不可能的了。聚類終止的條件的不精確性是層次聚類的另一個缺點,層次聚類要求指定一個合併或分解的終止條件,比如指定聚類的個數或是兩個距離最近的聚類之間最小距離閾值。