各種聚類算法的系統介紹和比較

轉自:https://blog.csdn.net/abc200941410128/article/details/78541273?locationNum=1&fps=1

最近項目用到聚類算法,將其系統的總結一下。

一、簡要介紹

1、聚類概念

聚類就是按照某個特定標準(如距離準則)把一個數據集分割成不同的類或簇,使得同一個簇內的數據對象的相似性儘可能大,同時不在同一個簇中的數據對象的差異性也儘可能地大。即聚類後同一類的數據儘可能聚集到一起,不同數據儘量分離。

2、聚類和分類的區別

聚類技術通常又被稱爲無監督學習,因爲與監督學習不同,在聚類中那些表示數據類別的分類或者分組信息是沒有的。
Clustering (聚類),簡單地說就是把相似的東西分到一組,聚類的時候,我們並不關心某一類是什麼,我們需要實現的目標只是把相似的東西聚到一起。因此,一個聚類算法通常只需要知道如何計算相似度就可以開始工作了,因此 clustering 通常並不需要使用訓練數據進行學習,這在Machine Learning中被稱作unsupervised learning (無監督學習)。
Classification (分類),對於一個classifier,通常需要你告訴它“這個東西被分爲某某類”這樣一些例子,理想情況下,一個 classifier 會從它得到的訓練集中進行“學習”,從而具備對未知數據進行分類的能力,這種提供訓練數據的過程通常叫做supervised learning (監督學習)。

3、衡量聚類算法優劣的標準

不同聚類算法有不同的優劣和不同的適用條件。大致上從跟數據的屬性(是否序列輸入、維度),算法模型的預設,模型的處理能力上看。具體如下:
1、算法的處理能力:處理大的數據集的能力(即算法複雜度);處理數據噪聲的能力;處理任意形狀,包括有間隙的嵌套的數據的能力;
2、算法是否需要預設條件:是否需要預先知道聚類個數,是否需要用戶給出領域知識;
3、算法的數據輸入屬性:算法處理的結果與數據輸入的順序是否相關,也就是說算法是否獨立於數據輸入順序;算法處理有很多屬性數據的能力,也就是對數據維數是否敏感,對數據的類型有無要求。

4、聚類算法有哪些類

腦圖

常用算法特點比較

二、算法介紹

1、基於層次的方法(Hierarchical methods)

1.1基本思想

層次聚類主要有兩種類型:合併的層次聚類和分裂的層次聚類。前者是一種自底向上的層次聚類算法,從最底層開始,每一次通過合併最相似的聚類來形成上一層次中的聚類,整個當全部數據點都合併到一個聚類的時候停止或者達到某個終止條件而結束,大部分層次聚類都是採用這種方法處理。後者是採用自頂向下的方法,從一個包含全部數據點的聚類開始,然後把根節點分裂爲一些子聚類,每個子聚類再遞歸地繼續往下分裂,直到出現只包含一個數據點的單節點聚類出現,即每個聚類中僅包含一個數據點。

1.2算法流程

以下流程以自下向上爲例。
1. 將每個對象看作一類,計算兩兩之間的最小距離;
2. 將距離最小的兩個類合併成一個新類;
3. 重新計算新類與所有類之間的距離;
4. 重複2、3,直到所有類最後合併成一類

1.3算法優缺點

優點:可解釋性好(如當需要創建一種分類法時);還有些研究表明這些算法能產生高質量的聚類,也會應用在上面說的先取K比較大的K-means後的合併階段;還有對於K-means不能解決的非球形族就可以解決了。
缺點:時間複雜度高啊,o(m^3),改進後的算法也有o(m^2lgm),m爲點的個數;貪心算法的缺點,一步錯步步錯;同K-means,difficulty handling different sized clusters and convex shapes。

1.4常見的算法及改進

