圖的拉普拉斯矩陣與譜聚類

轉載:https://www.jianshu.com/p/0e59e944a3ff

http://www.datasciencelab.cn/clustering/spectral

https://www.jianshu.com/p/881f5dd4c209  (公式推導)

1. 相關概念科普

度矩陣

度矩陣爲對角矩陣,對角線上的值表示 與該點 有來往的 其他點的個數 即度 爲 與節點 相連的 個數

鄰接矩陣

鄰接矩陣 表示圖上 各點之間 是否有聯繫或者聯繫程度, 可以是 1/0 也可以是 具體權值

 

laplas2

拉普拉斯矩陣

圖論中的的 拉普拉斯矩陣(也被稱爲導納矩陣/吉爾霍夫矩陣/離散拉普拉斯)是圖的矩陣表示. 它是 度矩陣 和 鄰接矩陣 的差. 拉普拉斯矩陣 結合 吉爾霍夫理論 可以用來計算圖的最小生成樹的個數。
拉普拉斯矩陣還可用來尋找圖的其他屬性: 譜圖理論(spectral graph theory)
黎曼幾何的Cheeger不等式有涉及了拉普拉斯矩陣的離散模擬. 這或許是譜圖理論中最重要的定理也是在算法應用中最有用的facts.它通過拉普拉斯矩陣的第二特徵值來近似圖的最小割
譜的定義 就是:
方陣作爲線性算子,它的所有特徵值的全體 統稱方陣的
方陣的譜半徑爲最大的特徵值;
矩陣A的譜半徑:的最大特徵值。
其實,這裏譜的本質是僞逆,是SVD中奇異值的平方

2. 譜聚類的基本思想

2.1 聚類與圖論

所謂聚類(Clustering), 就是要把一堆樣本合理地分成兩份或者K份. 從圖論的角度來說,聚類的問題就相當於一個圖的分割問題. 即給定一個圖G=(V,E), 頂點集V表示各個樣本,帶權的邊表示各個樣本之間的相似度,譜聚類的目的便是要找到一種合理的分割圖的方法,使得分割後形成若干個 子圖,連接不同 子圖 的邊的權重(相似度)儘可能低,同 子圖內 的邊的權重(相似度)儘可能高.被割掉各邊的權值和越小代表被它們連接的子圖之間的相似度越小,隔得越遠. 物以類聚,人以羣分,相似的在一塊兒,不相似的彼此遠離
至於如何把圖的頂點集分割/切割爲不相交的子圖有多種辦法,如

  • cut/Ratio Cut
  • Normalized Cut
  • 不基於圖,而是轉換成SVD能解的問題

2.2 最小割

在將數據從點集的結構轉換爲了圖的結構後,我們可以引入更多圖論中的概念來幫助理解聚類的本質. 比如說最小割的概念(Minimum cut)
最小割是指去掉圖中的一些帶權邊,在使得圖從聯通圖變爲不聯通圖的前提下,儘可能的讓去掉的邊權值之和儘可能小。對於數據的相似性圖來說,最小割就是要去除一些很弱的相似性,把數據點從一個互相連接的整體分爲兩個或者多個獨立的部分,這其實就是一個聚類的過程。去除的權值就是聚類後不同組別間的相似程度,我們希望這個值儘可能的小,也就是希望不同組別之間的差距儘可能的大
不過,僅僅是用最小割來聚類存在着一些缺陷,因爲我們只考慮了不同類的點之間相似度要小,而一個好的聚類還要具有同一類點相似度大的特徵。比如下圖就是一個例子,一個好的聚類應該是在綠線處分割整個圖,但使用最小割卻會割在紅色的位置

比如我們把中間的邊去掉,就滿足上面的簇間相似性最小,簇內相似性最大。如下圖

 

3. 算法步驟

譜聚類算法主要有下面幾部分:

3.1 未正則拉普拉斯矩陣 的譜聚類算法

3.1.1 計算得到圖的鄰接矩陣D ,以及拉普拉斯矩陣L ;

給定樣本的原始特徵,我們需要計算兩兩樣本之間的相似度值,才能構造出鄰接矩陣W . 我們一般使用高斯核函數來計算相似度。公式如下:

3.1.2 聚類劃分準則

關於劃分準則的問題是聚類技術中的核心。譜聚類被看作屬於圖論領域的問題,那個其劃分也會和邊的權重有關

準則1:最小化進行分割時去掉的邊的權重之和

譜聚類Spectral Clustering


譜聚類已經成爲最常用的現代聚類算法之一,相對於傳統的聚類算法比如K-means,譜聚類的效果更出色,而且它實現簡單,只需要標準的線性代數工具就可以有效的求解。

算法思路

譜聚類是一種基於降維的聚類算法,它由兩部分組成,第一部分是對數據進行一定的變換,使得交織在一起的數據分開,第二部分是使用傳統的K-means算法對變換後的數據聚類。下圖中的數據單純的使用K-means會得到非常差的結果,但是使用譜聚類可以實現非常好的聚類效果。

因此,譜聚類的關鍵在於找到一個好的變換,將K-means不能處理的數據變換爲K-means可以處理的數據。

從直覺上我們知道,一個好的聚類應該具有兩個特徵

  1. 屬於同一類的點之間相似性較大
  2. 不屬於同一類的點之間相似性較小

