您當前的位置:首頁 > 攝影

譜聚類 Spectral Clustering

作者:由 Elfsong 發表于 攝影時間:2021-10-07

最近記憶力感覺很差,很多以前常用的演算法都記不清楚了。正好現在坡縣一天病例新增3千多例 ,我在家也沒什麼事情做,所以打算用文章的方式鞏固一下自己的記憶。另外,讓我來吐槽一下知乎的公式編輯器真難用~

譜聚類是一種非常高效簡單的演算法。雖然名字聽上去比較炫酷,但只要靜下心來認真看看,其實原理非常容易理解。

1 譜聚類是什麼?

我們就不一上來搞一大堆高大上的定義了。其實譜聚類的思想非常樸實,就是把需要分類的點看作一個圖

G\in(V, E)

。其中距離較近的結點有較高的邊權,距離較遠的結點有較低的邊權(對於距離的定義會在下文中進行解釋)。類似於最小割問題,我們希望對圖進行分割(分類)操作之後,不同子圖間的邊權儘可能小,相同子圖內的邊權儘可能高。

在切圖的過程中,我們會發現最小割方案存在無法找到最優切圖方案的問題。於是在譜聚類中我們透過修改最佳化目標解決了這個問題。

最後,譜聚類透過大幅度降維使得NP-hard可以被近似求解。我覺得這一點是譜聚類的核心之所在。對於K-means這類空域上的演算法,我們需要考慮樣本間的每一個維度,這樣會給我們帶來不小(甚至不可在多項式時間內求解)的開銷。但如果我們可以換一個視角去思考這個問題,為所有樣本向量找到一組正交基(單位向量),或者不嚴謹地說,找到一組座標系。基於這個座標系,我們可以找到對於樣本向量貢獻最大的

K

個座標軸。這樣我們就可以使用這組座標軸來表示這些樣本了。如果你熟悉PCA或者傅立葉變換,相信你可以很自然的理解譜聚類的思路。

所以我們在下文中會先介紹一下有關的前置概念,最後引出介紹譜聚類演算法。

2 圖的定義

對於一個圖

G\in(V,E)

V

代表圖中的節點(Vertex),

E

表示圖中的邊(Edge)。

此外,我們定義

W_{ij}

為節點

V_{i}

到節點

V_{j}

之間的距離。如果兩個節點之間有連線,則

W_{ij} > 0

,否則

W_{ij} = 0

對於圖中的任意一個點

v_i

,它的度

d_i

定義為和它相連的所有邊的權重之和:

d_{i} = \sum_{j \in Neighbors}{w_{ij}} \\

將每一個點的

d_i

整合起來,我們可以得到

n \times n

的度矩陣

D

。 它是一個對角矩陣,只有主對角線有值:

D = \left (  \begin{matrix} d_1 & \cdots & \cdots \\ \cdots & d_2 & \cdots \\ \vdots & \ddots & \vdots \\ \cdots & \cdots & d_3 \\ \end{matrix} \right ) \\

3 相似矩陣

在圖的定義中我們使用

W_{ij}

作為兩個節點距離的表示。但對於絕大多數分類問題而言,我們只有資料點的定義,沒有點之間距離的定義。所以我們需要自己來定義點之間的距離。距離的定義有很多種,實踐中最常使用的是全連結法,我們可以使用不同的核函式來定義權重(內積的對映):

 _{  } =    (\frac{−|| _{ }− _{ }||^2}{2 ^2}) \\

4

拉普拉斯矩陣

簡單來說,圖

G\in(V,E)

的拉普拉斯矩陣可以定義為

L = D - A

其中,D為第二節圖的定義中的度矩陣,A為鄰接矩陣(在全連結法中,

W = A

)。

拉普拉斯矩陣有一些很好的性質如下:

1) 拉普拉斯矩陣是對稱矩陣(因為

D

A

都是對稱矩陣)。

2) 由於拉普拉斯矩陣是對稱矩陣,則它的所有的特徵值都是實數。

3) 對於任意的向量

f

,我們有:

f^T L f = \frac{1}{2} \sum_{i,j=1}^{n}{w_{ij} (f_i - f_j)^2} \\

4) 拉普拉斯矩陣是半正定矩陣,且對應的n個實數特徵值都大於等於0,即:

0 = \lambda_1 \leq \lambda_2 \leq ... \leq \lambda_n \\

Laplacians是譜聚類的核心知識點,如果有不清楚的朋友可以看看這篇文章:

5 無向圖切圖