該聚類算法因爲計算複雜度比較大適用於小數量級,如對中國省會城市聚類。改進的算法有BIRCH(Balanced Iterative Reducing and Clustering Using Hierarchies)主要是在數據體量很大的時候使用,而且數據類型是numerical。
Chameleon(A Hierarchical Clustering Algorithm Using Dynamic Modeling)裏用到的linkage是kNN(k-nearest-neighbor)算法,並以此構建一個graph,Chameleon的聚類效果被認爲非常強大,比BIRCH好用,但運算複雜還是很高,O(n^2)。看個Chameleon的聚類效果圖,其中一個顏色代表一類,可以看出來是可以處理非常複雜的形狀的。
這裏寫圖片描述

2、基於劃分的方法(Partition-based methods)

2.1基本思想

基於劃分的方法:其原理簡單來說就是,想象你有一堆散點需要聚類,想要的聚類效果就是“類內的點都足夠近,類間的點都足夠遠”。首先你要確定這堆散點最後聚成幾類,然後挑選幾個點作爲初始中心點,再然後依據預先定好的啓發式算法(heuristic algorithms)給數據點做迭代重置(iterative relocation),直到最後到達“類內的點都足夠近,類間的點都足夠遠”的目標效果。也正是根據所謂的“啓發式算法”,形成了k-means算法及其變體包括k-medoids、k-modes、k-medians、kernel k-means等算法。

2.2算法流程

經典K-means算法流程:
1. 隨機地選擇k個對象,每個對象初始地代表了一個簇的中心;
2. 對剩餘的每個對象,根據其與各簇中心的距離,將它賦給最近的簇;
3. 重新計算每個簇的平均值,更新爲新的簇中心;
4. 不斷重複2、3,直到準則函數收斂。

2.3算法優缺點

優點:對於大型數據集也是簡單高效、時間複雜度、空間複雜度低。
缺點:最重要是數據集大時結果容易局部最優;需要預先設定K值,對最先的K個點選取很敏感;對噪聲和離羣值非常敏感;只用於numerical類型數據;不能解決非凸(non-convex)數據。

2.4常見的算法及改進

k-means對初始值的設置很敏感,所以有了k-means++、intelligent k-means、genetic k-means。
k-means對噪聲和離羣值非常敏感,所以有了k-medoids和k-medians。
k-means只用於numerical類型數據,不適用於categorical類型數據,所以k-modes。
k-means不能解決非凸(non-convex)數據,所以有了kernel k-means。
另外,很多教程都告訴我們Partition-based methods聚類多適用於中等體量的數據集,但我們也不知道“中等”到底有多“中”,所以不妨理解成,數據集越大,越有可能陷入局部最小。下圖顯示的就是面對非凸,k-means和kernel k-means的不同效果。
這裏寫圖片描述

3、基於密度的方法(Density-based methods)

3.1基本思想

基於密度的方法:k-means解決不了不規則形狀的聚類。於是就有了Density-based methods來系統解決這個問題。該方法同時也對噪聲數據的處理比較好。其原理簡單說畫圈兒,其中要定義兩個參數,一個是圈兒的最大半徑,一個是一個圈兒裏最少應容納幾個點。只要鄰近區域的密度(對象或數據點的數目)超過某個閾值,就繼續聚類,最後在一個圈裏的,就是一個類。DBSCAN(Density-Based Spatial Clustering of Applications with Noise)就是其中的典型.

3.2算法流程

DBSCAN流程:
1. 從任一對象點p開始;
2. 尋找併合並核心p對象直接密度可達(eps)的對象;
3. 如果p是一個核心點,則找到了一個聚類,如果p是一個邊界點(即從p沒有密度可達的點)則尋找下一個對象點;
4. 重複2、3,直到所有點都被處理

