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主要用在時間序列的部分場合裡。

四、參考資料