機器學習算法複習-譜聚類

來自http://www.cnblogs.com/wentingtu/archive/2011/12/22/2297426.html

如果說 K-means 和 GMM 這些聚類的方法是古代流行的算法的話,那麼這次要講的 Spectral Clustering 就可以算是現代流行的算法了,中文通常稱爲“譜聚類”。由於使用的矩陣的細微差別,譜聚類實際上可以說是一“類”算法。

Spectral Clustering 和傳統的聚類方法(例如 K-means)比起來有不少優點:

  • 和 K-medoids 類似,Spectral Clustering 只需要數據之間的相似度矩陣就可以了,而不必像 K-means 那樣要求數據必須是 N 維歐氏空間中的向量。
  • 由於抓住了主要矛盾,忽略了次要的東西,因此比傳統的聚類算法更加健壯一些,對於不規則的誤差數據不是那麼敏感,而且 performance 也要好一些。許多實驗都證明了這一點。事實上,在各種現代聚類算法的比較中,K-means 通常都是作爲 baseline 而存在的。
  • 計算複雜度比 K-means 要小,特別是在像文本數據或者平凡的圖像數據這樣維度非常高的數據上運行的時候。

突然冒出這麼一個要求比 K-means 要少,結果比 K-means 要好,算得還比 K-means 快的東西,實在是讓人不得不懷疑是不是江湖騙子啊。所以,是騾子是馬,先拉出來溜溜再說。不過,在 K-medoids 那篇文章中曾經實際跑過 K-medoids 算法,最後的結果也就是一個 accuracy ,一個數字又不能畫成圖表之類的,看起來實在是沒意思,而且 K-means 跑起來實在是太慢了,所以這裏我還是稍微偷懶一下,直接引用一下一篇論文裏的結果吧。

結果來自論文 Document clustering using locality preserving indexing 這篇論文,這篇論文實際上是提的另一種聚類方法(下次如果有機會也會講到),不過在它的實驗中也有 K-means 和 Spectral Clustering 這兩組數據,抽取出來如下所示:

k TDT2 Reuters-21578
K-means SC K-means SC
2 0.989 0.998 0.871 0.923
3 0.974 0.996 0.775 0.816
4 0.959 0.996 0.732 0.793
9 0.852 0.984 0.553 0.625
10 0.835 0.979 0.545 0.615

其中 TDT2 和 Reuters-21578 分別是兩個被廣泛使用的標準文本數據集,雖然在不同的數據集上得出來的結果並不能直接拿來比較,但是在同一數據集上 K-means 和 SC (Spectral Clustering) 的結果對比就一目瞭然了。實驗中分別抽取了這兩個數據集中若干個類別(從 2 類到 10 類)的數據進行聚類,得出的 accuracy 分別在上表中列出(我偷懶沒有全部列出來)。可以看到,Spectral Clustering 這裏完勝 K-means 。

這麼強大的算法,再戴上“譜聚類”這麼一個高深莫測的名號,若不是模型無比複雜、包羅宇宙,就肯定是某鎮山之寶、不傳祕籍吧?其實不是這樣,Spectral Clustering 不管從模型上還是從實現上都並不複雜,只需要能求矩陣的特徵值和特徵向量即可──而這是一個非常基本的運算,任何一個號稱提供線性代數運算支持的庫都理應有這樣的功能。而關於 Spectral Clustering 的祕籍更是滿街都是,隨便從地攤上找來一本,翻開便可以看到 Spectral Clustering 算法的全貌:

  1. 根據數據構造一個 Graph ,Graph 的每一個節點對應一個數據點,將相似的點連接起來,並且邊的權重用於表示數據之間的相似度。把這個 Graph 用鄰接矩陣的形式表示出來,記爲 W 。一個最偷懶的辦法就是:直接用我們前面在 K-medoids 中用的相似度矩陣作爲 W 。
  2. 把 W 的每一列元素加起來得到 N 個數,把它們放在對角線上(其他地方都是零),組成一個 N\times N的矩陣,記爲 D 。並令 L = D-W 。
  3. 求出 L 的前 k 個特徵值(在本文中,除非特殊說明,否則“前 k 個”指按照特徵值的大小從小到大的順序)\{\lambda\}_{i=1}^k 以及對應的特徵向量 \{\mathbf{v}\}_{i=1}^k 。
  4. 把這 k 個特徵(列)向量排列在一起組成一個 N\times k 的矩陣,將其中每一行看作 k 維空間中的一個向量,並使用 K-means 算法進行聚類。聚類的結果中每一行所屬的類別就是原來 Graph 中的節點亦即最初的N 個數據點分別所屬的類別。

