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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

谱聚类初探

發(fā)布時間:2025/4/5 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 谱聚类初探 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1, 譜聚類引入

對于這樣分布的樣本,我們怎么進(jìn)行聚類呢?我們可以使用核函數(shù)+K-means來聚類,當(dāng)然也可以使用本節(jié)將要介紹的譜聚類。

2,模型介紹

譜聚類是一種基于圖模型的聚類方法(一般圖是帶權(quán)重的無向圖)。比起傳統(tǒng)的K-Means算法,譜聚類對數(shù)據(jù)分布的適應(yīng)性更強(qiáng),聚類效果也很優(yōu)秀,同時聚類的計算量也小很多。

譜聚類的主要思想是把所有的數(shù)據(jù)看做空間中的點,這些點之間可以用邊連接起來。距離較遠(yuǎn)的兩個點之間的邊權(quán)重值較低,而距離較近的兩個點之間的邊權(quán)重值較高,通過對所有數(shù)據(jù)點組成的圖進(jìn)行切圖,讓切圖后不同的子圖間邊權(quán)重和盡可能的低,而子圖內(nèi)的邊權(quán)重和盡可能的高,從而達(dá)到聚類的目的。

2.1 幾個圖的概念

先定義幾個概念:

圖:G={V,E}

節(jié)點集合:V={1,2,……,N}

2.1.1 邊集合與鄰接矩陣

邊集合: E:W=[wij] 1≤i,j≤N? ,這里我們用一個相似度矩陣W來表達(dá)節(jié)點與節(jié)點之間,即邊的信息。其中相似度的定義有以下幾種:

1、?-鄰近法

從上式可見,兩點的權(quán)重要不就是?, 要不就是0, 沒有其他信息了。距離遠(yuǎn)近度量很不精確,因此在實際應(yīng)用中,我們很少使用?-鄰近法。

2、K鄰近法

利用KNN算法遍歷所有的樣本點,取每個樣本最近的k個點作為近鄰,只有和樣本距離最近的k個點之間的邊權(quán)重大于0。但是這種方法會造成重構(gòu)之后的鄰接矩陣W非對稱,我們后面的算法需要對稱鄰接矩陣。為了解決這種問題,一般采取下面兩種方法之一:

3、全連接法

相比前兩種方法,第三種方法所有的點之間的權(quán)重值都大于0,因此稱之為全連接法。在實際的應(yīng)用中,使用第三種全連接法來建立鄰接矩陣是最普遍的。

可以選擇不同的核函數(shù)來定義邊權(quán)重,常用的有多項式核函數(shù),高斯核函數(shù)和Sigmoid核函數(shù)。最常用的是高斯核函數(shù)RBF。

2.1.2 度與度矩陣

度:度為該頂點與其他頂點連接權(quán)值之和。度矩陣是一個對角矩陣。

2.2 切割

2.2.1 兩類的切割

我們先看切割成兩類的情況

也就是兩個切割A(yù),B之間的度量是任意A中的點和任意B中的點之間的相似度。也就是“切口”兩側(cè)的點之間的相似度權(quán)重。

2.2.2 K類的切割

然后我們推廣到K個類別

那么這個K類切割怎么度量呢?從在兩類切割的情況我們知道,切割的度量只取決于“切口”兩側(cè)點之間的相似度權(quán)重。那么K類切割也是同理,只不過原來是切一刀,現(xiàn)在是切K刀,每一刀切下Ai和其他部分。

于是我們就有:

那么我們可以通過調(diào)整Ai的分配,獲得最小的Cut。

2.3 Ncut

但是如果僅最優(yōu)化這邊的cut,會有一個不足。就是我們希望分割效果更好,希望每一個分割“緊湊”一點。也就是類間的相似度低(w小),類內(nèi)的相似度大(w大)。那么Cut的定義就無法滿足我們這個需求了。為了滿足這個“分割緊湊”的需求,我們對Cut進(jìn)行歸一化操作:

這里的Δ定義為某一類內(nèi)點的度(雖然我覺得可能是類內(nèi)點之間的度更合理一點?歡迎討論)