DBSCAN聚類算法原理的基本要點:確定半徑eps的值
①DBSCAN算法需要選擇一種距離度量,對於待聚類的數據集中,任意兩個點之間的距離,反映了點之間的密度,說明了點與點是否能夠聚到同一類中。由於DBSCAN算法對高維數據定義密度很困難,所以對於二維空間中的點,可以使用歐幾里德距離來進行度量。
②DBSCAN算法需要用戶輸入2個參數:一個是半徑(Eps),表示以給定點P爲中心的圓形鄰域的範圍;另一個是以點P爲中心的鄰域內最少點的數量(MinPts)。如果滿足:以點P爲中心、半徑爲Eps的鄰域內的點的個數不少於MinPts,則稱點P爲核心點。
③DBSCAN聚類使用到一個k-距離的概念,k-距離是指:給定數據集P={p(i);i=0,1,…n},對於任意點P(i),計算點P(i)到集合D的子集S={p(1), p(2), …, p(i-1), p(i+1), …, p(n)}中所有點之間的距離,距離按照從小到大的順序排序,假設排序後的距離集合爲D={d(1), d(2), …, d(k-1), d(k), d(k+1),…,d(n)},則d(k)就被稱爲k-距離。也就是說,k-距離是點p(i)到所有點(除了p(i)點)之間距離第k近的距離。對待聚類集合中每個點p(i)都計算k-距離,最後得到所有點的k-距離集合E={e(1), e(2), …, e(n)}。
④根據經驗計算半徑Eps:根據得到的所有點的k-距離集合E,對集合E進行升序排序後得到k-距離集合E’,需要擬合一條排序後的E’集合中k-距離的變化曲線圖,然後繪出曲線,通過觀察,將急劇發生變化的位置所對應的k-距離的值,確定爲半徑Eps的值。
⑤根據經驗計算最少點的數量MinPts:確定MinPts的大小,實際上也是確定k-距離中k的值,DBSCAN算法取k=4,則MinPts=4。
⑥如果對經驗值聚類的結果不滿意,可以適當調整Eps和MinPts的值,經過多次迭代計算對比,選擇最合適的參數值。可以看出,如果MinPts不變,Eps取得值過大,會導致大多數點都聚到同一個簇中,Eps過小,會導致一個簇的分裂;如果Eps不變,MinPts的值取得過大,會導致同一個簇中點被標記爲噪聲點,MinPts過小,會導致發現大量的核心點。
我們需要知道的是,DBSCAN算法,需要輸入2個參數,這兩個參數的計算都來自經驗知識。半徑Eps的計算依賴於計算k-距離,DBSCAN取k=4,也就是設置MinPts=4,然後需要根據k-距離曲線,根據經驗觀察找到合適的半徑Eps的值。

3.3算法優缺點

優點:對噪聲不敏感;能發現任意形狀的聚類。
缺點:聚類的結果與參數有很大的關係;DBSCAN用固定參數識別聚類,但當聚類的稀疏程度不同時,相同的判定標準可能會破壞聚類的自然結構,即較稀的聚類會被劃分爲多個類或密度較大且離得較近的類會被合併成一個聚類。

3.4常見的算法及改進

DBSCAN對這兩個參數的設置非常敏感。DBSCAN的擴展叫OPTICS(Ordering Points To Identify Clustering Structure)通過優先對高密度(high density)進行搜索,然後根據高密度的特點設置參數,改善了DBSCAN的不足。下圖就是表現了DBSCAN對參數設置的敏感,你們可以感受下。
這裏寫圖片描述

4、基於網絡的方法(Grid-based methods)

4.1基本思想

基於網絡的方法:這類方法的原理就是將數據空間劃分爲網格單元,將數據對象集映射到網格單元中,並計算每個單元的密度。根據預設的閾值判斷每個網格單元是否爲高密度單元,由鄰近的稠密單元組形成”類“。

4.2算法流程

這些算法用不同的網格劃分方法,將數據空間劃分成爲有限個單元(cell)的網格結構,並對網格數據結構進行了不同的處理,但核心步驟是相同的:
1、 劃分網格
2、 使用網格單元內數據的統計信息對數據進行壓縮表達
3、 基於這些統計信息判斷高密度網格單元
4、 最後將相連的高密度網格單元識別爲簇

4.3算法優缺點

優點:速度很快,因爲其速度與數據對象的個數無關,而只依賴於數據空間中每個維上單元的個數。
缺點:參數敏感、無法處理不規則分佈的數據、維數災難等;這種算法效率的提高是以聚類結果的精確性爲代價的。經常與基於密度的算法結合使用。

