1. 程式人生 > >譜聚類(Spectral Clustering)原理及Python實現

譜聚類(Spectral Clustering)原理及Python實現

譜聚類原理及Python實現

圖模型

  無向帶權圖模型 G =< V , E > ,每一條邊上的權重

w i j 為兩個頂點的相似度,從而可以定義相似度矩陣 W ,此外還可以定義度矩陣
D
和鄰接矩陣 A ,從而有拉普拉斯矩陣 L = D
A
。所以本文用到的矩陣總共兩個: L W

圖的分割

  一個圖 G 可能有很多個子圖 G i (總共 k 個),現在的任務是將大圖分成若干小塊,要求分法是最佳的。何為“最佳”呢,遍歷每一個子圖,計算一個切圖懲罰,將他們加起來。式中的 G ^ i 表示子圖 G i 的補集,代價函式 C 計算的是連線兩個子圖之間的權重之和。

C o s t ( G 1 , , G k ) = i C ( G i , G ^ i ) C ( G 1 , G 2 ) = i G 1 , j G 2 w i j

  根據這個公式,對於下面這個圖,假設點7和點8之間的權重值很小,那麼很容易有紅線所示的劃分(假設二分),上面的代價函式計算出來的值很小。但顯然綠色線所示才是最佳的分法。


距離度量與鄰接矩陣

  鄰接矩陣某種程度上反映了圖中各結點之間的相似性,普通的鄰接矩陣元素非0即1,譜聚類中的鄰接矩陣用KNN來計算。具體來說,遍歷每一個結點 x i ,根據相似度(或距離)矩陣找出它的 k 個最接近的點,構成 x i 的鄰域 N i ,然後按以下規則之一構造鄰接矩陣。

A i j = A j i = { 0 x i N j   a n d x j   N i exp | | x i x j | | 2 2 σ 2 x i N j   o r   x j N i

A i j = A j i = { 0 x i N j   o r   x j   N i exp | | x i x j | | 2 2 σ 2 x i N j   a n d   x j N i

切圖聚類

RatioCut 切法

  為了解決上面這個區域性最優問題,一個很自然的做法就是改進目標函式,要求每個劃分出來的子圖的結點數儘量大。例如上圖,最佳劃分對應的兩個子圖節點數都是4,而區域性最優劃分有一個子圖節點數為1。