譜聚類演算法原理介紹

2021-06-28 21:42:02 字數 3620 閱讀 2660

給你上若干個部落格,讓你將它們分成k類,你會怎樣做?想必有很多方法,本文要介紹的是其中的一種——譜聚類。

聚類的直觀解釋是根據樣本間相似度,將它們分成不同組。譜聚類的思想是將樣本看作頂點,樣本間的相似度看作帶權的邊,從而將聚類問題轉為圖分割問題:找到一種圖分割的方法使得連線不同組的邊的權重盡可能低(這意味著組間相似度要盡可能低),組內的邊的權重盡可能高(這意味著組內相似度要盡可能高)。將上面的例子代入就是將每乙個部落格當作圖上的乙個頂點,然後根據相似度將這些頂點連起來,最後進行分割。分割後還連在一起的頂點就是同一類了。更具體的例子如下圖所示:

在上圖中,一共有6個頂點(部落格),頂點之間的連線表示兩個頂點的相似度,現在要將這圖分成兩半(兩個類),要怎樣分割(去掉哪邊條)?根據譜聚類的思想,應該去掉的邊是用虛線表示的那條。最後,剩下的兩半就分別對應兩個類了。

根據這個思想,可以得到unnormalized譜聚類和normalized譜聚類,由於前者比後者簡單,所以本文介紹unnormalized譜聚類的幾個步驟(假設要分k個類):

(a)建立similarity graph,並用 w 表示similarity graph的帶權鄰接矩陣

(b)計算unnormalized graph laplacian matrix l(l = d - w, 其中d是degree matrix)

(c)計算l的前k個最小的特徵向量

(d)把這k個特徵向量排列在一起組成乙個n*k的矩陣,將其中每一行看作k維空間中的乙個向量,並使用 k-means 演算法進行聚類。

這一節主要從大體上解釋unnormalized譜聚類的四個步驟是怎麼來的,不涉及具體的公式推導。

(a)譜聚類的思想就是要轉化為圖分割問題。因此,第一步就是將原問題轉化為圖。轉為圖有兩個問題要解決:

一是兩個頂點的邊要怎樣定義;二是要保留哪些邊。

對於第乙個問題,如果兩個點在一定程度上相似,就在兩個點之間新增一條邊。相似的程度由邊的權重表示(上圖中邊上面的數值就是權重了)。因此,只要是計算相似度的公式都可用,不過常用的是gaussian similarity function。

對於第二個問題,

要保留部分邊的原因有:邊太多了不好處理;權重太低的邊是多餘的。常用的保留邊的方法是建立k-nearest neighbor graph。在這種圖中,每個頂點只與k個相似度最高的點連邊。

(b)unnormalized graph laplacian matrix(以下用l表示)有很多很好的性質,也正是這個原因,才要在第二步中計算這麼乙個矩陣。最重要的性質是下面這一組性質:

這一組性質將在之後的公式推導中起到決定性作用。

(c)將原問題轉化為圖後,接下來的工作就是決定怎樣分割了。圖分割問題實際上就是最小割問題(mincut problem)。最小割問題可定義為最小化以下目標函式:

其中k表示分成k個組,ai表示第i個組,

這個式子的直觀意義:如果要分成k個組,那麼其代價就是進行分割時去掉的邊的權重的總和。可惜的是直接最小化這式子通常會導致不好的分割。以分成2類為例,這個式子通常會將圖分成這樣的兩類:乙個點為一類,剩下的所有點為另一類。顯然,這樣的分割是很不好的。因為我們期望著每個類都有合理的大小。所以,要對這個式子進行改進,改進後的公式(稱為ratiocut)如下:

其中|a|表示a組中包含的頂點數目。

在ratiocut中,如果某一組包含的頂點數越少,那麼它的值就越大。在乙個最小化問題中,這相當於是懲罰,也就是不鼓勵將組分得太小。現在只要將最小化ratiocut解出來,分割就完成了。不幸的是,這是個np難問題。想要在多項式時間內解出來,就要對這個問題作乙個轉化了。在轉化的過程中,就用到上面提到的l的那一組性質,經過若干推導,最後可以得到這樣的乙個問題:

其中h是乙個矩陣,它的元素的定義(eq.(5))如下:

如果h矩陣的元素讓h矩陣的元素能夠取任意值,這個問題就變成多項式時間內可解的了,此時問題變為:

根據rayleigh-ritz theorem,這個問題的解是l的前k個最小的特徵向量組成的矩陣h,其中特徵向量是按列來排,即h的每一列,均為乙個特徵向量。

(d)在第三步中,我們為了鬆馳np難問題,讓h矩陣取任意值,因此,解出來的h矩陣不再具有原來的性質——元素值能指出哪個點屬於哪一類。儘管如此,對於k-means來說,將h矩陣的每一行當作乙個點進行聚類還是挺輕鬆的。因此,用k-means對h矩陣進行聚類作為譜聚類的最終結果。

以下是unnormalized譜聚類的matlab版實現(的**格式選擇中居然沒有matlab的。。。這裡選個c++的):

function [ c, l, d, q, v ] = spectralclustering(w, k)

% spectral clustering algorithm

% input: adjacency matrix w; number of cluster k

% return: cluster indicator vectors as columns in c; unnormalized laplacian l; degree matrix d;

% eigenvectors matrix q; eigenvalues matrix v

% calculate degree matrix

degs = sum(w, 2);

d = sparse(1:size(w, 1), 1:size(w, 2), degs);

% compute unnormalized laplacian

l = d - w;

% compute the eigenvectors corresponding to the k smallest eigenvalues

% diagonal matrix v is ncutl'

s k smallest magnitude eigenvalues

% matrix q whose columns are the corresponding eigenvectors.

[q, v] = eigs(l, k, '

sa');

% use the k-means algorithm to cluster v row-wise

% c will be a n-by-1 matrix containing the cluster number for each data point

c = kmeans(q, k);

% convert c to a n-by-k matrix containing the k indicator vectors as columns

c = sparse(1:size(d, 1), c, 1);

end

譜聚類概述

一 簡述 聚類是對探索性資料分析最廣泛使用的技術,在現在各個科學領域中處理沒有類標的資料時,人們總是想通過確定資料中不同樣本的歸類,來獲取對資料的直觀印象。傳統的聚類方法有很多,像k means,single linkage等,但是k means演算法有些缺點,比如當樣本維度特別大的時候,k mea...

譜聚類演算法Matlab快速實現

ncut譜聚類完整函式定義 儲存為.m檔案 function c spectralclustering data,k,a data是資料點矩陣 k是聚類個數 a代表高斯核函式的引數 untitled summary of this function goes here detailed explan...

點雲學習 3 2 聚類演算法之譜聚類

譜聚類推導過程較為繁瑣,本文不作介紹,重點在於使用python語言實現演算法。譜聚類步驟 1.建無向圖,獲取鄰接矩陣w 對稱矩陣 2.計算拉普拉斯矩陣l l d w,其中d為對角陣,每個元素為w在該行求和 3.對l進行特徵分解,獲取最小的k個特徵值對應的特徵向量 4.將k個特徵向量構造成矩陣v 5....