4.4常見的算法及改進

STING(STatistical INformation Grid)算法、WAVE-CLUSTER算法和CLIQUE(CLustering In QUEst)是該類方法中的代表性算法。下圖是CLIQUE的一個例子:
這裏寫圖片描述

5、基於模型的方法(Model-based methods)

5.1基本思想

基於模型的方法:爲每簇假定了一個模型,尋找數據對給定模型的最佳擬合,這一類方法主要是指基於概率模型的方法和基於神經網絡模型的方法,尤其以基於概率模型的方法居多。這裏的概率模型主要指概率生成模型(generative Model),同一”類“的數據屬於同一種概率分佈,即假設數據是根據潛在的概率分佈生成的。其中最典型、也最常用的方法就是高斯混合模型(GMM,Gaussian Mixture Models)。基於神經網絡模型的方法主要就是指SOM(Self Organized Maps)了,也是我所知的唯一一個非監督學習的神經網絡了。下圖表現的就是GMM的一個demo,裏面用到EM算法來做最大似然估計。
這裏寫圖片描述

5.2算法流程

【以SOM爲例】SOM神經網絡是由芬蘭神經網絡專家Kohonen教授提出的,該算法假設在輸入對象中存在一些拓撲結構或順序,可以實現從輸入空間(n維)到輸出平面(2維)的降維映射,其映射具有拓撲特徵保持性質,與實際的大腦處理有很強的理論聯繫。
SOM網絡包含輸入層和輸出層。輸入層對應一個高維的輸入向量,輸出層由一系列組織在2維網格上的有序節點構成,輸入節點與輸出節點通過權重向量連接。學習過程中,找到與之距離最短的輸出層單元,即獲勝單元,對其更新。同時,將鄰近區域的權值更新,使輸出節點保持輸入向量的拓撲特徵。
算法流程:
1、 網絡初始化,對輸出層每個節點權重賦初值;
2、 將輸入樣本中隨機選取輸入向量,找到與輸入向量距離最小的權重向量;
3、定義獲勝單元,在獲勝單元的鄰近區域調整權重使其向輸入向量靠攏;
4、 提供新樣本、進行訓練;
5、收縮鄰域半徑、減小學習率、重複,直到小於允許值,輸出聚類結果。

5.3算法優缺點

優點:對”類“的劃分不那麼”堅硬“,而是以概率形式表現,每一類的特徵也可以用參數來表達。
缺點:執行效率不高,特別是分佈數量很多並且數據量很少的時候。

5.4常見的算法及改進

基於概率模型的最典型、也最常用的方法就是高斯混合模型(GMM,Gaussian Mixture Models)。基於神經網絡模型的方法主要就是指SOM(Self Organized Maps)了,也是我所知的唯一一個非監督學習的神經網絡了。

6、基於模糊的聚類(FCM模糊聚類)

6.1基本思想

1965年美國加州大學柏克萊分校的扎德教授第一次提出了‘集合’的概念。經過十多年的發展,模糊集合理論漸漸被應用到各個實際應用方面。爲克服非此即彼的分類缺點,出現了以模糊集合論爲數學基礎的聚類分析。用模糊數學的方法進行聚類分析,就是模糊聚類分析。
基於模糊集理論的聚類方法,樣本以一定的概率屬於某個類。比較典型的有基於目標函數的模糊聚類方法、基於相似性關係和模糊關係的方法、基於模糊等價關係的傳遞閉包方法、基於模 糊圖論的最小支撐樹方法,以及基於數據集的凸分解、動態規劃和難以辨別關係等方法。FCM算法是一種以隸屬度來確定每個數據點屬於某個聚類程度的算法。該聚類算法是傳統硬聚類算法的一種改進。

6.2算法流程