整合一下,Normalized Cut (NCut)的定義為

?

我們的目標(biāo)是

3, Ncut模型的矩陣表示

通過上一小節(jié),我們知道

為了更方便地求解這個優(yōu)化問題,我們一般要將它轉(zhuǎn)化為矩陣形式

3.1 指示向量

我們先來看一下等號左邊,我們定義一個指示向量indicator vector,它類似于one-hot向量

?

3.2 Ncut

接下來我們要對Ncut進(jìn)行矩陣表示

NCut是一個求和的數(shù)值,那么我們可以將其轉(zhuǎn)化為對角矩陣求跡(trace)

然后把分子分母分離(對角矩陣求逆相當(dāng)于對每一個對角線元素求逆):

整合一下,即:

但是,我們目前知道的是相似度矩陣W(N×N維)和指示向量Y(N×K維)【這里我們先給定一個特定的Y,然后將O,P用Y來表示。之后再用優(yōu)化問題求解Y,所以此時Y暫定為已知的】

3.2.1 求P

我們先看一下?(K×K維):

?

?

對于每一個,的結(jié)果是一個K×K的矩陣。如果中第j維是1(其他是0),那么中只有第(j,j)坐標(biāo)元素為1,其余為0。

那么這樣所有的求和的結(jié)果,元素值為1的部分全在對角線上.

對角線上的每個元素都是這一類的元素個數(shù)。這個已經(jīng)和P(下圖)很像了,唯一的區(qū)別就是求和的內(nèi)容。

我們在前面又有

所以前面的P也可以寫成

整合一下,有:

3.2.2. 求O

最后我們來看O

?

對于第一項,也就是組別k內(nèi)所有點的度之和,即

而我們前面已經(jīng)求得了

而對于第二項

我們先猜測一下,因為我們現(xiàn)在就只知道W和Y,我們先試試行不行.

因為我們只是需要求跡,而

是對角矩陣,所以這里我們也只需要驗證的對角線部分即可。

我們?nèi)?什么時候元素會到對角線上呢?那就是yi和yj在一組里面(比如第k組)。此時第k行第k列的元素+

所以最后,只看對角線上的元素,那么這個矩陣就是

3.3 結(jié)論

所以

其中D-W我們稱之為拉普拉斯矩陣

3.4 求最優(yōu)方案的方法

在之后會涉及的RatioCut中,我們?nèi)デ罄绽咕仃嘗的最小的前k個特征值,然后求出對應(yīng)的特征向量并標(biāo)準(zhǔn)化,然后對結(jié)果進(jìn)行一次傳統(tǒng)的聚類。

Ncut和RatioCut唯一的區(qū)別就是分母的D,所以仿RatioCut方法,我們這里進(jìn)行特征分解的矩陣為標(biāo)準(zhǔn)化的拉普拉斯矩陣,即

4 拉普拉斯矩陣

拉普拉斯矩陣(Laplacian matrix)),也稱為基爾霍夫矩陣, 是表示圖的一種矩陣。給定一個有n個頂點的圖,其拉普拉斯矩陣被定義為:L=D?W?其中D為圖的度矩陣,W為圖的鄰接矩陣。
?

4.1 拉普拉斯矩陣舉例

以下圖為例:

鄰接矩陣
度矩陣
拉普拉斯矩陣

?

?

?

?

?

?

?

?

?

?

?

?

4.2 拉普拉斯矩陣性質(zhì)

證明:


5 RatioCut切圖

大體思路和Ncut是一樣的,不過分母除的不是某個分割的度之和,而是某個分割中點的個數(shù)

和Ncut一樣,這邊的指示向量也表示了第i個元素(i∈[1,n])在第j個分割中(j∈[1,k])

那么我們對每一個分割A(yù)i有:

(展開的時候,都屬于Ai的和都不屬于Ai的相減為0,所以不顯示出來)

? ? ? ? ? ? ? ?

(Ai分割邊緣上所有點的權(quán)重之和就是cut(Ai,~Ai))

? ? ? ? ? ? ? ??

匯總到一塊,總的分割的RatioCut為