就是這麼幾步,把數據做了一些詭異的變換,然後還在背後偷偷地調用了 K-means 。到此爲止,你已經可以拿着它上街去招搖撞騙了。不過,如果你還是覺得不太靠譜的話,不妨再接着往下看,我們再來聊一聊 Spectral Clustering 那幾個“詭異變換”背後的道理何在。

其實,如果你熟悉 Dimensional Reduction (降維)的話,大概已經看出來了,Spectral Clustering 其實就是通過 Laplacian Eigenmap 的降維方式降維之後再做 K-means 的一個過程──聽起來土多了。不過,爲什麼要剛好降到 k 維呢?其實整個模型還可以從另一個角度導出來,所以,讓我們不妨先跑一下題。

在 Image Processing (我好像之前有聽說我對這個領域深惡痛絕?)裏有一個問題就是對圖像進行Segmentation (區域分割),也就是讓相似的像素組成一個區域,比如,我們一般希望一張照片裏面的人(前景)和背景被分割到不同的區域中。在 Image Processing 領域裏已經有許多自動或半自動的算法來解決這個問題,並且有不少方法和 Clustering 有密切聯繫。比如我們在談 Vector Quantization 的時候就曾經用 K-means 來把顏色相似的像素聚類到一起,不過那還不是真正的 Segmentation ,因爲如果僅僅是考慮顏色相似的話,圖片上位置離得很遠的像素也有可能被聚到同一類中,我們通常並不會把這樣一些“遊離”的像素構成的東西稱爲一個“區域”,但這個問題其實也很好解決:只要在聚類用的 feature 中加入位置信息(例如,原來是使用 R、G、B 三個值來表示一個像素,現在加入 x、y 兩個新的值)即可。

另一方面,還有一個經常被研究的問題就是 Graph Cut ,簡單地說就是把一個 Graph 的一些邊切斷,讓他被打散成一些獨立聯通的 sub-Graph ,而這些被切斷的邊的權值的總和就被稱爲 Cut 值。如果用一張圖片中的所有像素來組成一個 Graph ,並把(比如,顏色和位置上)相似的節點連接起來,邊上的權值表示相似程度,那麼把圖片分割爲幾個區域的問題實際上等價於把 Graph 分割爲幾個 sub-Graph 的問題,並且我們可以要求分割所得的 Cut 值最小,亦即:那些被切斷的邊的權值之和最小,直觀上我們可以知道,權重比較大的邊沒有被切斷,表示比較相似的點被保留在了同一個 sub-Graph 中,而彼此之間聯繫不大的點則被分割開來。我們可以認爲這樣一種分割方式是比較好的。

實際上,拋開圖像分割的問題不談,在 Graph Cut 相關的一系列問題中,Minimum cut (最小割)本身就是一個被廣泛研究的問題,並且有成熟的算法來求解。只是單純的最小割在這裏通常並不是特別適用,很多時候只是簡單地把和其他像素聯繫最弱的那一個像素給分割出去了,相反,我們通常更希望分割出來的區域(的大小)要相對均勻一些,而不是一些很大的區塊和一些幾乎是孤立的點。爲此,又有許多替代的算法提出來,如 Ratio Cut 、Normalized Cut 等。

不過,在繼續討論之前,我們還是先來定義一下符號,因爲僅憑文字還是很難表述清楚。將 Graph 表示爲鄰接矩陣的形式,記爲 W,其中 w_{ij} 是節點 i 到節點 j 的權值,如果兩個節點不是相連的,權值爲零。設 A 和B 爲 Graph 的兩個子集(沒有交集),那麼兩者之間的 cut 可以正式定義爲:

\displaystyle\text{cut}(A, B) = \sum_{i\in A, j\in B} w_{ij}

先考慮最簡單的情況,如果把一個 Graph 分割爲兩個部分的話,那麼 Minimum cut 就是要最小化 \text{cut}(A, \bar{A})(其中 \bar{A} 表示 A 的子集)。但是由於這樣經常會出現孤立節點被分割出來的情況,因此又出現了 RatioCut :

\displaystyle\text{RatioCut}(A, B) = \frac{\text{cut}(A, \bar{A})}{|A|} + \frac{\text{cut}(A, \bar{A})}{|\bar{A}|}

