一、層次聚類
首先考慮歐式空間下的層次聚類。該算法僅可用於規模相對較小的數據集。層次聚類用於非歐式空間時,還有一些與層次聚類相關的額外問題需要考慮。因此,當不存在簇質心或者說簇平均點時,可以考慮採用簇中心點(clustroid)來表示一個簇。
1.1 歐式空間下的層次聚類
首先,每個點看作一個簇,通過不斷的合併小簇而形成大簇。我們需要提前確定
(1) 簇如何表示?
(2) 如何選擇哪兩個簇進行合併?
(3) 簇合並何時結束?
對於歐式空間,(1)通過簇質心或者簇內平均點來表示簇。對於單點的簇,該點就是簇質心。可以初始化簇數目爲歐式空間點的數目Cnumber=n。簇之間的距離爲質心之間的歐式距離,(2)選擇具有最短距離(或者其他方式)的兩個簇進行合併。
1.2 層次聚類算法的效率
基本的層次聚類算法效率不高。第一步時間開銷爲O(n^2),後續步驟的時間開銷(n-1)^2, (n-2)^2。最終從1到n求和得到O(n^3)。在此基礎,可以按照以下方式提高效率。
(1) 必須計算所有點對之間的距離,時間複雜度爲O(n^2)
(2) 將這些距離對存放在優先隊列中(最小堆棧),有限隊列或者最小堆的複雜度爲O(n^2)。
(3) 當決定合併簇D合併到簇C時,C變成了一個新的簇,D變成了需要刪除了簇,所以我們需要刪除簇D到各簇的距離,再計算新簇C到其餘各簇的距離。優先隊列刪除的操作時間是O(logn),整個的刪除時間開銷爲O(nlogn)。
(4) 然後計算新簇到所有剩餘簇的所有距離,由於每次最多有n個元素被插入到優先隊列中,而每次插入的時間開銷依然是O(logn),所以時間開銷同樣是O(nlogn)。
(5) 由於最後兩步最多執行n次,而第一步只執行1次,所以總的時間開銷爲O(n^2logn)。儘管優於O(n^3)。但是仍然對n有很強的上界限制。
1.3 控制層次聚類的其他規則
合併規則:
(1) 定義兩個簇的距離爲兩個簇中所有點的最短距離(min(all dB and all dP))。
(2) 定義兩個簇的距離爲兩個簇中所有點對之間距離的平均值(mean(all dB and all dP))。
前提是假設將A和B合併成一個新簇C
(3) 簇的半徑(radius)是指簇內所有點到新簇C的質心的最大距離。Max(6 points to centroid of C)。到時誰的距離結果簇半徑最小就合併誰。可以修改爲:選擇簇內所有點到質心的平均距離最短的兩個簇進行合併,mean(d 6 points to centroid of C)。另一個修改爲選擇結果簇內所有點到質心的距離平方和最短的兩個簇進行合併 。
(4) 簇的直徑(diameter)是指簇內任意兩個點之間的最大距離。可以將結果簇具有最小直徑的兩個簇進行合併。
合併過程的停止:
(1) 預先設定停止的k值。
(2) 當最佳合併得到的簇的直徑/半徑超過某個閥值時停止聚類。
(3) 當最佳合併得到的簇的密度(density)(簇的單位體積中點的數目,可以通過點數目/直徑(或者半徑)的某個冪來估計)超過某個閥值時停止聚類。冪可以是空間的維數或者1,2。
(4) 當有證據表明下一次簇對合並會產生很糟糕的結果時停止聚類。比如可以跟蹤所有當前簇的平均直徑,如果我們合併兩個確實不該合併的簇時,平均直徑會突然大幅度的增加。
1.4 非歐空間下的層次聚類
在非歐空間,使用基於點進行計算的距離測度,如Jaccard距離,餘弦距離或編輯距離等。所以在非歐空間下,當無法合併簇中的點時,我們僅有的選擇是從簇中選擇一個點來代表簇。理想情況下,該點非常接近簇內的所有點,因此在某種意義上說可以認爲該點處於簇的“中心”。該代表點稱爲簇中心點(clusteroid)。選擇簇中心點的方法如下:
(1) 該點到簇中所有其他點的距離之和(求和);
(2) 該點到簇中另外一點的最大距離(最大值);
(3) 該點到簇中其他所有點的距離平方和(平法和)。
上面的各種簇間距離計算方法同樣適用於非歐空間,只不過這裏用簇中心點代替簇的質心。