通過找到L的最小的k個特征值,可以得到對應(yīng)的k個特征向量,這k個特征向量組成一個nxk維度的矩陣,即為我們的H。

由于我們在使用維度規(guī)約的時候損失了少量信息,導(dǎo)致得到的優(yōu)化后的指示向量h對應(yīng)的H現(xiàn)在不能完全指示各樣本的歸屬,因此一般在得到 n × k維度的矩陣H后還需要對每一行進(jìn)行一次傳統(tǒng)的聚類,比如使用K-Means聚類。

6 譜聚類算法流程匯總

以Ncut為例

輸入:樣本集D=(x1,x2,x3,......,xn)、相似矩陣的生成方式、 降維后的維度k1(需要分成幾個分割)、聚類方法、聚類后的維度k2

輸出: 簇劃分C=(c1,c2,.....ck2)?

流程:

1)根據(jù)輸入的相似矩陣的生成方式構(gòu)建樣本的相似矩陣S

2)根據(jù)相似矩陣S構(gòu)建鄰接矩陣W ,構(gòu)建度矩陣D

3)計算出拉普拉斯矩陣L

4)構(gòu)建標(biāo)準(zhǔn)化后的拉普拉斯矩陣

5)計算最小的k1個特征值所各自對應(yīng)的特征向量f

6) 將各自對應(yīng)的特征向量f組成的矩陣按行標(biāo)準(zhǔn)化,最終組成n × k1的特征矩陣F(第j個矩陣(j∈[1,n])屬于第i個分割(i∈[1,k1]))

7)對F中的每一行作為一個k1維的樣本,共n個樣本,用輸入的聚類方法進(jìn)行聚類,聚類維數(shù)為k2

8)得到簇劃分C=(c1,c2,.....ck2)?

7 譜聚類python實現(xiàn)

為了方便記憶,我按照流程1~8依次實現(xiàn)

7-0-1 導(dǎo)入庫

import numpy as np from sklearn import datasets

7-0-2 加載鳶尾花數(shù)據(jù)

#加載鳶尾花數(shù)據(jù) iris=datasets.load_iris() ''' print(iris['data'].shape) (150, 4) print(iris['data'][0]) array([5.1, 3.5, 1.4, 0.2]) '''m=iris['data'].shape[0] n=iris['data'].shape[1]

7-1 構(gòu)建樣本的相似矩陣S

#相似矩陣 AMatrix=np.zeros((m,m))#求兩條記錄之間的距離(相似度),用高斯核函數(shù) def AffMatrix(arrA,arrB):sigma=0.5 diff=arrA-arrB #兩個ndarray逐元素相減diff=np.square(diff)#相減的結(jié)果逐元素平方a=np.sum(diff)#到這里就完成了||x-x'||^2這一部分了b=2*(np.square(sigma))#到這里完成了2*σ^2w=np.exp(-a/b) #高斯核函數(shù)#print(w)return w

7-2?根據(jù)相似矩陣S構(gòu)建鄰接矩陣W ,構(gòu)建度矩陣D

7-2-1 鄰接矩陣

#計算鄰接矩陣 def M_Matrix(m,AMatrix):for i in range(m):for j in range(m):AMatrix[i][j]=AffMatrix(iris['data'][i],iris['data'][j])#計算兩兩的相似度AMatrix=AMatrix-np.identity(m)#我們認(rèn)為自己到自己是沒有邊相連的,所以需要讓對角線元素變?yōu)?#自己和自己的高斯核結(jié)果為0return AMatrixw=M_Matrix(m,AMatrix)''' w.shape (150, 150) '''

7-2-2 度矩陣

D=np.diag(np.sum(w,axis=0))

這里復(fù)習(xí)一個知識,就是axis的事情

axis=0 第0個坐標(biāo)的元素疊加,其他坐標(biāo)的元素不變 sum([0,1,2,....,n][x][y])

axis=1 第1個坐標(biāo)的元素疊加,其他坐標(biāo)的元素不變 sum([x][0,1,2,....,n][y])

7.3?計算出拉普拉斯矩陣L=D?W?

L=D-w

