可伸縮聚類演算法綜述(可伸縮聚類演算法開篇)
可伸縮聚類演算法綜述
第二十八次寫部落格,本人數學基礎不是太好,如果有幸能得到讀者指正,感激不盡,希望能借此機會向大家學習。這一篇文章作為可伸縮聚類(Scalable Clustering)演算法的開篇,簡要介紹了幾種針對大規模資料常用的減少時間和空間複雜度的方法。
許多聚類演算法所需要的儲存量(空間複雜度)都是非線性的,以層次聚類為例,其所需的儲存量為,由於磁碟對隨機訪問速度的限制,這類演算法並不適用於大規模的資料集,而且演算法本身難以修改。另外,某些演算法的計算量(時間複雜度)也是非線性的,因此在這裡針對上述問題介紹幾種常用的減少時間和空間複雜度的方法。
多維或空間存取方法
許多聚類技術(K-Means、DBSCAN等)需要找出最近的質心、點的最近鄰或指定距離內的所有點。可以使用稱為多維或空間存取方法的專門技術來更加有效的執行這些任務,至少對於低維資料可以這樣做。這些技術,如k-d樹或R*樹,一般產生資料空間的層次劃分,可以用來減少發現點的最近鄰所需要的時間。注意,基於網格的聚類法也劃分資料空間(如DENCLUE中對核密度估計的改進)。
鄰近度界
另一種避免鄰近度計算的方法是使用鄰近度界。例如,使用歐幾里得距離時,有可能使用三角不等式來避免許多距離的計算。例如,在傳統K-Means的每一次迴圈迭代中,需要決定樣本點應當留在當前的簇,還是應當移動到一個新的簇中。如果我們知道兩個簇質心之間的距離和點到當前所屬簇的(更新過的)質心的距離,則可以使用三角不等式來避免計算該樣本點到其他簇質心的距離。
抽樣
另一種降低時間複雜度的方法是抽樣。在這種方法中,提取一個樣本點集作為原始資料集的子集,對樣本點集中的所有點進行聚類,然後將原資料集中其餘的樣本點指派到這些簇中(通常是最近的簇)。如果抽取的點數是,則時間複雜度的演算法複雜度降低到。不過,抽樣的主要問題是小簇可能丟失。
劃分資料物件
另一種降低時間複雜度的常用方法是,使用某種有效的技術,將資料集劃分為不相交的集合,然後分別對這些集合聚類。最終的簇的集合是這些分離的簇的集合的並,或者通過對分離的簇的集合合併和/或進一步求精得到,在原型聚類中的提到過的二分K-Means採用的就是類似的方法。
如果使用K-Means來找出K個簇,則在每次迴圈迭代中都需要計算每個樣本點到每個簇質心的距離。如果K很大,則這種計算可能開銷很大。二分K-Means從整個資料集開始,·使用K-Means將當前的簇的進行二劃分,知道我們得到K個簇。在每一次迴圈迭代中,需要計算點到兩個簇質心的距離。除了迴圈的第一步,我們只需要計算原始資料集的一個子集中的點到兩個被考慮的簇質心的距離。因此,二分K-Means比普通的K-Means要快。
彙總
另一種聚類方法是:首先彙總資料(通常經過一次掃描),然後在彙總資料上聚類。比如,領導者演算法或者將一個資料物件放進最近的簇(如果該簇足夠近),或者建立一個包含當前物件的新簇。這種方法關於物件個數是線性的,可以用來彙總資料,以便使用其他聚類技術。BIRCH演算法採用了類似的概念。
並行與分散式計算
如果不能利用前面介紹的技術,或者如果採用這些技術並不能產生期望的精度或者降低計算時間,則需要其他方法。一種高效的方法是將計算分佈到多個處理機上。
以下是各可伸縮聚類演算法連結:
【1】CURE《CURE演算法詳解》
【2】BIRCH《BIRCH詳解》
相關文章
- 聚類演算法綜述聚類演算法
- Node.js的可伸縮性Node.js
- 類似列表的view伸縮動畫View動畫
- Twitter如何使用Redis提高可伸縮性Redis
- CSS 可伸縮圓角導航選單CSS
- 聚類演算法聚類演算法
- 聚類之K均值聚類和EM演算法聚類演算法
- 聚類(part3)--高階聚類演算法聚類演算法
- jQuery可伸縮搜尋框程式碼例項jQuery
- Blitz4j - 可伸縮的日誌框架框架
- 可伸縮的微服務告警系統設計指南微服務
- 簡析Uber的可伸縮監控:uMonitor和Neris
- 自定義view之可伸縮的圓弧與扇形View
- 懸浮在網頁頂部可伸縮層詳解網頁
- 高可用可伸縮架構實用經驗談架構
- 構建高效且可伸縮的結果快取快取
- 可伸縮NoSQL資料庫的五條建議SQL資料庫
- OPTICS聚類演算法原理聚類演算法
- 初探DBSCAN聚類演算法聚類演算法
- DBSCAN密度聚類演算法聚類演算法
- BIRCH聚類演算法原理聚類演算法
- 聚類之dbscan演算法聚類演算法
- Meanshift,聚類演算法聚類演算法
- 14聚類演算法-程式碼案例六-譜聚類(SC)演算法案例聚類演算法
- 09聚類演算法-層次聚類-CF-Tree、BIRCH、CURE聚類演算法
- 大型網站的可伸縮性架構如何設計?網站架構
- Android可伸縮佈局-FlexboxLayout(支援RecyclerView整合)AndroidFlexView
- 垂直可伸縮的導航選單例項程式碼單例
- 各類聚類(clustering)演算法初探聚類演算法
- 04聚類演算法-程式碼案例一-K-means聚類聚類演算法
- 深度聚類演算法淺談聚類演算法
- 深度聚類演算法敘談聚類演算法
- Spark中的聚類演算法Spark聚類演算法
- 關於記憶體快取的可伸縮性問題記憶體快取
- CNN 模型壓縮與加速演算法綜述CNN模型演算法
- 【Python機器學習實戰】聚類演算法(1)——K-Means聚類Python機器學習聚類演算法
- CSS-伸縮佈局CSS
- Redis 叢集伸縮原理Redis