FCM模糊聚類算法流程:
1、 標準化數據矩陣;
2、 建立模糊相似矩陣,初始化隸屬矩陣;
3、 算法開始迭代,直到目標函數收斂到極小值;
4、 根據迭代結果,由最後的隸屬矩陣確定數據所屬的類,顯示最後的聚類結果。
FCM算法需要兩個參數一個是聚類數目C,另一個是參數m。一般來講C要遠遠小於聚類樣本的總個數,同時要保證C>1。對於m,它是一個控制算法的柔性的參數,如果m過大,則聚類效果會很次,而如果m過小則算法會接近HCM聚類算法。
算法的輸出是C個聚類中心點向量和C*N的一個模糊劃分矩陣,這個矩陣表示的是每個樣本點屬於每個類的隸屬度。根據這個劃分矩陣按照模糊集合中的最大隸屬原則就能夠確定每個樣本點歸爲哪個類。聚類中心表示的是每個類的平均特徵,可以認爲是這個類的代表點。

6.3算法優缺點

優點:從算法的推導過程中我們不難看出,算法對於滿足正態分佈的數據聚類效果會很好,另外,算法對孤立點是敏感的。
缺點:由於不能確保FCM收斂於一個最優解。算法的性能依賴於初始聚類中心。因此,我們要麼用另外的快速算法確定初始聚類中心,要麼每次用不同的初始聚類中心啓動該算法,多次運行FCM。

6.4常見的算法及改進

模糊C均值(簡稱FCM)聚類算法是HCM聚類算法的改進。

7、其他聚類

除此以外還有一些其他新的發展方法,在此只簡要介紹。

7.1基於約束的方法

真實世界中的聚類問題往往是具備多種約束條件的 , 然而由於在處理過程中不能準確表達相應的約束條件、不能很好地利用約束知識進行推理以及不能有效利用動態的約束條件 , 使得這一方法無法得到廣泛的推廣和應用。這裏的約束可以是對個體對象的約束 , 也可以是對聚類參數的約束 , 它們均來自相關領域的經驗知識。該方法的一個重要應用在於對存在障礙數據的二維空間數據進行聚類。 COD (Clustering with Ob2structed Distance) 就是處理這類問題的典型算法 , 其主要思想是用兩點之間的障礙距離取代了一般的歐氏距離來計算其間的最小距離。

7.2量子聚類:

受物理學中量子機理和特性啓發,可以用量子理論解決聚類記過依賴於初值和需要指定類別數的問題。一個很好的例子就是基於相關點的 Pott 自旋和統計機理提出的量子聚類模型。它把聚類問題看做一個物理系統。並且許多算例表明,對於傳統聚類算法無能爲力的幾種聚類問題,該算法都得到了比較滿意的結果。

7.3核聚類

核聚類方法增加了對樣本特徵的優化過程,利用 Mercer 核 把輸入空間的樣本映射到高維特徵空間,並在特徵空間中進行聚類。核聚類方法是普適的,並在性能上優於經典的聚類算法,它通過非線性映射能夠較好地分辨、提 取並放大有用的特徵,從而實現更爲準確的聚類;同時,算法的收斂速度也較快。在經典聚類算法失效的情況下,核聚類算法仍能夠得到正確的聚類。代表算法有SVDD算法,SVC算法。

7.4譜聚類

首先根據給定的樣本數據集定義一個描述成對數據點相似度的親合矩陣,並計算矩陣的特徵值和特徵向量,然後選擇合適的特徵向量聚類不同的數據點。譜聚類算法最初用於計算機視覺、VLSI設計等領域,最近纔開始用於機器學習中,並迅速成爲國際上機器學習領域的研究熱點。
譜聚類算法建立在圖論中的譜圖理論基礎上,其本質是將聚類問題轉化爲圖的最優劃分問題,是一種點對聚類算法。
這裏寫圖片描述

三、方法擴展

1、數據簡化方法

