前言:關於譜聚類,已經有很多厲害的老師和大牛寫過教程博客等,也有很不錯的tutorial文章可供參考。此博文僅記述個人的一些總結、思考、疑問,算是對現有譜聚類學習資源的一個小補充。
1. 譜聚類簡述
說到聚類,可能最先想到的就是經典的Kmeans算法。但是,Kmeans的應用是有前提條件的,它假設(目標式中的)誤差服從標準正態分佈,因此,Kmeans在處理非標準正態分佈和非均勻樣本集時,聚類效果會比較差。對於非專業滴同志們,這種統計學術語聽起來總是讓人覺得有點虛、不好懂,下面給兩個圖,直觀感受一下。
圖1.1 (a)非標準正態分佈集 (b)非均勻分佈集 (c) 處理two moon數據集kmeans可能的聚類結果
對於圖1.1中給出的情形,用Kmeans聚類就顯得有些力不從心了,比如對於two moon這個toy dataset,理想情況下的結果應該和(a)中所示一致,但kmeans聚類後的效果可能是(c)中的樣子。
爲了處理這種奇奇怪怪形狀分佈的數據,譜聚類(spectral clustering)該出場了。不同於Kmeans採用數據點和聚類中心的歐式距離作爲相似性度量,譜聚類是基於數據的相似度矩陣,也即,只用給出數據的相似度矩陣而不用給出數據本身,譜聚類就可以得到最終的聚類結果。這裏先提一句,譜聚類算法得到最終聚類結果,一般是通過Kmeans,就是說Kmeans成爲了譜聚類算法的一部分。另外應該指出的是,譜聚類是一類基於譜方法的聚類算法 ,只不過平常提到譜聚類,一般都是指代最原始和經典的那兩個(Ncut,Ratio Cut),在很多文章和博客裏,看到的算法僞代碼就是它們的。還有,爲什麼取名叫譜聚類,個人覺着這個“譜”字,正表明了求解過程與特徵分解有關。
2. 公式化表述
在這一節,我們來看一下圖論中的標準切割(Ncut)和比例切割(RatioCut),並由此得到標準化的和非標準化的譜聚類目標函數。下面咱們先簡單瞭解一些圖論中的概念(這方面基礎內容不瞭解的話,可求助wikipedia/baidu,或見其它博文介紹,或者從公式推導角度直接往下看,也沒多大問題)。
設G = ( V , E ) 表示一個帶權無向圖,其中V = { v i } n i = 1 是頂點,可以對應成n個數據點,E 是用來連接頂點的邊的集合,每條邊上帶有權值,v i 和v j 之間的權值大小用w i j 表示,由此可得到數據之間的相似度矩陣W ,它的第i行第j列元素就是w i j 。定義頂點v i 的度爲d i = ∑ n j = 1 w i j , 則度矩陣D 就是由{ d i } n i = 1 作爲對角元素組成的對角矩陣。傳聞中的拉普拉斯矩陣(Laplacian matrix)就可以這樣定義L = D − W ,標準形式爲L ~ = I n − D − 1 / 2 W D − 1 / 2 ,這裏I n 表示大小爲nxn的單位陣。
繼續,來看看什麼是“割–Cut”。給定一個頂點集A ⊂ V ,其補集表示爲A ¯ 。評估集合A 的大小有兩種方式,一種是用A 中的頂點個數| A | 來衡量,一種是用A 中的頂點的度之和v o l ( A ) = ∑ i ∈ A d i 來衡量。A 和A ¯ 之間的割可以這樣來定義:c u t ( A , A ¯ ) = ∑ i ∈ A , j ∈ A ¯ w i j 。
給了一堆概念和定義,一不小心就讓人如墜雲霧,爲什麼要扯出什麼圖論?這個“割”真的是用小刀割東西的那個“割”嘛?首先第一個問題,把數據點看作是一個圖中的頂點,繼而把對數據的處理,轉化爲對圖的分析,這種隱去實際意義,抓住問題本質的過程,就是建模,模型建好了,在理論上求解完畢了,再反過來對應回一個個實際的問題。事實上,很多實際生活中的問題,就是通過圖來分析的,比如實現手機地圖軟件裏的實時導航功能,就是一個路徑規劃的問題—-兩個目的地,即圖中兩個頂點,是否可達,即是否存在一系列邊將這兩個頂點連起來,最短路徑又是哪條,即怎麼走最近。第二個問題,就是你想的那個割,這裏割的是圖中的邊。想一想,要把數據點聚類成若干個簇,對應就是把圖中的頂點分成若干個組,我們很自然地希望組內頂點間的關聯度大(w i j 大),組間頂點的關聯度小,也就是說,我們可以把權值小的那些邊給割斷,保留權值大的那些邊,以達到分組的目的。
2.1 由Ratio Cut到非標準譜聚類
假設我們要把頂點集分成k個組—-聚類成k個簇,A 1 , . . . , A k ,滿足A i ∩ A j = ∅ ,A 1 ∪ , . . . , ∪ A k = V 。我們想讓被割去的都是一些權值小的邊,即保證了關聯度大的頂點被分到同一個組內,那麼我們可以最小化下面的比例切割目標式:
R a t i o C u t ( A 1 , . . . , A k ) = ∑ i = 1 k c u t ( A i , A i ¯ ) | A i | (2.1)
式(2.1)中,分母的作用是尋求一種balance,努力讓各個簇的大小相近,避免有的簇包含很多數據點,而有的簇僅包含一個或幾個數據點。這裏提一句,還有一種最小割(mincut),就是隻將分子上的各項求和,沒有考慮分母項,即對各簇的大小沒有限制。式(2.1)這個目標式好提出,但是不好解啊—-NP hard問題,怎麼辦,那就繞點兒路,退而求它的鬆弛問題(relaxed problem),湊合得個近似解好了。
定義k個簇指示向量(indicator vector) f j = ( f 1 j , . . . , f n j ) ′ ,其中
f i j = ⎧ ⎩ ⎨ 1 / | A j | − − − √ , 0 , if v i ∈ A j otherwise (2.2)
上式中
i = 1 , … , n , j = 1 , … , k 。將這k個指示向量按列排成矩陣,則得到指示矩陣(indicator matrix)
F ∈ R n × k ,根據前面給的定義,可以推出
F 滿足:
F T F f ′ i L f i = I k = c u t ( A i , A i ¯ ) | A i | (2.3) (2.4)
這裏式(2.4)的推導對於譜聚類的提出和理解還是比較重要的,它將一個圖切割的問題,巧妙且簡潔地用數據的拉普拉斯矩陣和簇指示向量來表示,繼而聚類問題實際就變成了求解簇指示向量
f 。爲了不沖淡主線,證明部分作爲附錄補在文末,供有需要者參考。基於式(2.4),最小化Ratio Cut就可以寫成如下的問題:
min F ∈ R n × k T r ( F T L F ) s . t . F defined as Eq.(2.2) , F T F = I k . (2.5)
Tr()表示矩陣的跡,即對角元素之和。式(2.5)是帶有正交約束,且變量爲離散值的最小化問題,這裏相比式(2.1)只是表述形式變了,依然是不好求解的,這時就需要發揮不要臉之精神,對於使問題變得困難的那個離散定義,我們假裝看不見,假裝看不見,然後問題就變成了:
min F ∈ R n × k T r ( F T L F ) s . t . F T F = I k . (2.6)
這個就是Ratio Cut的鬆弛版問題(the relaxation of Ratio Cut),原來指示向量的元素只能取固定的幾個非負值,現在我們將它鬆弛成可以取任意實值。好了,我們給這個新的比較好解的問題取個名兒,對了,就是譜聚類!這裏拉普拉斯矩陣L是非標準的形式,所以式(2.6)就是非標準譜聚類的目標函數。
2.2 由Ncut到標準譜聚類
標準切割(Normalized Cut, Ncut)和比例切割很類似,只是衡量簇的大小時是採用的另一種方式,Ncut的目標式是:
N C u t ( A 1 , . . . , A k ) = ∑ i = 1 k c u t ( A i , A i ¯ ) v o l ( A i ) (2.7)
同樣,定義k個指示向量
f j = ( f 1 j , . . . , f n j ) ′ ,其中
f i j = ⎧ ⎩ ⎨ 1 / v o l ( A i ) − − − − − − √ , 0 , if v i ∈ A j otherwise (2.8)
這時,我們可以推出
F 滿足:
F T D F f ′ i L f i = I k = c u t ( A i , A i ¯ ) v o l ( A i ) (2.9) (2.10)
基於式(2.10),再次假裝看不見指示向量的離散定義,最小化鬆弛版的NCut就是:
min F ∈ R n × k T r ( F T L F ) s . t . F T D F = I k . (2.11)
我們令
H = D 1 / 2 F ,則上式可以寫成:
min H ∈ R n × k T r ( H T L ~ H ) s . t . H T H = I k . (2.12)
採用標準化的拉普拉斯矩陣
L ~ ,我們得到了標準形式的譜聚類目標式。
3. 目標函數的求解
3.1 瑞利商(Rayleigh quotient)
設A ∈ R n × n 是一個對稱陣,0 ≠ x ∈ R n ,稱
R ( x ) = x T A x x T x (3.1)
爲矩陣
A 的瑞利商。下面討論對稱陣的特徵值與它的瑞利商的極值之間的關係。
定理 :將A的特徵值(都是實數)按從大到小的順序排列爲λ 1 ≥ λ 2 ≥ . . . ≥ λ n ,則有:
λ 1 = max x ≠ 0 R ( x ) , λ n = min x ≠ 0 R ( x )
證明 :令
Λ = d i a g ( λ 1 , . . . , λ n ) ,對於對稱陣
A ,一定存在正交陣
Q 使
A 對角化,即
Q T A Q = Λ ,將
Q 按列分塊爲
Q = ( q 1 , . . . , q n ) ,則有
A q j = λ j q j ,注意這裏
q 1 , . . . , q n 是
A 的兩兩正交的單位特徵向量。對於非零向量
x ,存在一組數
c 1 , . . . c n ,使得
x = c 1 q 1 + . . . + c n q n ( | c 1 | 2 + . . . + | c n | 2 ≠ 0 ) .
因此有
A x = c 1 λ 1 q 1 + . . . + c n λ n q n
於是
R ( x ) = x T A x x T x = λ 1 | c 1 | 2 + … + λ n | c n | 2 | c 1 | 2 + … + | c n | 2
由此可得
λ n ≤ R ( x ) ≤ λ 1 ,容易驗證
R ( q 1 ) = λ 1 ,
R ( q n ) = λ n ,證畢
■ 。
對於非標準譜聚類目標式(2.6),因爲f T i f i = 1 爲常數,所以
min f T i L f i ⇔ min R ( f i )
即
f i 的解就是拉普拉斯矩陣
L 的最小特徵值對應的特徵向量,因此,
F 就是由
L 的前k個最小的特徵值對應的特徵向量按列組成(同樣,
H 就是
L ~ 前k個最小的特徵向量)。接下來,我們得從這個連續取值的指示矩陣
F 出發,想辦法得到最終的聚類結果。如果是原問題(Ratio Cut/Ncut)的離散解,那我們直接對照定義就可以得到數據所屬的簇標號,現在這種連續的情況,我們可以把
F 的每一行,看作是一個數據點在k維空間中的表達,然後採用Kmeans算法,對這n個k維的數據點進行聚類,得到最終的聚類結果。這裏Kmeans操作,可以看作一個離散化的過程,所以
譜聚類實際上做的,就是先將NP–hard的離散問題鬆弛爲好求解的連續問題,再將連續問題的解離散化,得到最終的聚類結果 。
在上一節中,我們假裝看不見離散約束從而得到了譜聚類的目標式,大家心裏一定會有困惑,哪能這樣搞,那最後的結果肯定不是原問題的解了呀。的確,這麼粗暴地簡化問題,在理論上是不能保證我們最後得到的解,和原問題(Ratio Cut/Ncut)的解之間有什麼必然聯繫的,只不過在實際問題中,譜聚類取得的效果的確還是不錯的。
圖3.1 一個反例:Ratio Cut和譜聚類得到截然不同的解,藍色的線表示Ratio Cut切割方式,只用兩刀,綠色線是非標準譜聚類的結果,需要切k刀,具體細節說明請參見參考文獻[1]。
【注】 :根據定義,可知拉普拉斯矩陣L是一個對稱半正定陣,即所有特徵值都爲非負實數,且L的最小特徵值爲0。對於一個全連通圖,L只有一個0特徵值,且對應的特徵向量爲常1向量(constant one vector),就是所有元素都取相同值的單位向量,這種指示向量其實是不具備區分信息的,或者說,它表示把原圖劃分爲一個空集和圖自身。所以有時候,我們直接把這個特徵向量去掉,只對k-1個指示/特徵向量進行分析。對於一個含c個連通分量的圖,L有c個0特徵值,對應的特徵向量就是簇指示向量,可以直接區分出哪些數據點位於同一個連通分量內。另外,除去通過Kmeans得到最終的聚類結果,也有人用譜旋轉(spectral rotation)得到,在此不做展開。
3.2 拉格朗日乘子法
在這一小節,我們直接從拉格朗日乘子法的角度來求解譜聚類。設Λ ∈ R k × k 爲拉格朗日乘子矩陣,式(2.6)的拉格朗日函數爲:
J ( F ) = T r ( F T L F ) − T r ( Λ ( F T F − I k ) ) (3.2)
求導並置零:
∂ J ( F ) ∂ F = 2 L F − F ( Λ + Λ T ) = 0 (3.3)
記
Λ ~ = 1 2 ( Λ + Λ T ) ,有
L F = F Λ ~ ,所以
F 就是
L 的特徵向量矩陣,
Λ ~ 是相應的特徵值組成的對角矩陣。
J ( F ) = T r ( F T F Λ ~ ) = T r ( Λ ~ ) ,要最小化
J ( F ) ,自然取
L 的前k個最小的特徵值,
F 則由對應的特徵向量組成。
4. 從圖重構角度再理解
4.1 正交非負約束
譜聚類目標式中,指示向量可取任意實值,而原始Ratio Cut/Ncut中,指示向量元素是離散的非負值。如果我們在鬆弛過程中,帶上非負約束,那麼新的模型應該更接近於原始問題,公式化表述就是:
min F ∈ R n × k T r ( F T L F ) s . t . F T F = I k , F ≥ 0. (4.1)
式(4.1)是一個帶有正交非負約束的問題,它的解實際上已經是離散的了。由於非負性,
F 中的元素大小直接反應了數據與簇之間的關係緊密程度,這個性質被廣泛用於非負矩陣分解中。所以,如果我們能求出這個問題的解
F ,那麼最終的聚類結果可以直接根據
F 每一行的最大元素的列索引得到,而不再需要額外的後處理步驟了,如前文提及的Kmeans。這是一個比較好的特點,因爲這樣做,算法的性能不再受制於其它算法的性能,要知道,Kmeans本身就對初始化十分敏感,不同的初始點,可能得到截然不同的聚類結果。
圖4.1 正交非負約束下的F示意圖。這兩個約束使得F是一個離散取值的、稀疏的、具有物理意義的矩陣,物理意義就是上面說的元素值對應數據和簇的關係。示意圖中,F是一個“9x3”的指示矩陣,表示有9個數據點,分別屬於3個不同的簇,比如第一個點屬於第一個簇,則F的第一行第一列元素非零(實心黑圓),第一行其它元素爲0,指示向量(F的列)是單位向量。
4.1 圖重構角度
在這一節,我們關注一種特殊情形,並得到譜聚類的圖重構理解視角。如果我們構建了一個圖,它的相似度矩陣W ,恰好是一個雙隨機矩陣(各行和、列和均爲1),則度矩陣D 就簡化爲一個單位陣I ,此時拉普拉斯矩陣L = I − W = L ~ ,也就是說L 已經是標準化的,此時Ratio Cut問題等價於Ncut問題 。此時式(4.1)可寫爲如下形式:
min F T F = I , F ≥ 0 ∥ W − F F T ∥ 2 F . (4.2)
證明: 注意有
W 是對稱雙隨機陣,
T r ( W T W ) 和
T r ( F F T F F T ) 是常數項。
Eq.(4.1) ⇔ max F T F = I , F ≥ 0 T r ( F T W F ) ⇔ min F T F = I , F ≥ 0 − T r ( W T F F T + F F T W ) ⇔ min F T F = I , F ≥ 0 T r [ W T W − W T ( F F T ) − ( F F T ) W + ( F F T ) ( F F T ) ] ⇔ Eq.(4.2) ■
式(4.2)就體現了圖重構的思想 。W 是原本構建好的圖(相似度矩陣確定後,圖也確定了,故此處可用圖代指),現在我們用簇指示矩陣來重構一個圖,使得重構圖和原始圖W 相近,這樣使得重構圖,不僅具有原圖的信息,而且在優化過程中,獲得了很好的結構—-分塊對角陣。一個塊就對應一個連通分量,往往一個連通分量內的數據屬於同一個簇,或者一個連通分量直接就對應了一個簇,實際中,由於冗餘特徵和噪音的存在,構建的原圖往往只有一個連通分量。所以在這種特殊情況下,譜聚類可以看作是在用一種具有結構信息的重構圖,來近似原始構建的圖 ,如圖4.2所示。
圖4.2 指示矩陣重構圖示意
5. 與K-means的聯繫
Kmeans公式化表述的證明過程可參見另一篇談PCA的博文 ,這裏只貼結果,Kmeans的目標函數可以寫成如下形式:
min F ∈ R n × k T r ( F T K F ) s . t . F T F = I k , F ≥ 0. (5.1)
這裏的
F 也是指示矩陣,
X ∈ R d × n 表示數據矩陣,n爲數據個數,
K = X T X 可看作一種相似度矩陣,這裏採用的是標準內積線性核。對於Kernel Kmeans,
K ~ = ϕ ( X ) T ϕ ( X ) ,
ϕ ( ) 是一種高維映射。
與譜聚類對比,Kmeans的交替迭代過程,相當於是直接在求一個離散定義的帶正交約束的問題,沒有像譜聚類一樣對原問題進行鬆弛。
6. 譜聚類的不足
因爲要計算拉普拉斯矩陣的特徵分解,譜聚類一個很大的問題是計算複雜度高 ,達到O ( n 3 ) ,n爲數據點個數。隨着大數據時代的來臨,如何改進譜聚類,使之能處理大規模數據,是一個很有價值的研究方向,比較典型的解決思路有通過Nystro ¨ m方法降低計算複雜度,有通過分步解決,先選取一部分代表點得到聚類標籤,再根據代表點和其它點間的某種關係(常利於稀疏學習等技術構建這種關係),得到剩餘的點的聚類標籤。
另一個不足是out of sample的問題 ,即給定一個新的測試樣例,無法方便地得到其聚類標籤,必須重新對整個數據集(包括新加的樣例)來一遍完整的譜聚類流程。這個問題的一種解決思路是,得到訓練數據的指示矩陣F後,將F的行作爲線性迴歸中的標籤項(F − X T θ ),求出對應的迴歸係數矩陣θ ∈ R d × k ,對於新來的樣例,根據θ 得到其k維空間中的表達(擬合標籤),再直接對所有數據的k維表達進行聚類就行。
7. 一個小問題
本文寫作過程中主要參考了A Tutorial on Spectral Clustering,在論文第九頁,定義Ratio Cut和Ncut的目標函數時,我始終覺得有點問題,少了一個係數1/2,雖然這並不影響最終結果,因爲對於最小最大問題,常係數是可以去掉的。不過單純從加深理解的角度,還是可以看細一點,在此貼出我的問題,還希望正好知道這一點的人不吝賜教。
上面的Ratio Cut 和Ncut的目標式中,第二個等式我覺得有問題,舉個例子,k=2時:
c u t ( A 1 , A 2 ) = 1 2 ( W ( A 1 , A 2 ) + W ( A 2 , A 1 ) ) = W ( A 1 , A 2 )
所以兩個目標式中的第三項,都比第二項要少一個係數
1 2 ,所以個人認爲這裏是個typo,或者是我的理解仍有誤。
主要參考文獻/資源
【1】Luxburg U V. A tutorial on spectral clustering[J]. Statistics and Computing, 2007, 17(4):395-416.
【2】http://blog.csdn.net/v_july_v/article/details/40738211
【3】http://blog.pluskid.org/?p=287
【4】http://www.cnblogs.com/xingshansi/p/6702188.html
附錄—–Ratio Cut相關證明
先貼一個很重要的公式,這一項在一些地方被稱作圖正則項(graph regularization),可以將有監督學習擴展爲半監督學習,它可以從流形學習的觀點來解釋,這裏不展開。
注意,這裏
f 是一個n維指示向量,即
f i 表示一個實數,如果把
f 換成指示矩陣
F ,
f i 表示一個n維向量,則只需將上式中實數的平方替換成向量的範數的平方,即
| | f i − f j | | 2 2 ,等式依然是成立的。這個公式可以這樣來證明:
在參考文獻[1]中,講Ratio Cut時,是用二聚類情形作爲例子,進行了較爲詳細地引出和推證,對於更爲一般的情形,原文中只是給出了結論,網絡上現有的博文,大多也是直接貼上原文中在二聚類情形下的證明。在這裏,我們給出一般情形下的證明(本文正文中也是隻關注了一般情形),證明過程跟二聚類情形是很類似的。
我們要證明的結論是:f ′ i L f i = c u t ( A i , A i ¯ ) | A i | ,i = 1 , . . . , k ,k是簇的個數,f i 是第i個子集A i 的指示向量,f i 的第p個元素f i p 指示第p個數據點是否屬於子集A i 。
f ′ i L f i = 1 2 ∑ p , q = 1 n w p q ( f i p − f i q ) 2 = 1 2 ⎛ ⎝ ∑ p ∈ A i , q ∈ A i ¯ w p q ( 1 | A i | − − − √ − 0 ) 2 + ∑ q ∈ A i , p ∈ A i ¯ w p q ( 0 − 1 | A i | − − − √ ) 2 ⎞ ⎠ = c u t ( A i , A i ¯ ) | A i |
注意到
f ′ i L f i = ( F T L F ) i i ,所以
R a t i o C u t ( A 1 , . . . , A k ) = ∑ i = 1 k c u t ( A i , A i ¯ ) | A i | = ∑ i = 1 k f ′ i L f i = T r ( F T L F )
Ncut的相關結論也可按照上述過程推證,此處略。