以及 NormalizedCut :

\displaystyle\text{NCut}(A, B) = \frac{\text{cut}(A, \bar{A})}{\text{vol}(A)} + \frac{\text{cut}(A, \bar{A})}{\text{vol}(\bar{A})}

其中 |A| 表示 A 中的節點數目,而 \text{vol}(A) = \sum_{i\in A}w_{ij} 。兩者都可以算作 A 的“大小”的一種度量,通過在分母上放置這樣的項,就可以有效地防止孤立點的情況出現,達到相對平均一些的分割。事實上,Jianbo Shi 的這篇 PAMI paper:Normalized Cuts and Image Segmentation 正是把 NormalizedCut 用在圖像分割上了。

搬出 RatioCut 和 NormalizedCut 是因爲它們和這裏的 Spectral Clustering 實際上有非常緊密的聯繫。看看 RatioCut ,式子雖然簡單,但是要最小化它卻是一個 NP 難問題,不方便求解,爲了找到解決辦法,讓我們先來做做變形。

令 V 表示 Graph 的所有節點的集合,首先定義一個 N 維向量 f

\displaystylef_i = \left\{\begin{array}{ll}\sqrt{|\bar{A}|/|A|} &\text{if } v_i \in A \\-\sqrt{|A|/|\bar{A}|} & \text{if } v_i \in \bar{A}\end{array}\right.

再回憶一下我們最開始定義的矩陣 L=D-W ,其實它有一個名字,叫做 Graph Laplacian ,不過,我們後面可以看到,其實有好幾個類似的矩陣都叫做這個名字:

Usually, every author just calls “his” matrix the graph Laplacian.

其實也可以理解,就好象現在所有的廠家都說自己的技術是“雲計算”一樣。這個 L 有一個性質就是:

\displaystylef'Lf = \frac{1}{2}\sum_{i,j=1}^N w_{ij}(f_i-f_j)^2

這個是對任意向量 f 都成立的,很好證明,只要按照定義展開就可以得到了。把我們剛纔定義的那個 f 帶進去,就可以得到

\displaystyle\begin{aligned} f'Lf &= \sum_{i,j=1}^Nw_{ij}(f_i-f_j)^2 \\&= \sum_{i\in A, j\in\bar{A}}w_{ij}\left(\sqrt{\frac{|\bar{A}|}{|A|}}+\sqrt{\frac{|A|}{|\bar{A}|}}\right)^2+ \sum_{i\in \bar{A}, j\in A}w_{ij}\left(-\sqrt{\frac{|\bar{A}|}{|A|}}-\sqrt{\frac{|A|}{|\bar{A}|}}\right)^2\\&=2\text{cut}(A,\bar{A})\left(\frac{|\bar{A}|}{|A|}+\frac{|A|}{|\bar{A}|}+2\right)\\&=2\text{cut}(A,\bar{A})\left(\frac{|A|+|\bar{A}|}{|A|} +\frac{|A|+|\bar{A}|}{|\bar{A}|}\right)\\&=2|V|\cdot\text{RatioCut}(A,\bar{A})\end{aligned}

另外,如果令 \mathbf{1} 爲各個元素全爲 1 的向量的話,直接展開可以很容易得到 f'\mathbf{1} = \sum f_i = 0 和 \|f\|^2 = \sum f_i^2 = n 。由於 |V| 是一個常量,因此最小化 RatioCut 就等價於最小化 f'Lf ,當然,要記得加上附加條件 f \bot \mathbf{1} 以及 \|f\| = \sqrt{n} 。

問題轉化到這個樣子就好求了,因爲有一個叫做 Rayleigh quotient 的東西:

\displaystyleR(A, x) = \frac{x'Ax}{x'x}

他的最大值和最小值分別等於矩陣 A 的最大的那個特徵值和最小的那個特徵值,並且極值在 x 等於對應的特徵向量時取到。由於 f'f = \sqrt{n} 是常數,因此最小化 f'Lf 實際上也就等價於最小化 R(L, f) ,不過由於 L 的最小的特徵值爲零,並且對應的特徵向量正好爲 \mathbf{1} (我們這裏僅考慮 Graph 是聯通的情況),不滿足 f \bot \mathbf{1} 的條件,因此我們取第二個小的特徵值,以及對應的特徵向量 v 。

到這一步,我們看起來好像是很容易地解決了前面那個 NP 難問題,實際上是我們耍了一個把戲:之前的問題之所以 NP 難是因爲向量 f 的元素只能取兩個值 \sqrt{|\bar{A}|/|A|} 和 -\sqrt{|A|/|\bar{A}|} 中的一個,是一個離散的問題,而我們求的的特徵向量 v 其中的元素可以是任意實數,就是說我們將原來的問題限制放寬了。那如何得到原來的解呢?一個最簡單的辦法就是看 v 的每個元素是大於零還是小於零,將他們分別對應到離散情況的 \sqrt{|\bar{A}|/|A|}和 -\sqrt{|A|/|\bar{A}|} ,不過我們也可以採取稍微複雜一點的辦法,用 k=2 的 K-means 來將 v 的元素聚爲兩類。

到此爲止,已經有 Spectral Clustering 的影子了:求特徵值,再對特徵向量進行 K-means 聚類。實際上,從兩類的問題推廣到 k 類的問題(數學推導我就不再詳細寫了),我們就得到了和之前的 Spectral Clustering 一模一樣的步驟:求特徵值並取前 k 個最小的,將對應的特徵向量排列起來,再按行進行 K-means 聚類。分毫不差!

用類似的辦法,NormalizedCut 也可以等價到 Spectral Clustering 不過這次我就不再講那麼多了,感興趣的話(還包括其他一些形式的 Graph Laplacian 以及 Spectral Clustering 和 Random walk 的關係),可以去看這篇 Tutorial :A Tutorial on Spectral Clustering 。

爲了緩和一下氣氛,我決定貼一下 Spectral Clustering 的一個簡單的 Matlab 實現:

function idx = spectral_clustering(W, k) D = diag(sum(W)); L = D-W;   opt =struct('issym', true, 'isreal', true); [V dummy] = eigs(L, D, k, 'SM', opt);   idx = kmeans(V, k); end

最後,我們再來看一下本文一開始說的 Spectral Clustering 的幾個優點:

  • 只需要數據的相似度矩陣就可以了。這個是顯然的,因爲 Spectral Clustering 所需要的所有信息都包含在 W 中。不過一般 W 並不總是等於最初的相似度矩陣——回憶一下,W 是我們構造出來的 Graph 的鄰接矩陣表示,通常我們在構造 Graph 的時候爲了方便進行聚類,更加強到“局部”的連通性,亦即主要考慮把相似的點連接在一起,比如,我們設置一個閾值,如果兩個點的相似度小於這個閾值,就把他們看作是不連接的。另一種構造 Graph 的方法是將 n 個與節點最相似的點與其連接起來。
  • 抓住了主要矛盾,忽略了次要的東西,Performance 比傳統的 K-means 要好。實際上 Spectral Clustering 是在用特徵向量的元素來表示原來的數據,並在這種“更好的表示形式”上進行 K-means 。實際上這種“更好的表示形式”是用 Laplacian Eigenmap 進行降維的後的結果,如果有機會,下次談 Dimensionality Reduction 的時候會詳細講到。而降維的目的正是“抓住主要矛盾,忽略次要的東西”。
  • 計算複雜度比 K-means 要小。這個在高維數據上表現尤爲明顯。例如文本數據,通常排列起來是維度非常高(比如,幾千或者幾萬)的稀疏矩陣,對稀疏矩陣求特徵值和特徵向量有很高效的辦法,得到的結果是一些 k 維的向量(通常 k 不會很大),在這些低維的數據上做 K-means 運算量非常小。但是對於原始數據直接做 K-means 的話,雖然最初的數據是稀疏矩陣,但是 K-means 中有一個求 Centroid 的運算,就是求一個平均值:許多稀疏的向量的平均值求出來並不一定還是稀疏向量,事實上,在文本數據裏,很多情況下求出來的 Centroid 向量是非常稠密,這時再計算向量之間的距離的時候,運算量就變得非常大,直接導致普通的 K-means 巨慢無比,而 Spectral Clustering 等工序更多的算法則迅速得多的結果。

說了這麼多,好像有些亂,不過也只能到此打住了。最後再多嘴一句,Spectral Clustering 名字來源於Spectral theory ,也就是用特徵分解來分析問題的理論了。

 

=================================================================

 

什麼叫Spectral Algorithm?
 廣義上來說,任何在演算法中用到SVD/特徵值分解的,都叫Spectral Algorithm。  從很老很老的PCA/LDA,到比較近的Spectral Embedding/Clustering,都屬於這類。


 爲什麼要用SVD/特徵值分解?
 其實並不是爲用而用,而是不得不用。  目前在研究領域碰到的很多基礎問題都是NP-hard的,找一個比較好的近似演算法要費很大的精力;就算找到多項式的近似方法,也會出現實際使用上仍然太慢/解陷入局部極小等問題。

 比如說用K-means聚類,建模本身已經夠簡單了,但它是NP-hard的,用傳統的EM迭代作近似解會陷入局部極小。

 反之,SVD理論上只有唯一解,演算法速度相對又快,並且有大量理論結果及周邊性質支持,可以算是一個很理想地能將NP-hard問題“靠”上去的模型;它的另一個好處是,作爲帶約束二次規劃的一種特殊情況,它對運算式爲二次的目標函數的“相容性”比較好,“靠”所要求的數學技巧不高,任何人,任何方向都能拿來試試。


 Spectral Algorithm的幾個方向:
 傳統的如PCA/LDA用來做線性降維,2000年左右的一些Spectral Embedding及Spectral Clustering,還有周邊的一些,如Low-rank approximation等等。

 

Spectral Clustering,中文通常稱爲“譜聚類”。由於使用的矩陣的細微差別,譜聚類實際上可以說是一“類”算法。

Spectral Clustering 和傳統的聚類方法(例如 K-means)比起來有不少優點:

1)和 K-medoids 類似,Spectral Clustering 只需要數據之間的相似度矩陣就可以了,而不必像 K-means 那樣要求數據必須是 N 維歐氏空間中的向量。

