譜聚類(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年離世,緬懷。
二、譜聚類的演算
(一)、演算
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)
第二步是切圖,即將第一步構造出來的按照一定的切邊準則,切分成不同的圖,而不同的子圖,即我們對應的聚類結果,舉例如下:
圖2 譜聚類切圖
初看似乎並不難,但是…,下面詳細說明推導。
2、譜聚類構圖
在構圖中,一般有三種構圖方式:
1.
2. k-nearest neighborhood
3. fully connected
前兩種可以構造出稀疏矩陣,適合大樣本的專案,第三種則相反,在大樣本中其迭代速度會受到影響制約,在講解三種構圖方式前,需要引入similarity function,即計算兩個樣本點的距離,一般用歐氏距離:
對於第一種構圖
可以看出,在
對於第二種構圖k-nearest neighborhood,其利用KNN演算法,遍歷所有的樣本點,取每個樣本最近的k個點作為近鄰,但是這種方法會造成重構之後的鄰接矩陣
一是隻要點
二是必須滿足點 在 的K個近鄰中且 在 的K個近鄰中,才會保留