Mean-Shift和K-Means結(jié)合的實踐

????????我們談及數(shù)據(jù)挖掘,無非是“分類”,“關(guān)聯(lián)”,“聚類”,“異常值檢驗”等。今天我想聊聊對聚類的認識,以及基于密度聚類下生成的初始化簇心與K-Means的結(jié)合。

? ? ? ?不同的聚類算法有不同的應(yīng)用場景,適合不同分布、不同屬性、不同數(shù)量級的數(shù)據(jù)集,從這個角度就意味著聚類算法可以進行各種各樣的變形和改進。Mean-Shift算法能根據(jù)數(shù)據(jù)自身的密度分布,自動學習到類的數(shù)目,但類別數(shù)目不一定是我們想要的。而K-Means對噪聲的魯棒性沒有Mean-Shift強,且Mean-Shift是一個單參數(shù)算法,容易作為一個模塊和別的算法集成。因此我在這里,將Mean-Shift聚類后的質(zhì)心作為K-Means的初始中心進行聚類。下圖是Mean-Shift和K-Means結(jié)合的步驟。

? ? ? ?對于非監(jiān)督降維算法,可以參考網(wǎng)址(1)。那降多少維呢?如果不多,性能提升不大;如果目標維度太小,則又丟失了很多信息。我在這里選取了99%的主成分貢獻度作為標準,來選擇目標維度大小。除了PCA線性方法外,對于非線性數(shù)據(jù)集,sklearn也有改進的Kernel PCA。除了PCA外,還有就是Feature Agglomeration的降維方法,直接對特征進行聚類,從而起到降維效果。關(guān)于降維在聚類中的應(yīng)用,感覺譜聚類(Spectral Clustering)效果較好。簡單的說,就是構(gòu)建拉普拉斯矩陣,并歸一化,再進行特征分解,最后用K-Means對最小的N個特征向量進行聚類。?

????? ?在代碼實驗中,單獨用Mean-Shift以及根據(jù)Silhouette評分自動選擇k值的K-Means在聚類結(jié)果上幾乎一樣。

用Mean-Shift結(jié)合K-Means的效果如下。左一圖表示,在沒設(shè)定最終聚類個數(shù)下,MSK認為聚兩類的Silhouette分數(shù)最高。而中間圖與右一圖表示,分別在人工設(shè)定聚類數(shù)維3和4下的聚類效果。實驗代碼放在Github上,參考網(wǎng)址(2)。

參考網(wǎng)址:

(1) http://scikit-learn.org/stable/modules/unsupervised_reduction.html

(2) https://github.com/DemonDamon/meanshift-kmeans-cluster

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容