1. 程式人生 > >譜聚類(spectral clustering)及其實現詳解

譜聚類(spectral clustering)及其實現詳解

Preface
開了很多題,手稿都是寫好一直思考如何放到CSDN上來,一方面由於公司技術隱私,一方面由於面向物件不同,要大改,所以一直沒貼出完整,希望日後可以把開的題都補充全。

先把大綱列出來:

一、從狄多公主圈地傳說說起
二、譜聚類的演算
  (一)、演算
      1、譜聚類的概覽
      2、譜聚類構圖
      3、譜聚類切圖
        (1)、RatioCut
        (2)、Ncut
        (3)、一點題外話
  (二)、pseudo-code
三、譜聚類的實現(scala)
  (一)、Similarity Matrix
  (二)、kNN/mutual kNN
  (三)、Laplacian Matrix
  (四)、Normalized
  (五)、Eigenvector(Jacobi methond)
  (六)、kmeans/GMM
四、一些參考文獻

一、從狄多公主圈地傳說說起

       譜聚類(spectral clustering)的思想最早可以追溯到一個古老的希臘傳說,話說當時有一個公主,由於其父王去世後,長兄上位,想獨攬大權,便殺害了她的丈夫,而為逃命,公主來到了一個部落,想與當地的酋長買一塊地,於是將身上的金銀財寶與酋長換了一塊牛皮,且與酋長約定只要這塊牛皮所佔之地即可。聰明的酋長覺得這買賣可行,於是乎便答應了。殊不知,公主把牛皮撕成一條條,沿著海岸線,足足圍出了一個城市。
       故事到這裡就結束了,但是我們要說的才剛剛開始,狄多公主圈地傳說,是目前知道的最早涉及Isoperimetric problem(等周長問題)的,具體為如何在給定長度的線條下圍出一個最大的面積,也可理解為,在給定面積下如何使用更短的線條,而這,也正是譜圖聚類想法的端倪,如何在給定一張圖,拿出“更短”的邊來將其“更好”地切分。而這個“更短”的邊,正是對應了spectral clustering中的極小化問題,“更好”地切分,則是對應了spectral clustering中的簇聚類效果。
       譜聚類最早於1973年被提出,當時Donath 和 Hoffman第一次提出利用特徵向量來解決譜聚類中的f向量選取問題,而同年,Fieder發現利用倒數第二小的特徵向量,顯然更加符合f向量的選取,同比之下,Fieder當時發表的東西更受大家認可,因為其很好地解決了譜聚類極小化問題裡的NP-hard問題,這是不可估量的成就,雖然後來有研究發現,這種方法帶來的誤差,也是無法估量的,下圖是Fielder老爺子,於去年15年離世,緬懷。
SC



二、譜聚類的演算

(一)、演算

1、譜聚類概覽

       譜聚類演化於圖論,後由於其表現出優秀的效能被廣泛應用於聚類中,對比其他無監督聚類(如kmeans),spectral clustering的優點主要有以下:

1.過程對資料結構並沒有太多的假設要求,如kmeans則要求資料為凸集。
2.可以通過構造稀疏similarity graph,使得對於更大的資料集表現出明顯優於其他演算法的計算速度。
3.由於spectral clustering是對圖切割處理,不會存在像kmesns聚類時將離散的小簇聚合在一起的情況。
4.無需像GMM一樣對資料的概率分佈做假設。

       同樣,spectral clustering也有自己的缺點,主要存在於構圖步驟,有如下:

1.對於選擇不同的similarity graph比較敏感(如 epsilon-neighborhood, k-nearest neighborhood,fully connected等)。
2.對於引數的選擇也比較敏感(如 epsilon-neighborhood的epsilon,k-nearest neighborhood的k,fully connected的 )。

       譜聚類過程主要有兩步,第一步是構圖,將取樣點資料構造成一張網圖,表示為G(V,E),V表示圖中的點,E表示點與點之間的邊,如下圖:
              譜聚類構圖
                            圖1 譜聚類構圖(來源wiki)
       第二步是切圖,即將第一步構造出來的按照一定的切邊準則,切分成不同的圖,而不同的子圖,即我們對應的聚類結果,舉例如下:
              切圖4
                            圖2 譜聚類切圖
       初看似乎並不難,但是…,下面詳細說明推導。

2、譜聚類構圖

       在構圖中,一般有三種構圖方式:
       1. ε-neighborhood
       2. k-nearest neighborhood
       3. fully connected
       前兩種可以構造出稀疏矩陣,適合大樣本的專案,第三種則相反,在大樣本中其迭代速度會受到影響制約,在講解三種構圖方式前,需要引入similarity function,即計算兩個樣本點的距離,一般用歐氏距離:si,j=xixj2, si,j表示樣本點xixj的距離,或者使用高斯距離si,j=exixj22σ2,其中σ 的選取也是對結果有一定影響,其表示為資料分佈的分散程度,通過上述兩種方式之一即可初步構造矩陣S:Si,j=[s]i,j,一般稱 為Similarity matrix(相似矩陣)。
       對於第一種構圖ε -neighborhood,顧名思義是取si,jε的點,則相似矩陣S可以進一步重構為鄰接矩陣(adjacency matrix)W :

Wi,j={0,ifsi,j>εε,ifsi,jε
       可以看出,在ε-neighborhood重構下,樣本點之間的權重沒有包含更多的資訊了。
       對於第二種構圖k-nearest neighborhood,其利用KNN演算法,遍歷所有的樣本點,取每個樣本最近的k個點作為近鄰,但是這種方法會造成重構之後的鄰接矩陣W非對稱,為克服這種問題,一般採取下面兩種方法之一:
       一是隻要點xixj的K個近鄰中或者xjxi的K個近鄰中,則保留si,j,並對其做進一步處理W,此時 為:
Wi,j=Wj,i=0,ifxiKNN(Xj)andxjKNN(Xi)exixj22σ2,ifxiKNN(Xj)orxjKNN(Xi)
       二是必須滿足點 在 的K個近鄰中且 在 的K個近鄰中,才會保留si,j並做進一步變換,此時W為:
Wi,j=Wj,i=0,ifxiKNN(Xj)or