1. 程式人生 > >譜聚類演算法(Spectral Clustering)

譜聚類演算法(Spectral Clustering)

    譜聚類(Spectral Clustering, SC)是一種基於圖論的聚類方法——將帶權無向圖劃分為兩個或兩個以上的最優子圖,使子圖內部儘量相似,而子圖間距離儘量距離較遠,以達到常見的聚類的目的。其中的最優是指最優目標函式不同,可以是割邊最小分割——如圖1的Smallest cut(如後文的Min cut), 也可以是分割規模差不多且割邊最小的分割——如圖1的Best cut(如後文的Normalized cut)。

clip_image001圖1 譜聚類無向圖劃分——Smallest cut和Best cut

    這樣,譜聚類能夠識別任意形狀的樣本空間且收斂於全域性最優解,其基本思想是利用樣本資料的相似矩陣

(拉普拉斯矩陣)進行特徵分解後得到的特徵向量進行聚類。

1 理論基礎

    對於如下空間向量item-user matrix:

clip_image002

    如果要將item做聚類,常常想到k-means聚類方法,複雜度為o(tknm),t為迭代次數,k為類的個數、n為item個數、m為空間向量特徵數:

    1 如果M足夠大呢?

    2 K的選取?

    3 類的假設是凸球形的?

    4 如果item是不同的實體呢?

    5 Kmeans無可避免的區域性最優收斂?

       ……

    這些都使常見的聚類問題變得相當複雜。

1.1 圖的表示

    如果我們計算出item與item之間的相似度,便可以得到一個只有item的相似矩陣,進一步,將item看成了Graph(G)中Vertex(V),歌曲之間的相似度看成G中的Edge(E),這樣便得到我們常見的圖的概念。

    對於圖的表示(如圖2),常用的有:

鄰接矩陣:E,eij表示vi和vi的邊的權值,E為對稱矩陣,對角線上元素為0,如圖2-2。

Laplacian矩陣:L = D – E, 其中di (行或列元素的和),如圖2-3。

clip_image004圖2 圖的表示

1.2 特徵值與L矩陣

    先考慮一種最優化影象分割方法,以二分為例,將圖cut為S和T兩部分,等價於如下損失函式cut(S, T),如公式1所示,即最小(砍掉的邊的加權和)。

clip_image006

    假設二分成兩類,S和T,用q(如公式2所示)表示分類情況,且q滿足公式3的關係,用於類標識。

    那麼:

clip_image008

    其中D為對角矩陣,行或列元素的和,L為拉普拉斯矩陣。

    由:

clip_image010clip_image011

    有:

1、 L為對稱半正定矩陣,保證所有特徵值都大於等於0;

2、 L矩陣有唯一的0特徵值,其對應的特徵向量為1

    離散求解q很困難,如果將問題鬆弛化為連續實數值,由瑞利熵的性質知其二將你型的最小值就是L的特徵值們(最小值,第二小值,......,最大值分別對應矩陣L的最小特徵值,第二小特徵值,......,最大特徵值,且極值q相應的特徵向量處取得,請參見瑞利熵(Rayleigh quotient))。

    寫到此,不得不對數學家們致敬,將cut(S,T),巧妙地轉換成拉普拉斯矩陣特徵值(向量)的問題,將離散的聚類問題,鬆弛為連續的特徵向量,最小的系列特徵向量對應著圖最優的系列劃分方法。剩下的僅是將鬆弛化的問題再離散化,即將特徵向量再劃分開,便可以得到相應的類別,如將圖3中的最小特徵向量,按正負劃分,便得類{A,B,C}和類{D,E,F,G}。在K分類時,常將前K個特徵向量,採用kmeans分類。

    PS

    1、此處雖再次提到kmeans,但意義已經遠非引入概念時的討論的kmeans了,此處的kmeans,更多的是與ensemble learning相關,在此不述;

    2、k與聚類個數並非要求相同,可從第4節的相關物理意義中意會;

    3、在前k個特徵向量中,第一列值完全相同(迭代演算法計算特徵向量時,值極其相近),kmeans時可以刪除,同時也可以通過這一列來簡易判斷求解特徵值(向量)方法是否正確,常常問題在於鄰接矩陣不對稱。

clip_image012

圖3 圖的L矩陣的特徵值與特徵向量

2 最優化方法

    在kmeans等其它聚類方法中,很難刻劃類的大小關係,區域性最優解也是無法迴避的漏病。當然這與kmeans的廣泛使用相斥——原理簡單。

2.1 Min cut方法

    如2.2節的計算方法,最優目標函式如下的圖cut方法:

clip_image014

    計算方法,可直接由計算L的最小特徵值(特徵向量),求解。