對於無向圖的切圖,我們的目標是將圖

G \in (V, E)

切成相互沒有連線的

K

個子圖。嚴謹地說,每個子圖點的集合為:

A_1, A_2, ..., A_k

它們滿足

A_i \cap A_j = \varnothing

A_1 \cup A_2 \cup ... \cup A_k = V

對於含有

兩個子圖點

的集合

V \in (A, B)

, 我們可以定義A和B之間的切圖權重為:

W(A, B) = \sum_{i \in A, j \in B}{w_{ij}} \\

那麼對於我們

K

個子圖點的集合

A_1, A_2, ..., A_k

,我們定義切圖為:

cut(A_1, A_2, ... , A_k) = \frac{1}{2} \sum_{k}^{i=1}{W(A_i, \bar{A_i})} \\

其中

\bar{A_i}

A_i

的補集,意為除

A_i

之外其他V的子集的並集。

那麼如何切圖可以讓子圖內的點權重和高,子圖間的點權重和低呢?一個自然的想法就是最小化

cut(A_1, A_2, ... , A_k)

, 但是可以發現,這種極小化的切圖存在問題,如下圖:

譜聚類 Spectral Clustering

Smallest cut切斷了

C

H

的連線,達到了最小化

cut(A_1, A_2, ... , A_k)

的目的,但並沒有找到Best cut的位置。

6 切圖聚類

為了避免最小切圖導致的切圖效果不佳,我們需要對每個子圖的規模做出限定,一般來說,有兩種切圖方式,第一種是RatioCut,第二種是NormalizedCut。下面我們分別加以介紹:

6。1 RatioCut 切圖

為了避免出現Smallest切圖類別分佈不均勻的問題,Ratio Cut不僅考慮最小化

cut(A_1, A_2, ... , A_k)

,它同時還會考慮最大化每個子圖的節點個數:

cut(A_1, A_2, ... , A_k) = \frac{1}{2} \sum_{k}^{i=1}{\frac {W(A_i, \bar{A_i})} {|A_i|}} \\

將圖的節點

V

分成

K

個分割槽,我們定義指示向量:

h_j = \{ h_{1,j}, h_{2,j}, ... , h_{n,j} \}

,其中:

