Spectral Clustering
前面的課程說到了 community detection 並介紹了兩種算法。這次來說說另外一類做社區聚類的算法,譜聚類。這種算法一般分爲三個步驟
pre-processing: 構建一個描述圖結構的矩陣
decomposition: 通過特徵值和特徵向量分解矩陣
grouping: 基於分解後的矩陣以及點的 representation 進行聚類
在介紹具體操作前我們先了解幾個概念
Graph Partitioning
圖的劃分就是將節點分到不同的組內,如果分爲兩個組就是二分。劃分的目的其實就是找社區,那如何判斷一個劃分的質量呢?回顧之前說到的社區的特點,即社區內部連接豐富而社區間連接稀疏。因此我們希望我們的劃分能最大化每個劃分內的連接並最小化劃分間的連接數。我們用割這個概念來描述不同劃分間的連接數 c u t ( A , B ) = ∑ i ∈ A , j ∈ B w i j cut(A,B)=\sum\limits_{i\in A,j\in B}w_{ij} c u t ( A , B ) = i ∈ A , j ∈ B ∑ w i j 。對於無權圖這裏的 w w w 就是 { 0 , 1 } \{0,1\} { 0 , 1 } 。但這個定義並不完美,因爲這樣並不能保證劃分均勻。例如,一個圖中有一個節點的度爲 1 1 1 那麼只要把這個節點和其餘節點分開就能保證 cut 爲 1 1 1 。因此我們將劃分後不同組內節點的度納入考慮就能較爲全面的評估一個劃分的好壞了,即 Conductance,其中 v o l vol v o l 是劃分內所有節點的度之和。
ϕ ( A , B ) = c u t ( A , B ) min ( v o l ( A ) , v o l ( B ) ) \phi(A,B)=\frac{cut(A,B)}{\min(vol(A),vol(B))} ϕ ( A , B ) = min ( v o l ( A ) , v o l ( B ) ) c u t ( A , B )
然而直接最小化 conductance 是個 NP-hard 的問題。那接下來就進入今天的正題:譜聚類。
首先複習一下線性代數,給定一個圖的鄰接矩陣 A A A ,那 i i i 行表示節點 i i i 的所有出度,j j j 列表示節點 j j j 的所有入度。在無向圖上出度入度一樣,因此 A T = A A^T=A A T = A ,。考慮無向圖,那 A x Ax A x 代表什麼?A x Ax A x 的輸出是一個向量,而向量的每一個元素是矩陣的行和向量 x x x 的內積。如果將 x x x 看作圖中每個節點的分類標籤,那得到的結果向量的每個元素代表了每個節點所有鄰接節點的標籤之和。
而特徵值的定義是 A x = λ x Ax=\lambda x A x = λ x ,而譜聚類就是研究根據特徵值 λ \lambda λ 升序排序後的特徵向量。(這裏規定 Λ = { λ 1 , λ 2 , . . . , λ n } \Lambda=\{\lambda_1,\lambda_2,...,\lambda_n\} Λ = { λ 1 , λ 2 , . . . , λ n } 且 λ 1 ≤ λ 2 ≤ . . . ≤ λ n \lambda_1\leq\lambda_2 \leq...\leq\lambda_n λ 1 ≤ λ 2 ≤ . . . ≤ λ n )
d d d -Regular Graph
現在給出一個特殊的連通圖 G G G ,圖中所有節點的度都爲 d d d 。然後令 x = ( 1 , 1 , . . . , 1 ) x=(1,1,...,1) x = ( 1 , 1 , . . . , 1 ) 那麼 A x = ( d , d , . . . , d ) = λ x Ax=(d,d,...,d)=\lambda x A x = ( d , d , . . . , d ) = λ x ,因此 λ = d \lambda=d λ = d 。可以證明 d d d 是最大的特徵值。
證明:
因爲我們希望特徵值爲 d d d ,那對向量 x x x 必須有 x i = x j x_i=x_j x i = x j 。也就是說 x = c ⋅ ( 1 , 1 , . . . , 1 ) x=c\cdot(1,1,...,1) x = c ⋅ ( 1 , 1 , . . . , 1 )
那麼對於任意不滿足 c ⋅ ( 1 , 1 , . . . , 1 ) c\cdot(1,1,...,1) c ⋅ ( 1 , 1 , . . . , 1 ) 的向量 y y y ,說明並非所有節點都爲 1 1 1 。令不爲 1 1 1 的節點集爲 S S S ,顯然並非所有節點都在 S S S 中。
這樣一來必定存在節點 j j j ,其鄰接節點不屬於 S S S 。這樣一來在節點 j j j 這裏得到的內積值必定嚴格小於 d d d
因此 y y y 不是特徵向量,且 d d d 是最大的特徵值
以上是針對連通圖。如果圖不連通而是有兩個部分,且每部分都是 d d d -regular 的。我們做類似處理,不過對 x x x 的定義會適當改變。
{ x ′ = ( 1 , . . . , 1 , 0 , . . . , 0 ) T , A x ′ = ( d , . . . , d , 0 , . . . , 0 ) T x ′ ′ = ( 0 , . . . , 0 , 1 , . . . , 1 ) T , A x ′ ′ = ( 0 , . . . , 0 , d , . . . , d ) T \begin{cases}
x'=(1,...,1,0,...,0)^T, Ax'=(d,...,d,0,...,0)^T \\
x''=(0,...,0,1,...,1)^T, Ax''=(0,...,0,d,...,d)^T
\end{cases} { x ′ = ( 1 , . . . , 1 , 0 , . . . , 0 ) T , A x ′ = ( d , . . . , d , 0 , . . . , 0 ) T x ′ ′ = ( 0 , . . . , 0 , 1 , . . . , 1 ) T , A x ′ ′ = ( 0 , . . . , 0 , d , . . . , d ) T
這樣一來對應的特徵值仍然是 λ = d \lambda=d λ = d ,但這個最大特徵值對應了兩個特徵向量。
– 爲什麼不繼續用 x = ( 1 , 1 , . . . , 1 ) T x=(1,1,...,1)^T x = ( 1 , 1 , . . . , 1 ) T ?
– 你試試 A x = λ x Ax=\lambda x A x = λ x 對得上不?
如下圖稍微推廣一下,第一種不連通情況下,最大和第二大的特徵值相等。第二種情況屬於存在明顯社區結構,此時圖其實是連通的,但最大和第二大的特徵值差別不大。而 λ n − 1 \lambda_{n-1} λ n − 1 能告訴我們兩個社區的劃分情況。
那爲什麼說 λ n − 1 \lambda_{n-1} λ n − 1 能告訴我們劃分情況?首先我們知道特徵向量是互相垂直的,即兩個特徵向量的內積爲 0 0 0 。因此在已知 x n = ( 1 , 1 , . . . , 1 ) T x_n=(1,1,...,1)^T x n = ( 1 , 1 , . . . , 1 ) T 的情況下,x n x n − 1 = 0 x_nx_{n-1}=0 x n x n − 1 = 0 說明 ∑ i x n − 1 [ i ] = 0 \sum_ix_{n-1}[i]=0 ∑ i x n − 1 [ i ] = 0 。因此,在 x n = 1 x_{n=1} x n = 1 內必定有正有負。那我們就可以依此將圖中的節點分爲兩組了。(這是大致思路,還有很多細節需要考慮)
那考慮無向圖,我們定義以下幾個矩陣
鄰接矩陣 A A A
對稱
n n n 個實數特徵值
特徵向量爲實數且互相垂直
度矩陣 D D D
拉普拉斯矩陣 L = D − A L=D-A L = D − A
半正定
特徵值爲非負實數
特徵向量爲實數且互相垂直
對所有 x x x 有 x T L x = ∑ i j L i j x i x j ≥ 0 x^TLx=\sum_{ij}L_{ij}x_ix_j\geq 0 x T L x = ∑ i j L i j x i x j ≥ 0
這裏有個定理:對任意對稱矩陣 M M M 有
λ 2 = min x : x T w 1 = 0 x T M x x T x \lambda_2=\min\limits_{x:x^Tw_1=0}\frac{x^TMx}{x^Tx} λ 2 = x : x T w 1 = 0 min x T x x T M x
w 1 w_1 w 1 是最小特徵值對應的特徵向量。分析一下這個表達式
x T L x = ∑ i , j = 1 n L i j x i x j = ∑ i , j = 1 n ( D i j − A i j ) x i x j = ∑ i D i i x i 2 − ∑ ( i , j ) ∈ E 2 x i x j = ∑ ( i , j ) ∈ E ( x i 2 + x j 2 − 2 x i x j ) = ∑ ( i , j ) ∈ E ( x i − x j ) 2 \begin{aligned}
x^TLx&=\sum\limits_{i,j=1}^nL_{ij}x_ix_j=\sum\limits_{i,j=1}^n(D_{ij}-A_{ij})x_ix_j \\
&=\sum_iD_{ii}x_i^2-\sum_{(i,j)\in E}2x_ix_j \\
&=\sum_{(i,j)\in E}(x_i^2+x_j^2-2x_ix_j) \\
&=\sum_{(i,j)\in E}(x_i-x_j)^2
\end{aligned} x T L x = i , j = 1 ∑ n L i j x i x j = i , j = 1 ∑ n ( D i j − A i j ) x i x j = i ∑ D i i x i 2 − ( i , j ) ∈ E ∑ 2 x i x j = ( i , j ) ∈ E ∑ ( x i 2 + x j 2 − 2 x i x j ) = ( i , j ) ∈ E ∑ ( x i − x j ) 2
因爲度矩陣 D D D 是對角矩陣,所以上面纔會化簡爲 D i i D_{ii} D i i 。 因爲這裏的求和是針對每條邊,而每條邊有兩個端點,因此第三步是 x i 2 + x j 2 x_i^2+x_j^2 x i 2 + x j 2 。化簡了定理裏的表達式能看出什麼?λ 2 \lambda_2 λ 2 是特徵向量裏各元素的差的平方(距離)的最小值。這與我們找最小割目的不謀而合,即最小化各部分間的連接數。
這樣得到的 x x x 叫 Fiedler vector。然而直接用離散的標籤 { − 1 , 1 } \{-1,1\} { − 1 , 1 } 太硬核了,我們考慮允許 x x x 爲滿足約束的實數。即 ∑ i x i = 0 , ∑ i x i 2 = 1 \sum_ix_i=0, \sum_ix_i^2=1 ∑ i x i = 0 , ∑ i x i 2 = 1
其實這裏偷換了概念。表達式裏應該將 x x x 替換爲 y y y 。因爲分析的時候我們將 y y y 視爲劃分後的標籤,而特徵值 x 2 x_2 x 2 只是這個標籤 y y y 的最優解而已。
這裏提到了 approx. guarantee,如果將網絡劃分爲 A A A 和 B B B ,那可以保證 λ 2 \lambda_2 λ 2 和 conductance β \beta β 存在關係 λ 2 ≤ 2 β \lambda_2\leq2\beta λ 2 ≤ 2 β (證明略,自己看 slide 吧)
根據這種方法得到的結果還是不錯的。如果網絡中包含了不止一個劃分,我們可以遞歸地使用上述算法,即先劃分爲兩部分,然後對兩部分分別再用使用一次或多次譜聚類。除此之外還可以使用 x 3 , x 4 , . . . x_3,x_4,... x 3 , x 4 , . . . 等特徵向量一起進行聚類,這樣一來相當於將每個點表示爲 k k k 維的向量進行聚類。一般來說多用幾個特徵向量能避免信息丟失,得到更好的聚類結果。那這個 k k k 怎麼選呢?看 Δ k = ∣ λ k − λ k − 1 ∣ \Delta_k=|\lambda_k-\lambda_{k-1}| Δ k = ∣ λ k − λ k − 1 ∣ 。選令 eigengap 最大的 k k k 就好。(注意!!這裏的特徵值又是按降序 排列的了)
Motif-Based Spectral Clustering
上面的譜聚類是基於邊實現的,如果我們想針對某種特定的結構進行劃分呢?自然而然的想到之前介紹的 motif。基於 motif 也就是說在一個劃分內特定的 motif 普遍出現。類似對邊的劃分,我們定義 v o l M ( S ) vol_M(S) v o l M ( S ) 爲在劃分 S S S 裏的 motif 的端點個數,ϕ ( S ) = # ( m o t i f s c u t ) v o l M ( S ) \phi(S)=\frac{\#(motifs\ cut)}{vol_M(S)} ϕ ( S ) = v o l M ( S ) # ( m o t i f s c u t ) 。當然這也是 NP-hard 的。
走流程,首先我們需要定義矩陣 W ( M ) W^{(M)} W ( M ) 。這裏矩陣內每個元素代表了對應邊被幾個 motif 共享。然後是度矩陣 D ( M ) = ∑ j W i j ( M ) D^{(M)}=\sum_jW_{ij}^{(M)} D ( M ) = ∑ j W i j ( M ) 和拉普拉斯矩陣 L ( M ) = D ( M ) − W ( M ) L^{(M)}=D^{(M)}-W^{(M)} L ( M ) = D ( M ) − W ( M ) 。求特徵值和特徵向量後取第二小的特徵值對應的特徵向量 x 2 x_2 x 2 。按升序對 x 2 x_2 x 2 各元素大小排序,並依次通過計算 motif conductance 來找最佳的劃分。(前 k k k 小的元素爲 x 2 ( 1 ) , x 2 ( 2 ) , . . . , x 2 ( k ) x_2^{(1)},x_2^{(2)},...,x_2^{(k)} x 2 ( 1 ) , x 2 ( 2 ) , . . . , x 2 ( k ) ,然後計算 conductance。取令 conductance 最小的 k k k 值)
當然這個算法也只是一個近似,它能保證 ϕ M ( S ) ≤ 4 ϕ M ∗ \phi_M(S)\leq4\sqrt{\phi_M^*} ϕ M ( S ) ≤ 4 ϕ M ∗