通俗理解譜聚類算法

譜聚類(Spectral Clustering, SC)是一種基於圖論的聚類方法。

將帶權無向圖劃分爲兩個或兩個以上的最優子圖,使子圖內部儘量相似,而子圖間距離儘量距離較遠,以達到常見的聚類的目的。

"帶權無向圖"這個詞太學術了,我們換一種叫法,即:相似度矩陣。

假設我們有一個相似度矩陣,矩陣中存的是所有對象的兩兩相似度。

 

那麼這個矩陣應該有如下性質:

  1. 矩陣爲N * N,N爲對象總數
  2. 矩陣對角線的值爲0,自己和自己相似個毛啊
  3. 矩陣爲對稱矩陣,及相似度是無向的

我們將該矩陣記爲:W。

 

譜聚類的任務就是根據這個相似度矩陣,將這一大堆對象,分成不同的小堆,小堆內部的對象彼此都很像,小堆之間則不像。

 

譜聚類本身也提供了好幾種不同的分割(cut)方法,每種方法對應一種優化目標。

本文只介紹其中比較常見,也是比較實用,而且實現起來也比較經濟的一種:Nomarlized cut.

 

說白了,就是你最應該掌握和使用的一種,好了,進入正題。

 

當你得到一個相似度矩陣W後,即可通過以下幾個步驟,來得到對應的圖分割方案:

1. 計算對角矩陣D[N*N]。,公式如下:  

 

 

 

 

   D矩陣爲對角矩陣,對角線上的值爲W矩陣中對應行或列的和。

 

2. 計算拉普拉斯矩陣(Laplacian) L:

3.  歸一化L矩陣

4. 計算歸一化後L矩陣的K個最小特徵值及對應的特徵向量

    將K個特徵向量豎着並排放在一起,形成一個N*K的特徵矩陣,記爲Q。

 

5. 對特徵矩陣Q做kmeans聚類,得到一個N維向量C。

    分別對應相似度矩陣W中每一行所代表的對象的所屬類別,這也就是最終的聚類結果。

 

此外:

關於第3步中,對拉普拉斯矩陣歸一化時,歸一化公式進行變換得到:

 

 

            令:

 

 

則在第4步中,我們可以將求L的K個最小特徵值及其對應的特徵向量的問題,轉化爲求矩陣E的K個最大的特徵值及其對應的特徵向量。

        ---可以證明:L的K個最小特徵值對應的特徵向量,分別對應於E的K個最大的特徵值對應的特徵向量。

            且矩陣L的最小特徵值爲0,對應於矩陣E最大的特徵值爲1.矩陣L的第K小特徵值等於1-矩陣E的第K大特徵值

 

之所以要這麼做,是因爲在數值計算中,求矩陣的最大特徵值,往往要比求最小特徵值更方便和高效。

 

OK,至此,譜聚類就完成了,關於譜聚類的其他問題,諸如公式的推導,以及譜聚類的物理意義等,可參考博文:譜聚類算法

 

譜聚類的實現很簡單,按照上述5個步驟按部就班即可,在matlab中只需寥寥數行:

 

Matlab代碼  收藏代碼
  1. function C = SpectralClustering(W, k)  
  2.     [n,m] = size(W)    
  3.     s = sum(W);  
  4.     D = full(sparse(1:n, 1:n, s));  
  5.     E = D^(-1/2)*W*D^(-1/2);  
  6.     [Q, V] = eigs(E, k);  
  7.     C = kmeans(Q, k);  
  8. end  

 

在整個實現過程中,比較麻煩的就是E矩陣特徵值的求解。

在自己實現時,可以調用已有的線性代數的包來完成這一步。

發佈了30 篇原創文章 · 獲贊 69 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章