拓端tecdat|R語(yǔ)言譜聚類、K-means聚類分析非線性環(huán)狀數(shù)據(jù)比較
原文鏈接:http://tecdat.cn/?p=23276
原文出處:拓端數(shù)據(jù)部落公眾號(hào)
有些問(wèn)題是線性的,但有些問(wèn)題是非線性的。我假設(shè),你過(guò)去的知識(shí)是從討論和解決線性問(wèn)題開(kāi)始的,這是一個(gè)自然的起點(diǎn)。對(duì)于非線性問(wèn)題的解決,往往涉及一個(gè)初始處理步驟。這個(gè)初始步驟的目的是將問(wèn)題轉(zhuǎn)化為同樣具有線性特征的問(wèn)題。
一個(gè)教科書(shū)式的例子是邏輯回歸,用于獲得兩類之間的最佳線性邊界。在一個(gè)標(biāo)準(zhǔn)的神經(jīng)網(wǎng)絡(luò)模型中,你會(huì)發(fā)現(xiàn)邏輯回歸(或多類輸出的回歸)應(yīng)用于轉(zhuǎn)換后的數(shù)據(jù)。前面的幾層 "致力于 "將不可分割的輸入空間轉(zhuǎn)化為線性方法可以處理的東西,使邏輯回歸能夠相對(duì)容易地解決問(wèn)題。
同樣的道理也適用于譜聚類。與其用原始輸入的數(shù)據(jù)工作,不如用一個(gè)轉(zhuǎn)換后的數(shù)據(jù)工作,這將使它更容易解決,然后再鏈接到你的原始輸入。
譜聚類是一些相當(dāng)標(biāo)準(zhǔn)的聚類算法的重要變體。它是現(xiàn)代統(tǒng)計(jì)工具中的一個(gè)強(qiáng)大工具。譜聚類包括一個(gè)處理步驟,以幫助解決非線性問(wèn)題,這樣的問(wèn)題可以用我們所喜歡的那些線性算法來(lái)解決。例如,流行的K-means。
內(nèi)容
譜系聚類的動(dòng)機(jī)
?一個(gè)典型的譜聚類算法
?編碼實(shí)例
譜聚類的動(dòng)機(jī)
"一張圖片勝過(guò)萬(wàn)語(yǔ)千言"(Tess Flanders)。
目標(biāo)是劃分兩個(gè)不相交的類別。我們的數(shù)據(jù)就有這種 "兩個(gè)環(huán) "的形狀。你可以看到,由于數(shù)據(jù)不是線性可分離的,K-means解決方案沒(méi)有太大意義。我們需要考慮到數(shù)據(jù)中特別的非線性結(jié)構(gòu)。 做到這一點(diǎn)的方法之一是使用數(shù)據(jù)的特征子空間,不是數(shù)據(jù)的實(shí)際情況,而是數(shù)據(jù)的相似性矩陣。
典型的譜聚類算法步驟
輸入:n個(gè)樣本點(diǎn)
和聚類簇的數(shù)目k;
輸出:聚類簇
(1)使用下面公式計(jì)算
的相似度矩陣W;
?????????????????????????????????
W為
組成的相似度矩陣。?
(2)使用下面公式計(jì)算度矩陣D;
?
??,即相似度矩陣W的每一行元素之和?
D為
組成的
對(duì)角矩陣。
(3)計(jì)算拉普拉斯矩陣
;
(4)計(jì)算L的特征值,將特征值從小到大排序,取前k個(gè)特征值,并計(jì)算前k個(gè)特征值的特征向量
;
(5)將上面的k個(gè)列向量組成矩陣
,
;
(6)令
是的第
行的向量,其中
;
(7)使用k-means算法將新樣本點(diǎn)
聚類成簇
;
(8)輸出簇
,其中,
.
上面就是未標(biāo)準(zhǔn)化的譜聚類算法的描述。也就是先根據(jù)樣本點(diǎn)計(jì)算相似度矩陣,然后計(jì)算度矩陣和拉普拉斯矩陣,接著計(jì)算拉普拉斯矩陣前k個(gè)特征值對(duì)應(yīng)的特征向量,最后將這k個(gè)特征值對(duì)應(yīng)的特征向量組成
的矩陣U,U的每一行成為一個(gè)新生成的樣本點(diǎn),對(duì)這些新生成的樣本點(diǎn)進(jìn)行k-means聚類,聚成k類,最后輸出聚類的結(jié)果。這就是譜聚類算法的基本思想。相比較PCA降維中取前k大的特征值對(duì)應(yīng)的特征向量,這里取得是前k小的特征值對(duì)應(yīng)的特征向量。但是上述的譜聚類算法并不是最優(yōu)的,接下來(lái)我們一步一步的分解上面的步驟,總結(jié)一下在此基礎(chǔ)上進(jìn)行優(yōu)化的譜聚類的版本。
編碼示例
環(huán)數(shù)據(jù)在代碼中是對(duì)象dat。下面的幾行只是簡(jiǎn)單地生成K-means解決方案,并將其繪制出來(lái)。
plot(dat, col= kmeans0cluster)
??
現(xiàn)在是譜聚類解決方案。
# 計(jì)算距離矩陣
dist(dat, method = "euclidean", diag= T, upper = T)??
sig=1 # 超參數(shù)
# ?一個(gè)點(diǎn)與自身的距離為零
diag(tmpa) <- 0 #設(shè)置對(duì)角線為零
# 計(jì)算程度矩陣
# 因?yàn)镈是一個(gè)對(duì)角線矩陣,所以下面一行就可以了:
diag(D) <- diag(D)^(-0.5)
# 現(xiàn)在是拉普拉斯的問(wèn)題:
# 特征分解
eig_L <- eigen(L, symmetric= T)
K <- 4 # 讓我們使用前4個(gè)向量
# 它是相當(dāng)穩(wěn)健的--例如5或6的結(jié)果不會(huì)改變
x <- eig_L$vectors[,1:K]
# 現(xiàn)在進(jìn)行歸一化處理:
sqrt( apply(x^2, 1, sum) ) # ?臨時(shí)分母
# 臨時(shí)分母2:轉(zhuǎn)換為一個(gè)矩陣
# 創(chuàng)建Y矩陣
# 在y上應(yīng)用聚類
# 可視化:
plot(dat, col= spect0$cluster)
* 在我們的例子中,
的條目不僅是0和1(連接或不連接),而且是量化相似性的數(shù)字。
參考資料
Ng, Andrew Y., Michael I. Jordan, and Yair Weiss. “On spectral clustering: Analysis and an algorithm.” Advances in neural information processing systems. 2002.
最受歡迎的見(jiàn)解
1.R語(yǔ)言k-Shape算法股票價(jià)格時(shí)間序列聚類
2.R語(yǔ)言中不同類型的聚類方法比較
3.R語(yǔ)言對(duì)用電負(fù)荷時(shí)間序列數(shù)據(jù)進(jìn)行K-medoids聚類建模和GAM回歸
4.r語(yǔ)言鳶尾花iris數(shù)據(jù)集的層次聚類
5.Python Monte Carlo K-Means聚類實(shí)戰(zhàn)
6.用R進(jìn)行網(wǎng)站評(píng)論文本挖掘聚類
7.用于NLP的Python:使用Keras的多標(biāo)簽文本LSTM神經(jīng)網(wǎng)絡(luò)
8.R語(yǔ)言對(duì)MNIST數(shù)據(jù)集分析 探索手寫(xiě)數(shù)字分類數(shù)據(jù)
9.R語(yǔ)言基于Keras的小數(shù)據(jù)集深度學(xué)習(xí)圖像分類