2)由於抓住了主要矛盾,忽略了次要的東西,因此比傳統的聚類算法更加健壯一些,對於不規則的誤差數據不是那麼敏感,而且 performance 也要好一些。許多實驗都證明了這一點。事實上,在各種現代聚類算法的比較中,K-means 通常都是作爲 baseline 而存在的。

3)計算複雜度比 K-means 要小,特別是在像文本數據或者平凡的圖像數據這樣維度非常高的數據上運行的時候。

Spectral Clustering 算法的全貌:

1)根據數據構造一個 Graph ,Graph 的每一個節點對應一個數據點,將相似的點連接起來,並且邊的權重用於表示數據之間的相似度。把這個 Graph 用鄰接矩陣的形式表示出來,記爲 W 。

2)把每一列元素加起來得到N 個數,把它們放在對角線上(其他地方都是零),組成一個N*N的矩陣,記爲D 。並令L = D - W 。

3)求出L的前k個特徵值(在本文中,除非特殊說明,否則“前k個”指按照特徵值的大小從小到大的順序)以及對應的特徵向量。

4)把這k個特徵(列)向量排列在一起組成一個N*k的矩陣,將其中每一行看作k維空間中的一個向量,並使用 K-means 算法進行聚類。聚類的結果中每一行所屬的類別就是原來 Graph 中的節點亦即最初的N個數據點分別所屬的類別。