2.2 Nomarlized cut方法

    Normarlized cut,目標是同時考慮最小化cut邊和劃分平衡,以免像圖1中的cut出一個單獨的H。衡量子圖大小的標準是:子圖各個端點的Degree之和。

clip_image016

2.3 Ratio Cut 方法

    Ratio cut的目標是同時考慮最小化cut邊和劃分平衡,以免像圖1中的cut出一個單獨的H。

    最優目標函式為:

clip_image018

2.4 Normalized相似變換

    歸一化的L矩陣有:

clip_image020

    因而L的最小特徵值與D-(1/2)E D-(1/2)的最大特徵值對應。

    而計算的L相比計算L要稍具優勢,在具體實用中,常以L替代L,但是min cut和ratio cut不可以。

    PS:這也是常常在人們的部落格中,A說譜聚類為求最大K特徵值(向量)B說譜聚類為求最小K個特徵值(向量的原因)

3 譜聚類步驟

第一步:資料準備,生成圖的鄰接矩陣;

第二步:歸一化普拉斯矩陣;

第三步:生成最小的k個特徵值和對應的特徵向量;

第四步:將特徵向量kmeans聚類(少量的特徵向量);

4 譜聚類的物理意義

    譜聚類中的矩陣:

clip_image022

    可見不管是L、L都與E聯絡特別大。如果將E看成一個高維向量空間,也能在一定程度上反映item之間的關係。將E直接kmeans聚類,得到的結果也能反映V的聚類特性,而譜聚類的引入L和L是使得G的分割具有物理意義。

    而且,如果E的item(即n)足夠大,將難計算出它的kmeans,我們完全可以用PCA降維(仍為top的特徵值與向量)。

    上述對將E當成向量空間矩陣,直觀地看符合我們的認知,但缺乏理論基礎;而L(L等)的引入,如第2節所述,使得計算具有理論基礎,其前k個特徵向量,也等價於對L(L等)的降維。

    因而聚類就是為圖的劃分找了理論基礎,能達到降維的目的。

其中不少圖出源於Mining of Massive Datasets,對於同仁們的佈道授業,一併感謝。

推薦相關相關文件:Wen-Yen Chen, Yangqiu Song, Hongjie Bai, Chih-Jen Lin, Edward Y. Chang. Parallel Spectral Clustering in Distributed Systems.

------

相關推薦

演算法(Spectral Clustering)

    譜聚類(Spectral Clustering, SC)是一種基於圖論的聚類方法——將帶權無向圖劃分為兩個或兩個以上的最優子圖,使子圖內部儘量相似,而子圖間距離儘量距離較遠,以達到常見的聚類的目的。其中的最優是指最優目標函式不同,可以是割邊最小分割——如圖1的Smallest cut(如後文的M

演算法(Spectral Clustering)優化與擴充套件

    譜聚類(Spectral Clustering, SC)在前面的博文中已經詳述,是一種基於圖論的聚類方法,簡單形象且理論基礎充分,在社交網路中廣泛應用。本文將講述進一步擴充套件其應用場景:首先是User-Item協同聚類,即spectral coclustering,之後再詳述譜聚類的進一步優化。

Spectral Clustering演算法介紹

一. 前言 本來想寫關於聚類系列演算法的介紹,但是聚類系列的其它幾個演算法原理比較簡單,網上有大量的教程可以查閱。這裡主要是介紹一下譜聚類演算法,做一個學習筆記,同時也希望對想要了解該演算法的朋友有一個幫助。關於聚類的其他系列演算法,這裡推薦一個寫的很不錯的部落格。 譜聚

spectral clustering

1. 譜聚類概述 譜聚類是從圖論中演化出來的演算法,後來在聚類中得到了廣泛的應用。它的主要思想是把所有的資料看做空間中的點,這些點之間可以用邊連線起來。距離較遠的兩個點之間的邊權重值較低,而距離較近的兩個點之間的邊權重值較高,通過對所有資料點組成的圖進行切圖,讓切圖後不同的子圖間邊權重和

spectral clustering)及其實現詳解

Preface 開了很多題,手稿都是寫好一直思考如何放到CSDN上來,一方面由於公司技術隱私,一方面由於面向物件不同,要大改,所以一直沒貼出完整,希望日後可以把開的題都補充全。 先把大綱列出來: 一、從狄多公主圈地傳說說起 二、譜聚類的演算

Spectral Clustering)原理及Python實現

譜聚類原理及Python實現 圖模型   無向帶權圖模型 G=<V,E> G =< V ,

spectral clustering)原理總結

    譜聚類(spectral clustering)是廣泛使用的聚類演算法,比起傳統的K-Means演算法,譜聚類對資料分佈的適應性更強,聚類效果也很優秀,同時聚類的計算量也小很多,更加難能可貴的是實現起來也不復雜。在處理實際的聚類問題時,個人認為譜聚類是應該首先考慮的幾種演算法之一。下面我們就對譜聚類的