所以我們要找到一個變換,使得相似性大的點能更接近,而相似度小的點會距離更遠。首先要引入表示數據點之間相似度的臨接矩陣。

數據的相似性圖

數據本身可以看成一個個的點,如果我們給某些點之間加上一條無向帶權邊,那麼數據的結構就是一個圖G=(X,E)

,這裏X表示圖中的數據點的合集,E表示帶權的邊。

如果這裏邊帶的權代表這兩點之間的相似程度的話,那麼這個圖就叫做數據的相似性圖(Similarity graph)。比如下圖的左邊是七個數據點,右邊是帶了權的相似性圖。

數據的相似性圖不是唯一的,可以用基於不同度量的不同方法來構建該圖,最常見的構建方法是對第i個數據點,離該點最近的p個數據點使用它們之間的歐幾里得距離作爲相似性的度量,其他較遠的點相似性程度都爲0。一旦構建好了相似性圖G,我們就可以寫下用來描述這個圖的臨接矩陣W。

首先我們對每個數據點標個號,比如在這個圖中從1到7來標記每個數據點。

臨接矩陣W中元素Wij表示第i個點xi到第j個點xj的權值(相似程度),因爲xi到xj的相似程度和xj到xi的相似程度是一樣的,所以對任意i,j都有wij=wji,所以W是一個對稱矩陣。

比如上圖中的臨接矩陣就是這樣的:

還有一個常用的量叫次數矩陣(Degree Matrix),通常記爲D,這是一個對角矩陣,第i個對角元di的值代表着所有和第i個點相連接的權值之和。

上例中的次數矩陣是這樣的:

最小割

在將數據從點集的結構轉換爲了圖的結構後,我們可以引入更多圖論中的概念來幫助理解聚類的本質。比如說最小割的概念(Minimum cut)。

最小割是指去掉圖中的一些帶權邊,在使得圖從聯通圖變爲不聯通圖的前提下,儘可能的讓去掉的邊權值之和儘可能小。對於數據的相似性圖來說,最小割就是要去除一些很弱的相似性,把數據點從一個互相連接的整體分爲兩個或者多個獨立的部分,這其實就是一個聚類的過程。去除的權值就是聚類後不同組別間的相似程度,我們希望這個值儘可能的小,也就是希望不同組別之間的差距儘可能的大。

下圖一個最小割的例子,通過去掉權值爲0.1和0.2的兩條邊,將數據點劃分爲了兩個部分,也就是聚爲了兩類。

不過,僅僅是用最小割來聚類存在着一些缺陷,因爲我們只考慮了不同類的點之間相似度要小,而一個好的聚類還要具有同一類點相似度大的特徵。比如下圖就是一個例子,一個好的聚類應該是在綠線處分割整個圖,但使用最小割卻會割在紅色的位置。

爲此Shi和Malik在1997年提出了規範化割(Normalized cut)的概念,將類內和類間的相似度都考慮進去,譜聚類就是通過最小化Normalized cut,使聚類的結果更加均衡。

Normalized Cut

首先說明一下使用的記號,X代表全部數據點,Xi代表第i個數據點;A.B分別代表X的兩個互斥子集,同時它們也可以被看成數據點聚成的兩類。我們記cut(A,B)爲A和B兩類間的類間相似度,assoc(A,X)爲A和X間的相似度。

其實這裏cut和assoc的定義是一樣的,但是爲了它們兩個的含義不同,cut是用來衡量類間的相似性,assoc是用來衡量類內的相似性。

比如說對於下圖來說,cut(A,B)=0.2+0.1=0.3;assoc(A,X)=0.8+0.7+0.7+0.9+0.2+0.1=3.4;assoc(B,X)=0.7+0.7+0.7+0.1+0.2=2.4。

Normalized cut被定義爲

譜聚類的本質就是要找到能最小化Ncut(A,B)的A和B。

譜聚類的求解

要求解譜聚類,即要解出哪些數據點屬於A,哪些數據點屬於B,爲了數學描述的方便,我們用一個n維向量c來表示譜聚類的解。ci∈-1,1,如果第i個數據點屬於A,那麼ci=−1,否則第i個點屬於B,那麼ci=1。

我們先將要最小化的目標Ncut(A,B)轉化爲和向量c有關的形式。

舉例

在R語言中,kernlab包提供了specc函數幫助我們進行譜聚類。在這裏我們示例如何對經典的Iris數據集使用譜聚類算法。

#R語言代碼 ggplot2繪圖
library(kernlab)
library(ggplot2)

data(iris)
data <- as.matrix(iris[,-5])	#將數據由data.frame轉化爲matrix的形式

model <- specc(data, 3)
iris$spectral <- as.factor(model)

fig <- ggplot(iris, aes(x=Sepal.Length,y=Sepal.Width)) + geom_point(aes(colour=spectral))
print(fig)

下面左圖是標準的分類,右圖是譜聚類的結果。

可見結果並不好,這是因爲譜聚類是一種基於降維的局部聚類算法,這裏使用Iris數據集只是爲了舉例,它最合適的應用場景是連續且交錯在一起的數據集,比如下圖的數據。

拓展閱讀

譜聚類是一個很新的方法,想對它有更深入瞭解的建議閱讀Ulrike von Luxburg寫的A Tutorial on Spectral Clustering。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章