1. 程式人生 > >影象聚類-譜聚類

影象聚類-譜聚類

最近做的一個東西跟這個相關,本來希望是用深度學習對於沒有標籤的影象資料進行分類,但是通常情況下,深度學習是對有標籤的資料進行學習,目的是用來自動提取特徵,代替傳統的手工提取特徵。因此,比較容易想到,對於無標籤又需要分類的影象資料,可以嘗試先採用聚類來解決.

下面的內容是譯自Jan Erik Solem的《Programming Computer Vision with Python》的第6章,該書已經由朱文濤和袁勇學長對該書進行了翻譯,主要涉及相關程式碼和例項,可以轉至http://yongyuan.name/pcvwithpython/。我僅對其中第6章的理論進行翻譯,中途穿插自己的理解。

該博文僅供交流學習,如有侵權,請聯絡刪除。

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

(接上)

6.3 譜聚類

聚類演算法的一個有趣的型別叫做譜聚類。譜聚類相對K均值和層次聚類來說有不同的方法。

對於n個元素的相似度矩陣(或者叫affinity matrix, 有時也叫距離矩陣)是一個有著成對相似度分數的n*n矩陣。譜聚類的這個名稱是從相似度矩陣構造的矩陣的譜的使用得來。這個矩陣的特徵向量被用來降維,然後再聚類。

譜聚類方法的其中一個優勢是唯一的輸入就是這個矩陣,並且可以被你可以想到的任何相似度度量構造出來。像K均值和層次聚類這樣的方法計算特徵向量的平均值,這個限制了特徵(或者是描述符)對向量(為了能夠計算平均值)。有了譜方法,不再需要任何型別的特徵向量,只有“距離”或者“相似度”。

這裡描述它是如何實現的。給定一個有著相似度分數sij的n*n的相似度矩陣S,我們可以建立一個矩陣,叫做拉普拉斯矩陣

(Laplacian matrix),


其中I是單位矩陣,D是包含S的行和的對角矩陣,在拉普拉斯矩陣建立公式中的矩陣表示為


為了使得表達更加清晰,我們使用相似度元素sij的小值並且要求(術語距離矩陣也許在這個例子中更加適合)。

通過計算L的特徵向量和使用對應於k個最大的特徵值的k個特徵向量建立一個特徵向量的集合(記住我們可能會沒有任何東西開始)。使用k個特徵向量作為列建立一個矩陣,行將被作為新的特徵向量(長度為k)。這些新的特徵向量可以使用類似k均值被聚類產生最終的簇。本質上,演算法做的事情是把原始的資料轉換成可以被更加容易聚類的新的特徵向量(在一些情況下,使用在一開始不能用的聚類演算法)。

對理論足夠了解之後,我們來看看應用到實際案例中的程式碼。同樣,我們還是使用在k均值中案例中使用的字型影象。



在這個情況下,我們使用成對的歐幾里德距離僅僅建立S,並計算在k個特徵向量上的標準k均值聚類(在這個特殊情況下k=5)。記住矩陣V包含根據特徵值排序的特徵向量。最後,簇被畫出來。圖8表現了一個案例執行的簇(注意k均值的step在每一次執行可能會得到不同的結果)。


圖8-使用拉普拉斯矩陣的特徵向量生成的字型影象的譜聚類

我們也將這個案例用在我們沒有任何特徵向量或者任何相似度的嚴格定義的情況下。

對於這裡提出的演算法有許多不同的版本和選擇。其中的每一個都有自己如何建立矩陣L和如何處理特徵向量的想法。對於譜聚類和一些共同演算法的更多細節可以看一看這篇論文A comparison of spectralclustering algorithms. Deepak Verma and Marina Meila. Technical report, 2003。