下面是Spectral Clustering 的一個簡單的 Matlab 實現:

function idx = spectral_clustering(W, k)
    D = diag(sum(W));
    L = D-W;
    opt = struct('issym', true, 'isreal', true);
    [V dummy] = eigs(L, D, k, 'SM', opt);
    idx = kmeans(V, k);
end

      最後,我們再來看一下本文一開始說的 Spectral Clustering 的幾個優點:

1)只需要數據的相似度矩陣就可以了。這個是顯然的,因爲 Spectral Clustering 所需要的所有信息都包含在W中。不過一般W並不總是等於最初的相似度矩陣——回憶一下, 是我們構造出來的 Graph 的鄰接矩陣表示,通常我們在構造 Graph 的時候爲了方便進行聚類,更加強到“局部”的連通性,亦即主要考慮把相似的點連接在一起,比如,我們設置一個閾值,如果兩個點的相似度小於這個閾值,就把他們看作是不連接的。另一種構造 Graph 的方法是將 n 個與節點最相似的點與其連接起來。

2)抓住了主要矛盾,忽略了次要的東西,Performance 比傳統的 K-means 要好。實際上 Spectral Clustering 是在用特徵向量的元素來表示原來的數據,並在這種“更好的表示形式”上進行 K-means 。

3)計算複雜度比 K-means 要小。這個在高維數據上表現尤爲明顯。例如文本數據,通常排列起來是維度非常高(比如,幾千或者幾萬)的稀疏矩陣,對稀疏矩陣求特徵值和特徵向量有很高效的辦法,得到的結果是一些 k 維的向量(通常 k 不會很大),在這些低維的數據上做 K-means 運算量非常小。但是對於原始數據直接做 K-means 的話,雖然最初的數據是稀疏矩陣,但是 K-means 中有一個求 Centroid 的運算,就是求一個平均值:許多稀疏的向量的平均值求出來並不一定還是稀疏向量,事實上,在文本數據裏,很多情況下求出來的 Centroid 向量是非常稠密,這時再計算向量之間的距離的時候,運算量就變得非常大,直接導致普通的 K-means 巨慢無比,而 Spectral Clustering 等工序更多的算法則迅速得多的結果。

