谱聚类算法原理及实现
將帶權(quán)無向圖劃分為兩個(gè)或兩個(gè)以上的最優(yōu)子圖,使子圖內(nèi)部盡量相似,而子圖間距離盡量距離較遠(yuǎn),以達(dá)到常見的聚類的目的。
"帶權(quán)無向圖"這個(gè)詞太學(xué)術(shù)了,我們換一種叫法,即:相似度矩陣。
假設(shè)我們有一個(gè)相似度矩陣,矩陣中存的是所有對(duì)象的兩兩相似度。
?
那么這個(gè)矩陣應(yīng)該有如下性質(zhì):
我們將該矩陣記為:W。
?
譜聚類的任務(wù)就是根據(jù)這個(gè)相似度矩陣,將這一大堆對(duì)象,分成不同的小堆,小堆內(nèi)部的對(duì)象彼此都很像,小堆之間則不像。
?
譜聚類本身也提供了好幾種不同的分割(cut)方法,每種方法對(duì)應(yīng)一種優(yōu)化目標(biāo)。
本文只介紹其中比較常見,也是比較實(shí)用,而且實(shí)現(xiàn)起來也比較經(jīng)濟(jì)的一種:Nomarlized cut.
?
說白了,就是你最應(yīng)該掌握和使用的一種,好了,進(jìn)入正題。
?
當(dāng)你得到一個(gè)相似度矩陣W后,即可通過以下幾個(gè)步驟,來得到對(duì)應(yīng)的圖分割方案:
1. 計(jì)算對(duì)角矩陣D[N*N]。,公式如下:
?D矩陣為對(duì)角矩陣,對(duì)角線上的值為W矩陣中對(duì)應(yīng)行或列的和。
?
2. 計(jì)算拉普拉斯矩陣(Laplacian) L:
3. ?歸一化L矩陣
4. 計(jì)算歸一化后L矩陣的K個(gè)最小特征值及對(duì)應(yīng)的特征向量
? ? 將K個(gè)特征向量豎著并排放在一起,形成一個(gè)N*K的特征矩陣,記為Q。
?
5. 對(duì)特征矩陣Q做kmeans聚類,得到一個(gè)N維向量C。
? ? 分別對(duì)應(yīng)相似度矩陣W中每一行所代表的對(duì)象的所屬類別,這也就是最終的聚類結(jié)果。
?
此外:
關(guān)于第3步中,對(duì)拉普拉斯矩陣歸一化時(shí),歸一化公式進(jìn)行變換得到:
??? 令:
?
則在第4步中,我們可以將求L的K個(gè)最小特征值及其對(duì)應(yīng)的特征向量的問題,轉(zhuǎn)化為求矩陣E的K個(gè)最大的特征值及其對(duì)應(yīng)的特征向量。
? ? ? ? ---可以證明:L的K個(gè)最小特征值對(duì)應(yīng)的特征向量,分別對(duì)應(yīng)于E的K個(gè)最大的特征值對(duì)應(yīng)的特征向量。
? ? ? ? ? ? 且矩陣L的最小特征值為0,對(duì)應(yīng)于矩陣E最大的特征值為1.矩陣L的第K小特征值等于1-矩陣E的第K大特征值
?
之所以要這么做,是因?yàn)樵跀?shù)值計(jì)算中,求矩陣的最大特征值,往往要比求最小特征值更方便和高效。
?
OK,至此,譜聚類就完成了,關(guān)于譜聚類的其他問題,諸如公式的推導(dǎo),以及譜聚類的物理意義等,可參考博文:譜聚類算法。
譜聚類的實(shí)現(xiàn)很簡(jiǎn)單,按照上述5個(gè)步驟按部就班即可,在matlab中只需寥寥數(shù)行:
?
function C = SpectralClustering(W, k)[n,m] = size(W) s = sum(W);D = full(sparse(1:n, 1:n, s));E = D^(-1/2)*W*D^(-1/2);[Q, V] = eigs(L, k);C = kmeans(Q, k); end
譜聚類的完整C代碼實(shí)現(xiàn),可參考:https://code.csdn.net/u011531384/ml/tree/master/psc.c
?
總結(jié)
以上是生活随笔為你收集整理的谱聚类算法原理及实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RENIX_Python_如何实现调速—
- 下一篇: “数字孪生”十问:从概念到应用