其實上面提到的很多算法就是對數據做了簡化,才得以具備處理大規模數據的能力,比如BIRCH。但其實你可以任意組合,所以理論上把數據簡化的方法和上面提到的十幾種聚類算法結合使用,可以有上百個算法了。
(1)變換(Data Transformation):離散傅里葉變換(Discrete Fourier Transformation)可以提取數據的頻域(frequency domain)信息,離散小波變換(Discrete Wavelet Transformation)除了頻域之外,還可以提取到時域(temporal domain)信息。
(2)降維(Dimensionality Reduction):在降維的方法中,PCA(Principle Component Analysis)和SVD(Singular Value Decomposition)作爲線性方法,受到最廣泛的應用。還有像MDS(Multi-Dimensional Scaling)什麼的,不過只是作爲PCA的一個擴展,給我的感覺是中看不中用。這幾個方法侷限肯定是無法處理非線性特徵明顯的數據。處理非線性降維的算法主要是流形學習(Manifold Learning),這又是一大塊內容,裏面集中常見的算法包括ISOMAP、LLE(Locally Linear Embedding)、MVU(Maximum variance unfolding)、Laplacian eigenmaps、Hessian eigenmaps、Kernel PCA、Probabilistic PCA等等。流形學習還是挺有趣的,而且一直在發展。關於降維在聚類中的應用,最著名的應該就是譜聚類(Spectral Clustering),就是先用Laplacian eigenmaps對數據降維(簡單地說,就是先將數據轉換成鄰接矩陣或相似性矩陣,再轉換成Laplacian矩陣,再對Laplacian矩陣進行特徵分解,把最小的K個特徵向量排列在一起),然後再使用k-means完成聚類。譜聚類是個很好的方法,效果通常比k-means好,計算複雜度還低,這都要歸功於降維的作用。
(3)抽樣(Sampling):最常用的就是隨機抽樣(Random Sampling)咯,如果你的數據集特別大,隨機抽樣就越能顯示出它的低複雜性所帶來的好處。比如CLARA(Clustering LARge Applications)就是因爲k-medoids應對不了大規模的數據集,所以採用sampling的方法。一般抽樣法採用的不多。

2、相似性衡量

前面提到聚類其實就是比較相似性的。(其實,本部分可能放到前面第一部分會好些。)
相似性衡量又可以細分爲直接法和間接法(答主自己取的名字,求輕拍):直接法是直接求取input data的相似性,間接法是求取data中提取出的features的相似性。但無論是求data還是feature的相似性,方法都是這麼幾種:
(1)距離。距離主要就是指Minkovski距離。這個名字雖然聽起來陌生,但其算法就是Lp norm的算法,如果是L1 norm,那就是絕對值/曼哈頓距離(Manhattan distance);如果是L2 norm,那就是著名的歐式距離(Euclidean distance)了,也是應用最廣泛的;如果L無窮範式,supremum距離,好像也有叫切比雪夫距離的,但就很少有人用了。另外,還有Mahalanobis距離,目前來看主要應用於Gaussian Mixture Model(GMM),還有Lance&Williams距離等等,但幾乎沒見過求距離的時候會專門用這個的。
(2)相似係數。主要有夾角餘弦和相關係數。相關係數的應用也非常廣泛,其主要優勢是它不受原線性變換的影響,而且可以輕鬆地轉換爲距離,但其運算速度要比距離法慢得多,當維數很高的時候。
(3)核函數K(x,y)。定義在RdXRd” role=”presentation” style=”position: relative;”>RdXRdRdXRd上的二元函數,本質上也是反映x和y的距離。核函數的功能就是把數據從低維空間投影(project)到高維空間去。
(4)DTW(dynamic time warping)。這是一種非常特殊的距離算法,它可以計算兩個不同長度的向量的距離,也可以對兩對向量中不同時間段內的數據做匹配。DTW主要用在時間序列的部分場合裏。

四、參考資料

知乎
https://www.zhihu.com/question/34554321
四種聚類方法比較
http://blog.csdn.net/zhoubl668/article/details/7881313
基於網格的聚類算法https://www.qcloud.com/community/article/539270
FCM聚類算法
http://blog.csdn.net/sin_geek/article/details/22896197
https://www.cnblogs.com/sddai/p/6259553.html

        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/markdown_views-ea0013b516.css">
            </div>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章