演算法及其程式碼(Spectral Clustering

簡介 文章將介紹譜聚類(spectral clustering)的基本演算法,以及在matlab下的程式碼實現。介紹內容將包括: 從圖分割角度直觀理解譜聚類譜聚類演算法步驟資料以及實現程式碼 本文將不會涉及細節化的證明和推導,如有興趣可參考july大

演算法入門教程(三)—— 求f^TLf的最小值

在上一篇部落格中,我們知道目標函式變為 argmin⁡f∈R6fTLfarg \min \limits_{f \in \R^6} f^TLfargf∈R6min​fTLf,即找到一個fff,使得 fTLff^TLffTLf 取得最小值 這篇部落格將通過求導的方

【無監督學習】5:演算法原理介紹

前言:學習譜聚類,最好有一些圖論、矩陣分解(SVD)方面的知識,這樣會更加有利於譜聚類的學習。當然,譜聚類理解起來並不困難,實際操作也大多是譜聚類+K-means聚類聯合使用的。 –—-—-—-—-—-—-—-—-—-—-—-—–—-—-—-—-—-—-—-—

機器學習實戰-62:層次演算法(Hierarchical Clustering)

機器學習實戰-62:層次聚類演算法 機器學習分為監督學習、無監督學習和半監督學習(強化學習)。無監督學習最常應用的場景是聚類(clustering)和降維(dimension reduction)。聚類演算法包括:K均值聚類(K-Means)、層次聚類(Hie

演算法講解

什麼是譜聚類? 聚類的直觀解釋是根據樣本間相似度,將它們分成不同組。譜聚類的思想是將樣本看作頂點,樣本間的相似度看作帶權的邊,從而將聚類問題轉為圖分割問題:找到一種圖分割的方法使得連線不同組的邊的權重儘可能低(這意味著組間相似度要儘可能低),組內的邊的權重儘可能高(這意

演算法Matlab快速實現

%Ncut譜聚類完整函式定義(儲存為.m檔案): function C = SpectralClustering(data,k,a)     %data是資料點矩陣  K是聚類個數  a代表高斯核函式的引數 %UNTITLED Summary of this functio

MATLAB學習之路(一) 實現簡單的基於歐式距離的新型演算法Clustering by fast search and find of density peaksd)

大學本科三年,眨眼而已,對於一個考研黨來說,本科時間已所剩不多,大三上學期初次接觸到MATLAB。的確如大牛們所說,強大的計算能力,充足的數學工具,帶來使用者極大的便利。 在大資料的學習過程中,MAT

瞭解 kmeans演算法演算法

譜聚類演算法 不過真正要直觀地理解譜聚類,其實應該從物理的簡正模振動的角度來理解。你可以認為每兩個點之間都有一個彈簧連著,把兩個點之間的相似度理解為它們的彈簧係數,每個特徵向量就是這個系統的運動

——演算法以及Python實現

譜聚類(spectral cluster)可以視為一種改進的Kmeans的聚類演算法。常用來進行影象分割。缺點是需要指定簇的個數,難以構建合適的相似度矩陣。優點是簡單易實現。相比Kmeans而言,處理高維資料更合適。 核心思想 構建樣本點的相似度矩陣(圖

演算法 matlab

1、譜聚類演算法步驟公式 (1)整理資料集,使資料集中資料在0-1之間。假設資料集m行n列。 (2)求鄰接矩陣W。元素值為每一點到其他點之間距離,即權重。 (3)求相似度矩陣S,相似度矩陣的定義。相似度矩陣由權值矩陣得到,實踐中一般用高斯核函式(也稱徑向基

演算法詳解

  譜聚類(Spectral Clustering)演算法簡單易行,其聚類效能優於傳統的K-means演算法。譜聚類將資料的劃分轉化為對圖的分割,是一種基於圖論的聚類方法,其直觀理解為根據圖內點的相似度將圖分為多個子圖,使子圖內部的點相似度最高,子圖之間點的相似

【再回首Python之美】【矩陣】求矩陣中最大元素/最小元素的行列座標 For 層次演算法Hierarchical Clustering Alg

求多維矩陣中最小元素的行列座標,這個在層次聚類演算法中用到,這裡實現記錄一下。1.簡介矩陣M: [[1 3 2] [2 6 0] [9 8 5]]最大元素是9,對應的行列座標為(2,0)最小元素是

演算法

#include<math.h> #include<string.h> #include"matrix.h" #include"svd.h"   #define N 19        //樣本點個數 #define K 4         //K-Means演算法中的K #defin