譜聚類(Spectral Clustering)演算法介紹
一. 前言
本來想寫關於聚類系列演算法的介紹,但是聚類系列的其它幾個演算法原理比較簡單,網上有大量的教程可以查閱。這裡主要是介紹一下譜聚類演算法,做一個學習筆記,同時也希望對想要了解該演算法的朋友有一個幫助。關於聚類的其他系列演算法,這裡推薦一個寫的很不錯的部落格。
譜聚類在最近幾年變得受歡迎起來,主要原因就是它實現簡單,聚類效果經常優於傳統的聚類演算法(如K-Means演算法)。剛開始學習譜聚類的時候,給人的感覺就是這個演算法看上去很難,但是當真正的深入瞭解這個演算法的時候,其實它的原理並不難,但是理解該演算法還是需要一定的數學基礎的。如果掌握了譜聚類演算法,會對矩陣分析,圖論和降維中的主成分分析等有更加深入的理解。
本文首先會簡單介紹一下譜聚類的簡單過程,然後再一步步的分解這些過程中的細節以及再這些過程中譜聚類是如何實現的,接著總結一下譜聚類的幾個演算法,再接著介紹譜聚類演算法是如何用圖論知識來描述,最後對本文做一個總結。下面我們就來介紹一下譜聚類的基本原理。
二. 譜聚類的基本原理介紹
2.1 譜和譜聚類
2.1.1 譜
方陣作為線性運算元,它的所有特徵值的全體統稱為方陣的譜。方陣的譜半徑為最大的特徵值。矩陣A的譜半徑是矩陣的最大特徵值。
2.1.2 譜聚類
譜聚類是一種基於圖論的聚類方法,通過對樣本資料的拉普拉斯矩陣的特徵向量進行聚類,從而達到對樣本資料聚類的母的。譜聚類可以理解為將高維空間的資料對映到低維,然後在低維空間用其它聚類演算法(如KMeans)進行聚類。
2.2 譜聚類演算法簡單描述
輸入:n個樣本點和聚類簇的數目k;
輸出:聚類簇
(1)使用下面公式計算的相似度矩陣W;
W為組成的相似度矩陣。
(2)使用下面公式計算度矩陣D;
,即相似度矩陣W的每一行元素之和
D為組成的對角矩陣。
(3)計算拉普拉斯矩陣;
(4)計算L的特徵值,將特徵值從小到大排序,取前k個特徵值,並計算前k個特徵值的特徵向量;
(5)將上面的k個列向量組成矩陣,;
(6)令是的第行的向量,其中;
(7)使用k-means演算法將新樣本點
(8)輸出簇,其中,.
上面就是未標準化的譜聚類演算法的描述。也就是先根據樣本點計算相似度矩陣,然後計算度矩陣和拉普拉斯矩陣,接著計算拉普拉斯矩陣前k個特徵值對應的特徵向量,最後將這k個特徵值對應的特徵向量組成的矩陣U,U的每一行成為一個新生成的樣本點,對這些新生成的樣本點進行k-means聚類,聚成k類,最後輸出聚類的結果。這就是譜聚類演算法的基本思想。相比較PCA降維中取前k大的特徵值對應的特徵向量,這裡取得是前k小的特徵值對應的特徵向量。但是上述的譜聚類演算法並不是最優的,接下來我們一步一步的分解上面的步驟,總結一下在此基礎上進行優化的譜聚類的版本。
2.3 譜聚類演算法中的重要屬性
2.3.1 相似度矩陣介紹
相似度矩陣就是樣本點中的任意兩個點之間的距離度量,在聚類演算法中可以表示為距離近的點它們之間的相似度比較高,而距離較遠的點它們的相似度比較低,甚至可以忽略。這裡用三種方式表示相似度矩陣:一是-近鄰法(-neighborhood graph),二是k近鄰法(k-nearest nerghbor graph),三是全連線法(fully connected graph)。下面我們來介紹這三種方法。
(1)-neighborhood graph:
,表示樣本點中任意兩點之間的歐式距離
用此方法構造的相似度矩陣表示如下:
該相似度矩陣由於距離近的點的距離表示為,距離遠的點距離表示為0,矩陣種沒有攜帶關於資料集的太多的資訊,所以該方法一般很少使用,在sklearn中也沒有使用該方法。
(2)k-nearest nerghbor graph:
由於每個樣本點的k個近鄰可能不是完全相同的,所以用此方法構造的相似度矩陣並不是對稱的。因此,這裡使用兩種方式表示對稱的knn相似度矩陣,第一種方式是如果在的k個領域中或者在的k個領域中,則為與之間的距離,否則為;第二種方式是如果在的k個領域中並且在的k個領域中,則為與之間的距離,否則為。很顯然第二種方式比第一種方式生成的相似度矩陣要稀疏。這兩種方式用公式表達如下:
第一種方式:
第二種方式:
(3)fully connected graph:
該方法就是在演算法描述中的高斯相似度方法,公式如下:
該方法也是最常用的方法,在sklearn中預設的也是該方法,表示任意兩個樣本點都有相似度,但是距離較遠的樣本點之間相似度較低,甚至可以忽略。這裡面的引數控制著樣本點的鄰域寬度,即越大表示樣本點與距離較遠的樣本點的相似度越大,反之亦然。
2.3.2 拉普拉斯矩陣介紹
對於譜聚類來說最重要的工具就是拉普拉斯矩陣了,下面我們來介紹拉普拉斯矩陣的三種表示方法。
(1)未標準化的拉普拉斯矩陣:
未標準化的拉普拉斯矩陣定義如下:
其中W是上節所說的相似度矩陣,D是度矩陣,在演算法描述中有介紹。很顯然,W與D都是對稱矩陣。
未標準化的拉普拉斯矩陣L滿足下面幾個性質:
(a)對任意一個向量都有:
證明如下:
(b)L是對稱的和半正定的,證明如下:
因為,所以,所以為半正定矩陣。由於W和D都是對稱矩陣,所以L為對稱矩陣。
(c)L最小的特徵值為0,且特徵值0所對應的特徵向量為全1向量,證明如下:
令表示的全1向量,則
由D和W的定義可以得出上式。
(d)L有n個非負的實數特徵值:
(2)標準化拉普拉斯矩陣
標準化拉普拉斯矩陣有兩種表示方法,一是基於隨機遊走(Random Walk)的標準化拉普拉斯矩陣和對稱標準化拉普拉斯矩陣,定義如下:
標準化的拉普拉斯矩陣滿足如下性質:
(a)對任意一個向量都有:
(b)當且僅當是的特徵值,對應的特徵向量為時,則是特徵值,對應的特徵向量為u;
(c)當且僅當時,是的特徵值,對應的特徵向量為u;
(d)0是的特徵值,對應的特徵向量為,為的全1向量;0也是的特徵值,對應的特徵向量為;
(e)和是半正定矩陣並且有非負實數特徵值:.
關於各個版本的譜聚類演算法的不同之處,就是在於相似度矩陣的計算方式不同和拉普拉斯矩陣的表示方法不同,其它步驟基本相同。下面就來介紹關於譜聚類的兩個比較流行的標準化演算法。
2.4 標準化譜聚類演算法介紹
2.4.1 隨機遊走拉普拉斯矩陣的譜聚類演算法描述
輸入:n個樣本點和聚類簇的數目k;
輸出:聚類簇
(1)計算的相似度矩陣W;
(2)計算度矩陣D;
(3)計算拉普拉斯矩陣;
(4)計算的特徵值,將特徵值從小到大排序,取前k個特徵值,並計算前k個特徵值的特徵向量;
(5)將上面的k個列向量組成矩陣,;
(6)令是的第行的向量,其中;
(7)使用k-means演算法將新樣本點聚類成簇;
(8)輸出簇,其中,.
2.4.2 對稱拉普拉斯矩陣的譜聚類演算法描述
輸入:n個樣本點和聚類簇的數目k;
輸出:聚類簇
(1)計算的相似度矩陣W;
(2)計算度矩陣D;
(3)計算拉普拉斯矩陣;
(4)計算的特徵值,將特徵值從小到大排序,取前k個特徵值,並計算前k個特徵值的特徵向量;
(5)將上面的k個列向量組成矩陣,;
(6)令是的第行的向量,其中;
(7)對於,將依次單位化,使得;
(8)使用k-means演算法將新樣本點聚類成簇;
(9)輸出簇,其中,.
上面兩個標準化拉普拉斯演算法加上未標準化拉普拉斯演算法這三個演算法中,主要用到的技巧是將原始樣本點轉化為新的樣本點,然後再對新樣本點使用其它的聚類演算法進行聚類,在這裡最後一步用到的聚類演算法不一定非要是KMeans演算法,也可以是其它的聚類演算法,具體根據實際情況而定。在sklearn中預設是使用KMeans演算法,但是由於KMeans聚類對初始聚類中心的選擇比較敏感,從而導致KMeans演算法不穩定,進而導致譜聚類演算法不穩定,所以在sklearn中有另外一個可選項是'discretize',該演算法對初始聚類中心的選擇不敏感。
三. 用切圖的觀點來解釋譜聚類
聚類演算法給我們的直觀上的感覺就是根據樣本點的相似性將他們劃分成不同的組,使得在相同組內的資料點是相似的,不同組之間的資料點是不相似的。對於給定的樣本點計算相似度,形成相似度圖,因而譜聚類的問題可以被重新描述如下:我們想要找到圖形的一個分割槽,使得不同分割槽之間的邊具有非常低的權重(這意味著不同分割槽中的點彼此不相似)並且分割槽內的邊具有高權重(這意味著其中的點彼此相似)。在這個小節我們將討論如何推導譜聚類為近似的圖分割槽的問題。
3.1 最小切(mincut)
對於無向圖G,我們的目標是將圖切成互相沒有連線的子圖,每個子圖點的集合為,其中且。
對於任意兩個子圖點的集合,,我們定義A和B之間的權重切圖為:
對於k個子圖集合,我們定義切圖cut為:
其中,為A的補集。
我們可以想到的切圖方法就是最小化上式,也就是使各個組之間的權重儘可能的小,但是在許多情況下mincut只是簡單的將圖中的一個定點與其餘的頂點分開,在並不是我們想要的結果,合理的切分結果應該是組內的樣本點儘可能的多。所以mincut在實際中並不常用。下面我們介紹另外兩個切圖方式RatioCut和Ncut。
3.2 RatioCut切圖
在RatioCut切圖中,不僅要考慮使不同組之間的權重最小化,也考慮了使每個組中的樣本點儘量多。
定義為子集A中的頂點個數,RatioCut的表示式如下:
將圖中頂點V分成k個分割槽,我們定義指示向量為:,其中:
我們令為包含k個指示向量作為列向量的矩陣,注意到H的列向量彼此正交,即,然後我們計算下式:
,證明如下:
結合上面可以得到:
其中Tr(A)表示矩陣A的跡,也就是矩陣A的對角線之和。
所以我們此時的目標函式成為:
,約束條件為:
注意到我們H矩陣裡面的每一個指示向量都是n維的,向量中每個變數的取值為0或者,就有種取值,有k個子圖的話就有k個指示向量,共有種H,因此找到滿足上面優化目標的H是一個NP難的問題。那麼是不是就沒有辦法了呢?
注意觀察中每一個優化子目標,其中是單位正交基, 為對稱矩陣。在PCA中,我們的目標是找到協方差矩陣(對應此處的拉普拉斯矩陣L)的最大的特徵值,而在我們的譜聚類中,我們的目標是找到目標的最小的特徵值,得到對應的特徵向量,此時對應二分切圖效果最佳。也就是說,我們這裡要用到維度規約的思想來近似去解決這個NP難的問題。
對於,我們的目標是找到最小的L的特徵值,而對於,則我們的目標就是找到k個最小的特徵值,一般來說,k遠遠小於n,也就是說,此時我們進行了維度規約,將維度從n降到了k,從而近似可以解決這個NP難的問題。
通過找到L的最小的k個特徵值,可以得到對應的k個特徵向量,這k個特徵向量組成一個nxk維度的矩陣,即為我們的H。一般需要對H矩陣按行做標準化,即
由於我們在使用維度規約的時候損失了少量資訊,導致得到的優化後的指示向量h對應的H現在不能完全指示各樣本的歸屬,因此一般在得到nxk維度的矩陣H後還需要對每一行進行一次傳統的聚類,比如使用K-Means聚類。
3.3 Ncut切圖
Ncut在最小化損失函式之外,還考慮了子圖之間的權重大小。Ncut切圖與Ratiocut類似,只是把RatioCut分母中的替換成了,其中:
由於子圖樣本的個數多並不一定權重就大,我們切圖時基於權重也更合我們的目標,因此一般來說Ncut切圖優於RatioCut切圖。所以Ncut的目標函式如下:
,證明同上
在Ncut中使用子圖權重來表示指示向量h,定義如下:
我們的優化目標函式是:
但是此時我們的,而是。推導如下:
也就是說,此時我們的優化目標最終為:
約束條件:
令,則問題變成如下形式:
約束條件為:
可以發現這個式子和RatioCut基本一致,只是中間的L變成了。這樣我們就可以繼續按照RatioCut的思想,求出的最小的前k個特徵值,然後求出對應的特徵向量,並標準化,得到最後的特徵矩陣,最後對進行一次傳統的聚類(比如K-Means)即可。
一般來說,相當於對拉普拉斯矩陣做了一次標準化,即,所以Ncut會產生標準化的譜聚類,而RatioCut會產生未標準化的譜聚類。
四. 譜聚類演算法的優缺點
4.1 優點
(1)當聚類的類別個數較小的時候,譜聚類的效果會很好,但是當聚類的類別個數較大的時候,則不建議使用譜聚類;
(2)譜聚類演算法使用了降維的技術,所以更加適用於高維資料的聚類;
(3)譜聚類只需要資料之間的相似度矩陣,因此對於處理稀疏資料的聚類很有效。這點傳統聚類演算法(比如K-Means)很難做到
(4)譜聚類演算法建立在譜圖理論基礎上,與傳統的聚類演算法相比,它具有能在任意形狀的樣本空間上聚類且收斂於全域性最優解
4.2 缺點
(1)譜聚類對相似度圖的改變和聚類引數的選擇非常的敏感;
(2)譜聚類適用於均衡分類問題,即各簇之間點的個數相差不大,對於簇之間點個數相差懸殊的聚類問題,譜聚類則不適用;