可伸縮聚類演算法綜述(可伸縮聚類演算法開篇)

Leon1895發表於2018-10-30

可伸縮聚類演算法綜述

第二十八次寫部落格,本人數學基礎不是太好,如果有幸能得到讀者指正,感激不盡,希望能借此機會向大家學習。這一篇文章作為可伸縮聚類(Scalable Clustering)演算法的開篇,簡要介紹了幾種針對大規模資料常用的減少時間和空間複雜度的方法。

  許多聚類演算法所需要的儲存量(空間複雜度)都是非線性的,以層次聚類為例,其所需的儲存量為,由於磁碟對隨機訪問速度的限制,這類演算法並不適用於大規模的資料集,而且演算法本身難以修改。另外,某些演算法的計算量(時間複雜度)也是非線性的,因此在這裡針對上述問題介紹幾種常用的減少時間和空間複雜度的方法。

多維或空間存取方法

  許多聚類技術(K-Means、DBSCAN等)需要找出最近的質心、點的最近鄰或指定距離內的所有點。可以使用稱為多維或空間存取方法的專門技術來更加有效的執行這些任務,至少對於低維資料可以這樣做。這些技術,如k-d樹或R*樹,一般產生資料空間的層次劃分,可以用來減少發現點的最近鄰所需要的時間。注意,基於網格的聚類法也劃分資料空間(如DENCLUE中對核密度估計的改進)。

鄰近度界

  另一種避免鄰近度計算的方法是使用鄰近度界。例如,使用歐幾里得距離時,有可能使用三角不等式來避免許多距離的計算。例如,在傳統K-Means的每一次迴圈迭代中,需要決定樣本點應當留在當前的簇,還是應當移動到一個新的簇中。如果我們知道兩個簇質心之間的距離和點到當前所屬簇的(更新過的)質心的距離,則可以使用三角不等式來避免計算該樣本點到其他簇質心的距離。

抽樣

  另一種降低時間複雜度的方法是抽樣。在這種方法中,提取一個樣本點集作為原始資料集的子集,對樣本點集中的所有點進行聚類,然後將原資料集中其餘的樣本點指派到這些簇中(通常是最近的簇)。如果抽取的點數是m\sqrt{m},則O(m2)O\left(m^2\right)時間複雜度的演算法複雜度降低到O(m)O\left(m\right)。不過,抽樣的主要問題是小簇可能丟失。

劃分資料物件

  另一種降低時間複雜度的常用方法是,使用某種有效的技術,將資料集劃分為不相交的集合,然後分別對這些集合聚類。最終的簇的集合是這些分離的簇的集合的並,或者通過對分離的簇的集合合併和/或進一步求精得到,在原型聚類中的提到過的二分K-Means採用的就是類似的方法。
  如果使用K-Means來找出K個簇,則在每次迴圈迭代中都需要計算每個樣本點到每個簇質心的距離。如果K很大,則這種計算可能開銷很大。二分K-Means從整個資料集開始,·使用K-Means將當前的簇的進行二劃分,知道我們得到K個簇。在每一次迴圈迭代中,需要計算點到兩個簇質心的距離。除了迴圈的第一步,我們只需要計算原始資料集的一個子集中的點到兩個被考慮的簇質心的距離。因此,二分K-Means比普通的K-Means要快。

彙總

  另一種聚類方法是:首先彙總資料(通常經過一次掃描),然後在彙總資料上聚類。比如,領導者演算法或者將一個資料物件放進最近的簇(如果該簇足夠近),或者建立一個包含當前物件的新簇。這種方法關於物件個數是線性的,可以用來彙總資料,以便使用其他聚類技術。BIRCH演算法採用了類似的概念。

並行與分散式計算

  如果不能利用前面介紹的技術,或者如果採用這些技術並不能產生期望的精度或者降低計算時間,則需要其他方法。一種高效的方法是將計算分佈到多個處理機上。


以下是各可伸縮聚類演算法連結:
【1】CURE《CURE演算法詳解》
【2】BIRCH《BIRCH詳解》

相關文章