作者:洞庭散人

出處:http://phinecos.cnblogs.com/


 爲什麼先做降維再做K-means,效果會更好呢?
 另外,有趣的是K-means可以用PCA來做近似解。  K-means是說找到K個點,使得所有點到這K個點的距離平方和最小;
 而SVD是說找到一個子空間,使得所有點到這個子空間的距離平方和最小。  於是這兩者就建立了聯繫,K-means便relax到SVD上去了。

 

 Spectral Clustering/Embedding:

 Spectral Clustering可算是Spectral Algorithm的重頭戲。
 所謂Clustering,就是說聚類,把一堆東西(合理地)分成兩份或者K份。  從數學上來說,聚類的問題就相當於Graph Partition的問題,即給定一個圖G = (V, E),如何把它的頂點集劃分爲不相交的子集,使得這種劃分最好。  其難點主要有兩個:

 1.這個“合理”其實相當難達到,隨便設一個目標函數可能達不到希望的結果。  大家可以看了看[1] Ravi Kannan and Adrian Vetta, On clusterings: good, bad and spectral,這裏詳細地討論了一下準則的選擇問題。
 2.即使我們定義了一個相當好的聚類準則,如何優化它又是一個問題。

 對於1,在Spectral Clustering這一塊,各家有各家的想法。  主要有以下幾種:
 a)大名鼎鼎的Normalized Cut[2],還有一些變種如Ratio Cut/Minmax cut.
 b)和代數圖論緊密相聯的Minimum conductance[1].
 c)沒有準則,但有證明的演算法[3]
 d)不基於圖,而是reformulate原來的聚類方法,使之變成SVD能解的問題[4]。
 2則完全被1的選取所決定。

 

 Normalized Cut:
 在圖上,定義什麼樣的聚類最好,最簡單的方法是圈定K個不相交頂點集之後,希望頂點集之間的邊,其權值的和最小。  (邊上的權值代表的是兩頭的頂點鄰近的程度,或者說相似度)這就是所謂MinCut(最小割)問題。 二類分類的最小割不是NP-hard的,但是這不能讓人感到開心,因爲MinCut這個準則對於聚類不好。

 具體來說,Mincut完全可能將離大部隊過遠的單個頂點與其他頂點分開,形成兩類。
 事實上,我們不僅僅要讓割邊的權和最小,而且要讓這K個頂點集都差不多大,這樣才符合聚類給人的直觀感覺。

 於是在MinCut的基礎上,出現了Normalized Cut.思路很簡單,將Cut normalize一下,除以表現頂點集大小的某種量度(如vol A =所有A中頂點集的度之和)。
 也就是Normalize Cut(A, B) = Cut(A, B) / volA + cut(A, B) / volB
 然而這樣一改,NP-hard就來了。  這幾乎是所有組合優化問題的惡夢。

 怎麼辦呢?  把組合優化問題連續化,即所謂減少約束,進行適當的relax。  那麼爲什麼會和SVD扯上的呢?

 很簡單,聚類是東西分成不相交集,也就是有正交的含義在裏面;只是分東西必須是0-1式的,這種離散化,就是np-hard的原因。  我們把正交約束保留,但把離散變成連續的,聚類就變成了尋找(列)正交陣的優化問題,那正是SVD的火力所在!

 就這樣,通過這種巧妙的relax,NP-hard問題有了近似解。  且不說這近似解的質量如何,這種方法是相當令人振奮的。  (關於Normalized Cut近似解的質量,似乎沒有什麼文章能夠給出嚴格的證明,只是實際效果不錯就是了。)

 值得一提的是,Normalized Cut還和圖上的Markov chain有緊密的關係[5]。  Normalized Cut這個量度,換成Markov chain的語言就是在圖上隨機遊走,子集間相互“串門”的概率大小。  相當有趣。

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