7.4?構(gòu)建標(biāo)準(zhǔn)化后的拉普拉斯矩陣

#np.power(np.sum(w,axis=0),-0.5) #D的對角線元素開根號 Dn=np.diag(np.power(np.sum(w,axis=0),-0.5)) #Dn=D^(-1/2) L=Dn.dot(L).dot(Dn)

7.5?計算最小的k1個特征值所各自對應(yīng)的特征向量f

eigvals, eigvecs = np.linalg.eig(L) # 規(guī)范化后的拉普拉斯矩陣 特征分解k = 3 indices = eigvals.argsort()[:k] #最小的三個特征值k_max_eigvecs = eigvecs[:,indices] #最小的三個特征值對應(yīng)的特征向量 ''' k_max_eigvecs.shape (150,3) '''

7.7?對F中的每一行作為一個k1維的樣本,共n個樣本,用輸入的聚類方法進(jìn)行聚類,聚類維數(shù)為k2

#KNN進(jìn)行聚類 from sklearn.cluster import KMeansres = KMeans(n_clusters=k).fit_predict(k_max_eigvecs)

7.9?可視化

def draw():colorSet = ["black", "blue", "green", "yellow", "red", "purple", "orange", "brown"]for i in range(m):x = iris['data'][i][0]y = iris['data'][i][1]color = colorSet[res[i] % len(colorSet)]plt.scatter(x,y, marker="o", c=color, s=20)plt.xlabel("x")plt.ylabel("y")plt.show() draw()

8 sklearn庫中的譜聚類使用

在scikit-learn的類庫中,sklearn.cluster.SpectralClustering實現(xiàn)了基于Ncut的譜聚類,沒有實現(xiàn)基于RatioCut的切圖聚類。同時,對于相似矩陣的建立,也只是實現(xiàn)了基于K鄰近法和全連接法的方式,沒有基于?-鄰近法的相似矩陣。

8.1?SpectralClustering中的參數(shù)

8.1.1?n_clusters

代表我們在對譜聚類切圖時降維到的維數(shù),同時也是最后一步聚類算法聚類到的維數(shù)。

8.1.2 affinity:

我們的相似矩陣的建立方式。可以選擇的方式有三類,

第一類是 **‘nearest_neighbors’**即K鄰近法。


第二類是**‘precomputed’**即自定義相似矩陣。選擇自定義相似矩陣時,需要自己調(diào)用set_params來自己設(shè)置相似矩陣。


第三類是全連接法,可以使用各種核函數(shù)來定義相似矩陣,還可以自定義核函數(shù)。

最常用的是內(nèi)置高斯核函數(shù)’rbf’。其他比較流行的核函數(shù)有‘linear’即線性核函數(shù), ‘poly’即多項式核函數(shù), ‘sigmoid’即sigmoid核函數(shù)。

如果選擇了這些核函數(shù), 對應(yīng)的核函數(shù)參數(shù)在后面有單獨的參數(shù)需要設(shè)置。

affinity默認(rèn)是高斯核’rbf’。

8.1.3 核函數(shù)參數(shù)gamma:

如果我們在affinity參數(shù)使用了多項式核函數(shù) ‘poly’,高斯核函數(shù)‘rbf’, 或者’sigmoid’核函數(shù),那么我們就需要對這個參數(shù)進(jìn)行調(diào)參。

8.1.4 核函數(shù)參數(shù)degree

如果我們在affinity參數(shù)使用了多項式核函數(shù) ‘poly’,那么我們就需要對這個參數(shù)進(jìn)行調(diào)參。這個參數(shù)對應(yīng)中的d。默認(rèn)是3。

8.1.5?核函數(shù)參數(shù)coef0:

如果我們在affinity參數(shù)使用了多項式核函數(shù) ‘poly’,或者sigmoid核函數(shù),那么我們就需要對這個參數(shù)進(jìn)行調(diào)參。

8.1.6 kernel_params

如果affinity參數(shù)使用了自定義的核函數(shù),則需要通過這個參數(shù)傳入核函數(shù)的參數(shù)。

8.1.7 n_neighbors