h_{i, j} = \begin{equation}   \left\{                \begin{array}{**lr**}                \frac{1}{\sqrt{|A_j|}}, & v_i \in A_j \\              0, & otherwise \\              \end{array}   \right.   \end{equation}  \\

對於

h_i^T L h_i

我們有:

h_i^T L h_i = \frac{1}{2} \sum_{m=1}^{N} \sum_{n=1}^{N} w_{mn}(h_{im} - h_{in})^2 \\ = \frac{1}{2} \sum_{m \in A_i;  n \notin A_i} w_{mn}(\frac{1}{\sqrt{|A_i|}} - 0)^2 + \frac{1}{2} \sum_{m \notin A_i;  n \in A_i} w_{mn}(0 - \frac{1}{\sqrt{|A_i|}})^2 \\ = \frac{1}{2} (\sum_{m \in A_i;  n \notin A_i} w_{mn} \frac{1}{|A_i|} + \sum_{m \notin A_i;  n \in A_i} w_{mn} \frac{1}{|A_i|}) \\ = \frac{1}{2} (cut(A_i, \bar{A_i}) \frac{1}{|A_i|} + cut( \bar{A_i}, A_i) \frac{1}{|A_i|}) \\ = \frac{cut(A_i, \bar{A_i})}{|A_i|} \\

對於某一個分類子圖

A_i

,它的RatioCut對應於

h_i^T L h_i

, 那麼完整的

K

個子圖呢?對應的RatioCut函式表示式為:

RatioCut(A_1, A_2, ... , A_k) = \sum_{i=1}^{K}{h_i^T L h_i} = \sum_{i=1}^{K}{(H^T L H)_{ii}} = tr(H^T L H) \\

其中

 tr(H^T L H)

為矩陣的跡。我們可以發現切圖問題已經轉化為了求解最小化

 tr(H^T L H)

的問題。同時,考慮到

H

的含義(特徵向量),我們需要保證

H^T H = I

argmin(tr(H^T L H)) \\ s.t. H^T H = I

H中每一個指示向量(特徵向量)都是n維的,向量中每一個變數的取值為

(0, \frac{1}{\sqrt{|A_i|}})

。全部K個指示向量共有

K \times 2^N

種可能的取值,因此這是一個NP-hard問題。

對於

h_i^T L h_i

,我們的目標是找到最小的

L

的特徵值;而對於

 tr(H^T L H)

,我們的目標是找的

K

個最小的特徵值。一般來說,

K \ll N

,當這個問題的維度從

N

被規約到

K

之後,我們就可以近似的解決這個NP-hard的問題了。

透過找到

L

最小的

K

個特徵值,我們可以得到對應的

K

個特徵向量,這些向量組成了

H

矩陣。通常我們會對矩陣

H

進行標準化:

h_{ij}^* = \frac{h_{ij}}{\sqrt{\sum_{K}^{t=1}{h_{it}^2}}} \\

由於我們在使用維度規約的時候損失了少量資訊,導致得到的最佳化後的指示向量不能完全指示各樣本的歸屬,因此一般在得到

N \times K

維度的矩陣

H

後還需要對每一行進行一次傳統的聚類,比如使用K-Means聚類。

6。2 NormalizedCut 切圖

NormalizedCut對RatioCut進行了改進。考慮到子圖樣本的個數多並不一定權重就大,在切圖時我們也應該考慮子圖間的權重大小。和RatioCut類似,NormalizedCut採用了:

NormalizeCut(A_1, A_2, ... , A_k) = \frac{1}{2} \sum_{k}^{i=1}{\frac {W(A_i, \bar{A_i})} {vol(A_i)}} \\

其中,

vol(A_i) = \sum_{i \in A} {d_i}

除此之外,NormalizedCut和RatioCut幾乎完全一樣。由於在NormalizedCut中,

H^T H \ne I

, 我們需要對矩陣

H

做一個變換, 使之標為標準正交基:

H = D^{-\frac{1}{2}}

。推導如下:

H^T D H = \sum_{i=1}^{K}{ h_{ij}^2 d_j} = h_{ij}^2 \sum_{i=1}^{K}{ d_j } = \frac{1}{vol(A_i)} \sum_{i=1}^{K}{ d_j } = \frac{1}{vol(A_i)} vol(A_i) = 1 \\

H = D^{-1/2}F

,於是我們的最佳化目標就變成了:

argmin(tr(F^T D^{-1/2} L D^{-1/2} F)) \\ s.t. F^T F = I

之後的流程就和RatioCut一致了。我們可以理解為NormalizedCut對拉普拉斯矩陣進行了一次正則化操作。所以理論上來說,標準化的拉普拉斯矩陣使用RatioCut的效果應該和非標準化的拉普拉斯矩陣使用NormalizedCut的效果一致。

7 譜聚類流程

輸入:樣本集

X = \{x_1, x_2, ... , x_N\}

,樣本集大小

N

,相似矩陣的生成方式,聚類方法,降維維度

K_1

,聚類維度

K_2

輸出:分簇集合

C = \{ c_1, c_2, ... , c_{K_2}\}

具體步驟:

1) 根據輸入的相似矩陣生成方式構建樣本的相似矩陣

S

2)根據相似矩陣

S

構建鄰接矩陣

W

,構建度矩陣

D

3)計算出拉普拉斯矩陣

L

4)構建標準化後的拉普拉斯矩陣

D^{-1/2} L D^{-1/2}

(可選)。

5)計算

D^{-1/2} L D^{-1/2}

最小的

K_1

個特徵值所各自對應的特徵向量

f

6)將各自特徵向量

f

組成的矩陣F按行標準化(可選),得到

N \times K_1

維的特徵矩陣

\bar{F}

7)將

\bar{F}

中的每一行作為一個

K_1

維的樣本,共

N

個樣本,用輸入選定的聚類方法進行聚類,聚類維數為輸入的

K_2

8)得到簇劃分

C = \{ c_1, c_2, ... , c_{K_2}\}

8 譜聚類的優缺點

優點:

譜聚類演算法依賴合理的資料集相似度矩陣。因此當具有合理的相似度矩陣時,譜聚類可以有效處理稀疏資料聚類。傳統的K-means演算法在高維稀疏資料上很難做到。

譜聚類透過降維間接解決了NP-hard問題,在

N \gg K

的情況下比傳統聚類演算法有更好的時間複雜度。

缺點:

譜聚類演算法依賴合理的資料集相似度矩陣。因此不同相似度量方法會導致截然不同的結果。

譜聚類透過降維間接解決了NP-hard問題,在

N \sim K

的情況下會導致譜聚類降維的幅度不夠,執行時間和聚類效果均不理想。

9 參考文獻

標簽: 聚類  矩陣  切圖  我們  定義