日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

聚类算法小记(part2)--谱聚类

發布時間:2023/12/19 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 聚类算法小记(part2)--谱聚类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習筆記,僅供參考,有錯必糾
轉載自:譜聚類(spectral clustering)原理總結


文章目錄

    • 譜聚類(spectral clustering)原理總結
      • 譜聚類概述
      • 譜聚類基礎之一:無向權重圖
      • 譜聚類基礎之二:相似矩陣
      • 譜聚類基礎之三:拉普拉斯矩陣
      • 譜聚類基礎之四:無向圖切圖
      • 譜聚類之切圖聚類
        • RatioCut切圖
        • Ncut切圖
      • 譜聚類算法流程
      • 譜聚類算法總結


譜聚類(spectral clustering)原理總結

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

譜聚類概述

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

乍一看,這個算法原理的確簡單,但是要完全理解這個算法的話,需要對圖論中的無向圖,線性代數和矩陣分析都有一定的了解。下面我們就從這些需要的基礎知識開始,一步步學習譜聚類。

譜聚類基礎之一:無向權重圖

由于譜聚類是基于圖論的,因此我們首先溫習下圖的概念。對于一個圖GGG,我們一般用點的集合VVV和邊的集合EEE來描述。即為G(V,E)G(V,E)G(V,E)。其中VVV即為我們數據集里面所有的點(v1,v2,?,vn)(v_1,v_2,\cdots,v_n)(v1?,v2?,?,vn?)。對于VVV中的任意兩個點,可以有邊連接,也可以沒有邊連接。我們定義權重wijw_{ij}wij?為點viv_ivi?和點vjv_jvj?之間的權重。由于我們是無向圖,所以wij=wjiw_{ij}=w_{ji}wij?=wji?

對于有邊連接的兩個點viv_ivi?vjv_jvj?wij>0w_{ij}>0wij?>0,對于沒有邊連接的兩個點viv_ivi?vjv_jvj?wij=0w_{ij}=0wij?=0。對于圖中的任意一個點viv_ivi?,它的度did_idi?定義為和它相連的所有邊的權重之和,即:
di=∑j=1nwijd_i = \sum_{j=1}^n w_{ij} di?=j=1n?wij?

利用每個點度的定義,我們可以得到一個n×nn \times nn×n的度矩陣DDD,它是一個對角矩陣,只有主對角線有值,對應第iii行第iii列的點的度數,定義如下:
D=(d1????d2?????????dn)D = \left( \begin{matrix} d_1 & \cdots & \cdots & \cdots \\ \cdots & d_2 & \cdots & \cdots \\ \vdots & \vdots & \ddots & \vdots \\ \cdots & \cdots & \cdots & d_n \end{matrix} \right) D=??????d1??????d2????????????dn????????

利用所有點之間的權重值,我們可以得到圖的鄰接矩陣WWW,它也是一個n×nn \times nn×n的矩陣,第iii行第jjj列的值對應我們的權重wijw_{ij}wij?

除此之外,對于點集VVV的的一個子集A?VA \subset VA?V,我們定義:∣A∣:=|A|:=A:=子集AAA中點的個數,vol(A):=∑i∈Adivol(A):= \sum_{i \in A} d_ivol(A):=iA?di?

譜聚類基礎之二:相似矩陣

在上一節我們講到了鄰接矩陣WWW,它是由任意兩點之間的權重值wijw_{ij}wij?組成的矩陣。通常我們可以自己輸入權重,但是在譜聚類中,我們只有數據點的定義,并沒有直接給出這個鄰接矩陣,那么怎么得到這個鄰接矩陣呢?

基本思想是,距離較遠的兩個點之間的邊權重值較低,而距離較近的兩個點之間的邊權重值較高,不過這僅僅是定性,我們需要定量的權重值。一般來說,我們可以通過樣本點距離度量的相似矩陣SSS來獲得鄰接矩陣WWW

構建鄰接矩陣WWW的方法有三類。?\epsilon?-近鄰法,KKK-近鄰法和全連接法。

  • ?\epsilon?-近鄰法

  • KKK-近鄰法

  • 全連接法