?如果我們affinity參數(shù)指定為’nearest_neighbors’即K鄰近法,則我們可以通過這個參數(shù)指定KNN算法的K的個數(shù)。默認(rèn)是10

8.2 代碼

from sklearn.cluster import SpectralClustering from sklearn import metricsiris=datasets.load_iris() y_pred = SpectralClustering(gamma=0.1,n_clusters=3).fit_predict(iris['data'])

8.3 可視化

可以看到結(jié)果和我們之前自己實現(xiàn)的是差不多的

def draw():colorSet = ["black", "blue", "green", "yellow", "red", "purple", "orange", "brown"]for i in range(m):x = iris['data'][i][0]y = iris['data'][i][1]color = colorSet[y_pred[i] % len(colorSet)]plt.scatter(x,y, marker="o", c=color, s=20)plt.xlabel("x")plt.ylabel("y")plt.show() draw()

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的谱聚类初探的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美人妻一区二区 | 美女av影院 | 色 综合 欧美 亚洲 国产 | jul023被夫上司连续侵犯 | 国产精品无码一区二区无人区多人 | 中文字幕一区久久 | 亚洲精品一区二区三区在线观看 | 最好看十大无码av | 色吧婷婷 | 岛国av在线免费观看 | 91人妻一区二区三区蜜臀 | 国产黑丝一区 | 韩国av一区二区 | 最近中文字幕在线中文高清版 | 国产看片网站 | 国产真实老熟女无套内射 | 欧美成人免费视频 | 免费成人深夜在线观看 | 国产对白视频 | 九九影院最新理论片 | 国产中文一区 | 中文文字幕一区二区三三 | 3d动漫啪啪精品一区二区中文字幕 | 国产精品麻豆成人av电影艾秋 | 欧美无专区 | 免费视频爱爱太爽 | 精东av在线| 欧美日韩久久 | 中文字幕成人在线观看 | 美日韩久久 | 亚洲国产精品久久久久爰色欲 | 天天色综| 一区二区三区在线看 | а√天堂资源官网在线资源 | 久久久夜精品 | 综合网婷婷 | 日韩三级观看 | 中文字幕 成人 | 国产精品理论在线观看 | 91午夜在线 | 日韩最新在线 | 亚洲无线视频 | 日韩精品人妻一区二区中文字幕 | 日本视频不卡 | 国产尤物视频在线观看 | 亚洲午夜福利在线观看 | 国产二级毛片 | 亚洲天天影视 | 午夜之声l性8电台lx8电台 | 国产麻豆免费观看 | 国产午夜精品久久久久 | 性做久久久久久久 | 天堂男人av | 成人91在线 | 欧美99热 | 亚洲视频在线播放 | 韩国黄色片网站 | 狠狠操在线视频 | av高清一区二区 | 国产精品久久久久久久久久辛辛 | 无码人妻精品丰满熟人区 | 可以在线观看的黄色 | 丰满秘书被猛烈进入高清播放在 | 免费黄色一级 | 少妇精品| 美女又黄又免费的视频 | 五月天婷婷网站 | 欧美日韩在线国产 | 国产精品激情偷乱一区二区∴ | 国产精品视频久久 | 亚洲精品一区二区三区在线 | 国精品一区二区 | 亚洲天堂av女优 | 国产真实交换夫妇视频 | 成人a视频在线观看 | 久久99色 | 日本不卡中文字幕 | 女人的天堂网站 | 欧美精品乱码视频一二专区 | 国产精品视频全国免费观看 | 免费的黄色网 | 日韩干| 91精品国产aⅴ一区二区 | 亚洲做受高潮 | 你懂的在线播放 | 日韩黄色一级视频 | 国产一级片 | 免费观看a毛片 | 国产精品一区二区三区免费观看 | 一级黄毛片 | 九九热视频在线免费观看 | 国产欧美日韩另类 | 欧美性天堂 | xxxxx69| 性欧美极品| 丰满熟女人妻一区二区三 | 欧美性xxxxx极品少妇 | 国产黄频在线观看 | 日韩性猛交ⅹxxx乱大交 |