在實際的應用中,使用第三種全連接法來建立鄰接矩陣是最普遍的,而在全連接法中使用高斯徑向核RBF是最普遍的。

譜聚類基礎之三:拉普拉斯矩陣

單獨把拉普拉斯矩陣(Graph Laplacians)拿出來介紹是因為后面的算法和這個矩陣的性質息息相關。它的定義很簡單,拉普拉斯矩陣L=D?WL=D?WL=D?WDDD即為我們第二節講的度矩陣,它是一個對角矩陣。而WWW即為我們第二節講的鄰接矩陣,它可以由我們第三節的方法構建出。

拉普拉斯矩陣有一些很好的性質如下:

  • 拉普拉斯矩陣是對稱矩陣,這可以由DDDWWW都是對稱矩陣而得.

  • 由于拉普拉斯矩陣是對稱矩陣,則它的所有的特征值都是實數.

  • 對于任意的向量fff,我們有:

  • fTLf=12∑i,j=1nwij(fi?fj)2f^T L f = \frac{1}{2} \sum_{i,j=1}^n w_{ij}(f_i - f_j)^2 fTLf=21?i,j=1n?wij?(fi??fj?)2

    利用拉普拉斯矩陣的定義很容易得到如下:

    4. 拉普拉斯矩陣是半正定的,且對應的n個實數特征值都大于等于0,即0=λ1≤λ2≤?≤λn0=\lambda_1 \le \lambda_2 \le \cdots \le \lambda_n0=λ1?λ2??λn?, 且最小的特征值為0,這個由性質3很容易得出。

    譜聚類基礎之四:無向圖切圖

    對于無向圖GGG的切圖,我們的目標是將圖G(V,E)G(V,E)G(V,E)切成相互沒有連接的kkk個子圖,每個子圖點的集合為:A1,A2,?,AkA_1, A_2, \cdots,A_kA1?,A2?,?,Ak?,他們滿足Ai∩Aj=?A_i \cap A_j = \emptyAi?Aj?=?, 且A1∪A2∪?∪Ak=VA_1 \cup A_2 \cup \cdots \cup A_k = VA1?A2??Ak?=V.


    那么如何切圖可以讓子圖內的點權重和高,子圖間的點權重和低呢?一個自然的想法就是最小化cut(A1,A2,?,Ak)cut(A_1,A_2,\cdots,A_k)cut(A1?,A2?,?,Ak?), 但是可以發現,這種極小化的切圖存在問題,如下圖:

    我們選擇一個權重最小的邊緣的點,比如CCCHHH之間進行cut,這樣可以最小化cut(A1,A2,?,Ak)cut(A_1,A_2,\cdots,A_k)cut(A1?,A2?,?,Ak?), 但是卻不是最優的切圖,如何避免這種切圖,并且找到類似圖中"Best Cut"這樣的最優切圖呢?我們下一節就來看看譜聚類使用的切圖方法。

    譜聚類之切圖聚類

    為了避免最小切圖導致的切圖效果不佳,我們需要對每個子圖的規模做出限定,一般來說,有兩種切圖方式,第一種是RatioCut,第二種是Ncut。下面我們分別加以介紹。

    RatioCut切圖

    RatioCut切圖為了避免第五節的最小切圖,對每個切圖,不光考慮最小化cut(A1,A2,?,Ak)cut(A_1,A_2,\cdots,A_k)cut(A1?,A2?,?,Ak?),它還同時考慮最大化每個子圖點的個數,即:
    RatioCut(A1,A2,?,Ak)=12∑i=1kW(Ai,Ai ̄)∣Ai∣RatioCut(A_1, A_2, \cdots,A_k) = \frac{1}{2} \sum_{i=1}^k \frac{W(A_i, \overline{A_i})}{|A_i|} RatioCut(A1?,A2?,?,Ak?)=21?i=1k?Ai?W(Ai?,Ai??)?

    那么怎么最小化這個RatioCut函數呢?牛人們發現,RatioCut函數可以通過如下方式表示。


    上述第(1)式用了上面第四節的拉普拉斯矩陣的性質3. 第二式用到了指示向量的定義。可以看出,對于某一個子圖iii,它的RatioCut對應于hiTLhih^T_i L h_ihiT?Lhi?,那么我們的k個子圖呢?對應的RatioCut函數表達式為:
    RatioCut(A1,A2,?,Ak)=∑i=1khiTLhi=∑i=1k(HTLH)ii=tr(HTLH)RatioCut(A_1, A_2, \cdots, A_k) = \sum_{i=1}^k h_i^T L h_i = \sum_{i=1}^k (H^T L H)_{ii} = tr(H^TLH) RatioCut(A1?,A2?,?,Ak?)=i=1k?hiT?Lhi?=i=1k?(HTLH)ii?=tr(HTLH)
    其中tr(HTLH)tr(H^TLH)tr(HTLH)為矩陣的跡。也就是說,我們的RatioCut切圖,實際上就是最小化我們的tr(HTLH)tr(H^TLH)tr(HTLH)。注意到HTH=IH^TH=IHTH=I,則我們的切圖優化目標為:
    argmin?Htr(HTLH)s.t.HTH=Iarg \; \min_H \; tr(H^TLH) \; s.t. \; H^TH=I argHmin?tr(HTLH)s.t.HTH=I

    注意到我們HHH矩陣里面的每一個指示向量都是n維的,向量中每個變量的取值為0或者1∣Aj∣\frac{1}{\sqrt{|A_j|}}Aj??1?,就有2n2^n2n種取值,有kkk個子圖的話就有kkk個指示向量,共有k2nk2^nk2nHHH,因此找到滿足上面優化目標的HHH是一個NP難的問題。那么是不是就沒有辦法了呢?

    注意觀察tr(HTLH)tr(H^TLH)tr(HTLH)中每一個優化子目標hiTLhih^T_iLh_ihiT?Lhi?, 其中hhh是單位正交基, L為對稱矩陣,此時hiTLhih^T_iLh_ihiT?Lhi?的最大值為L的最大特征值,最小值是L的最小特征值。如果你對主成分分析PCA很熟悉的話,這里很好理解。在PCA中,我們的目標是找到協方差矩陣(對應此處的拉普拉斯矩陣L)的最大的特征值,而在我們的譜聚類中,我們的目標是找到目標的最小的特征值,得到對應的特征向量,此時對應二分切圖效果最佳。也就是說,我們這里要用到維度規約的思想來近似去解決這個NP難的問題。

    對于hiTLhih^T_iLh_ihiT?Lhi?,我們的目標是找到最小的L的特征值,而對于tr(HTLH)=∑i=1khiTLhitr(H^TLH) = \sum_{i=1}^k h_i^T L h_itr(HTLH)=i=1k?hiT?Lhi?,則我們的目標就是找到k個最小的特征值,一般來說,k遠遠小于n,也就是說,此時我們進行了維度規約,將維度從nnn降到了kkk,從而近似可以解決這個NP難的問題。

    通過找到LLL的最小的k個特征值,可以得到對應的k個特征向量,這k個特征向量組成一個n×kn \times kn×k維度的矩陣,即為我們的HHH。一般需要對HHH矩陣按行做標準化,即:
    hij?=hij(∑t=1khit2)1/2h_{ij}^* = \frac{h_{ij}}{(\sum_{t=1}^k h_{it}^2)^{1/2}} hij??=(t=1k?hit2?)1/2hij??

    由于我們在使用維度規約的時候損失了少量信息,導致得到的優化后的指示向量hhh對應的HHH現在不能完全指示各樣本的歸屬,因此一般在得到n×kn \times kn×k維度的矩陣HHH后還需要對每一行進行一次傳統的聚類,比如使用K-Means聚類.


    Ncut切圖


    Ncut切圖和RatioCut切圖很類似,但是把Ratiocut的分母∣Ai∣|A_i|Ai?換成vol(Ai)vol(A_i)vol(Ai?). 由于子圖樣本的個數多并不一定權重就大,我們切圖時基于權重也更合我們的目標,因此一般來說Ncut切圖優于RatioCut切圖:

    Ncut(A1,A2,?,Ak)=12∑i=1kW(Ai,Ai ̄)vol(Ai)Ncut(A_1, A_2, \cdots,A_k) = \frac{1}{2} \sum_{i=1}^k \frac{W(A_i, \overline{A_i})}{vol(A_i)} Ncut(A1?,A2?,?,Ak?)=21?i=1k?vol(Ai?)W(Ai?,Ai??)?
    對應的,Ncut切圖對指示向量h做了改進。注意到RatioCut切圖的指示向量使用的是1∣Aj∣\frac{1}{\sqrt{|A_j|}}Aj??1?標示樣本歸屬,而Ncut切圖使用了子圖權重1vol(Ai)\frac{1}{\sqrt{vol(A_i)}}vol(Ai?)?1?來標示指示向量h,定義如下:


    也就是說,此時我們的優化目標最終為:
    argmin?Htr(HTLH)s.t.HTDH=Iarg \; \min_H \; tr(H^TLH) \; s.t. \; H^TDH=I argHmin?tr(HTLH)s.t.HTDH=I

    此時我們的HHH中的指示向量hhh并不是標準正交基,所以在RatioCut里面的降維思想不能直接用。怎么辦呢?其實只需要將指示向量矩陣HHH做一個小小的轉化即可。

    譜聚類算法流程

    鋪墊了這么久,終于可以總結下譜聚類的基本流程了。一般來說,譜聚類主要的注意點為相似矩陣的生成方式(參見第二節),切圖的方式(參見第六節)以及最后的聚類方法(參見第六節)。

    最常用的相似矩陣的生成方式是基于高斯核距離的全連接方式,最常用的切圖方式是Ncut。而到最后常用的聚類方法為K-Means。下面以Ncut總結譜聚類算法流程。

    輸入:樣本集D=(x1,x2,?,xn)D=(x_1,x_2,\cdots,x_n)D=(x1?,x2?,?,xn?),相似矩陣的生成方式, 降維后的維度k1k_1k1?, 聚類方法,聚類后的維度k2k_2k2?.
    輸出: 簇劃分C(c1,c2,...ck2)C(c_1,c_2,...c_{k2})C(c1?,c2?,...ck2?).

  • 根據輸入的相似矩陣的生成方式構建樣本的相似矩陣SSS;
  • 根據相似矩陣SSS構建鄰接矩陣WWW,構建度矩陣DDD;
  • 計算出拉普拉斯矩陣LLL;
  • 構建標準化后的拉普拉斯矩陣D?1/2LD?1/2D^{?1/2}LD^{?1/2}D?1/2LD?1/2;
  • 計算D?1/2LD?1/2D^{?1/2}LD^{?1/2}D?1/2LD?1/2最小的k1k_1k1?個特征值所各自對應的特征向量fff;
  • 將各自對應的特征向量fff組成的矩陣按行標準化,最終組成n×k1n \times k_1n×k1?維的特征矩陣FFF;
  • FFF中的每一行作為一個k1k_1k1?維的樣本,共nnn個樣本,用輸入的聚類方法進行聚類,聚類維數為k2k_2k2?;
  • 得到簇劃分C(c1,c2,...ck2)C(c_1,c_2,...c_{k2})C(c1?,c2?,...ck2?).
  • 譜聚類算法總結

    譜聚類算法是一個使用起來簡單,但是講清楚卻不是那么容易的算法,它需要你有一定的數學基礎。如果你掌握了譜聚類,相信你會對矩陣分析,圖論有更深入的理解。同時對降維里的主成分分析也會加深理解。

    下面總結下譜聚類算法的優缺點。

    譜聚類算法的主要優點有:

    • 譜聚類只需要數據之間的相似度矩陣,因此對于處理稀疏數據的聚類很有效。這點傳統聚類算法比如K-Means很難做到;
    • 由于使用了降維,因此在處理高維數據聚類時的復雜度比傳統聚類算法好。

    譜聚類算法的主要缺點有:

    • 如果最終聚類的維度非常高,則由于降維的幅度不夠,譜聚類的運行速度和最后的聚類效果均不好;
    • 聚類效果依賴于相似矩陣,不同的相似矩陣得到的最終聚類效果可能很不同。

    總結

    以上是生活随笔為你收集整理的聚类算法小记(part2)--谱聚类的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。