python谱聚类算法_谱聚类Spectral clustering(SC)
在之前的文章里,介紹了比較傳統的K-Means聚類、Affinity Propagation(AP)聚類、比K-Means更快的Mini Batch K-Means聚類以及混合高斯模型Gaussian Mixture Model(GMM)等聚類算法,今天介紹一個比較近代的一類算法——Spectral Clustering 中文通常稱為“譜聚類”。
Spectral Clustering(譜聚類,有時也簡稱SC),其實是一類算法的統稱。它是一種基于圖論的聚類方法(這點上跟AP類似,而K-Means是基于點與點的距離計算),它能夠識別任意形狀的樣本空間且收斂于全局最有解,其基本思想是利用樣本數據的相似矩陣進行特征分解后得到的特征向量進行聚類。
為什么上文稱譜聚類是“一類”算法?廣義上來說,任何在演算法中用到SVD/特征值分解的,都叫Spectral Algorithm。? 從傳統的PCA/LDA,到比較近的Spectral Embedding/Clustering,都屬于這類。
譜聚類和傳統的聚類方法(如 K-means)相比有不少優點:
Spectral Clustering 只需要數據之間的相似度矩陣就可以了,而不必像 K-Means 那樣要求數據必須是 N 維歐氏空間中的向量。
由于抓住了主要矛盾,忽略了次要的東西,因此比傳統的聚類算法更加健壯一些,對于不規則的誤差數據不是那么敏感,而且結果也要好一些。事實上,在各種現代聚類算法的比較中,K-means 通常都是作為一個基準而存在的。
計算復雜度比 K-means 要小,特別是在像文本數據或者平凡的圖像數據這樣維度非常高的數據上運行的時候,理論上應該比K-Means更快速。(是這樣嗎?下文實驗中有解答!)
K-Means一直以來都是距離算法中的經典算法,尤其通過minibatch“改良”后的K-Means在大數據應用中的效率瓶頸也得到極大改善。譜聚類這個相對的“晚生”是否真的如上述優點,接下來看實驗數據。
實驗一 關于準確度的較量
在此引用 Document clustering using locality preserving indexing 中關于K-means 和 Spectral Clustering 應用到TDT2 和 Reuters-21578這兩組數據的準確率對比結果:
k
TDT2
Reuters-21578
K-Means
譜聚類
K-Means
譜聚類
2
0.989
0.998
0.871
0.923
3
0.974
0.996
0.775
0.816
4
0.959
0.996
0.732
0.793
…
9
0.852
0.984
0.553
0.625
10
0.835
0.979
0.545
0.615
從準確率結果可以看出,在不同的類別數量下,譜聚類的準確率都要高于K-Means。
實驗二 關于運行時間的較量
在此使用Python機器學習庫SKlearn中的spectral_clustering進行模擬實驗,實驗數據為隨機生成的維度和樣本量相同的矩陣,分別為10維、20維、30維。40維、50維、60維,對應到圖中就是從0到5。其實我試著用更大的數據量去實驗,但增加到70維的時候,spectral_clustering已經由于內存錯誤而崩掉了,所以足以看來他對于大數據量的應用還是不適合的。
另外,對于上文提到的spectral_clustering的計算復雜度要低于K-Means,因此理論上的運算時間要快,但實驗結果卻不能證明這個問題。大家可以點擊原始程序查看 sc_kemans.py。
譜聚類應用
以下使用Python機器學習庫SKlearn中的spectral_clustering進行聚類,目標是從一個圖片中區分出人為構造出的圖像邊緣。
#coding:utf-8
importnumpy?as?np
importmatplotlib.pyplot?as?plt
fromsklearn.feature_extractionimportimage
fromsklearn.clusterimportspectral_clustering
#?生成原始圖片信息
l?=?100
x,?y?=?np.indices((l,?l))
center1?=?(28,?24)
center2?=?(40,?50)
center3?=?(77,?58)
radius1,?radius2,?radius3?=?16,?14,?15
circle1?=?(x?-?center1[0])?**?2?+?(y?-?center1[1])?**?2?
circle2?=?(x?-?center2[0])?**?2?+?(y?-?center2[1])?**?2?
circle3?=?(x?-?center3[0])?**?2?+?(y?-?center3[1])?**?2?
#?生成包括3個圓的圖片
img?=?circle1?+?circle2?+?circle3
mask?=?img.astype(bool)
img?=?img.astype(float)
img?+=?1?+?0.2?*?np.random.randn(*img.shape)
graph?=?image.img_to_graph(img,?mask=mask)
graph.data?=?np.exp(-graph.data?/?graph.data.std())
#?聚類輸出
labels?=?spectral_clustering(graph,?n_clusters=3)
label_im?=?-np.ones(mask.shape)
label_im[mask]?=?labels
plt.matshow(img)
plt.matshow(label_im)
plt.show()
以下是運行結果:
左邊的圖形是人為生成的原始圖片,右邊是識別圖形邊緣后的處理圖片。
spectral_clustering可配置的參數如下,其中最主要的參數是affinity(數據集), n_clusters(聚類數)和assign_labels(聚類方法可選kmeans[默認], discretize):
sklearn.cluster.spectral_clustering(affinity,?n_clusters=8,?n_components=None,?eigen_solver=None,?random_state=None,?n_init=10,?eigen_tol=0.0,?assign_labels='kmeans')
譜聚類的應用場景:
圖像切割;
數據聚類
尾巴
譜聚類適用的數據集有幾個特點:
不適合聚類類別數特別多的數據;
對于特殊數據集具有比較好的適應性,例如環形數據、非凸數據、交叉數據等非正?;蛞巹t下的數據,如下圖:
====================【好書推薦,我為自己代言】====================
《Python數據分析與數據化運營》第二版上市啦!
50+數據流工作知識點14個數據分析與挖掘主題8個綜合性運營分析案例涵蓋會員、商品、流量、內容4大主題360°把脈運營問題并貼合數據場景落地
本書主要基于Python實現,其中主要用到的計算庫是numpy、pandas和sklearn,其他相關庫還包括:
標準庫:re、time、datetime、json、 base64、os、sys、cPickle、tarfile
Python調用R的rpy2
統計分析:Statsmodels
中文處理:結巴分詞
文本挖掘:Gensim
數據挖掘和算法:XGboost、gplearn、TPOT
爬蟲和解析:requests、Beautiful Soup、xml
圖像處理:OpenCV和PIL/Pollow
數據讀取:xlrd、pymongo、pymysql
數據預處理:imblearn
展示美化類:Matplotlib、pyecharts、graphviz、prettytable、wordcloud、mpl_toolkits、pydotplus
如果你對以下內容感興趣,那么本書將值得一看:
KMeans聚類的自動K均值的確立方法
基于軟方法的多分類模型組合評估模型的應用
基于自動下探(下鉆、細分)的應用
基于增量學習的多項式貝葉斯分類
pipeline管道技術的應用
基于超參數的自動參數值的優化方法
特征自動選擇
文本分類、文本主題挖掘
基于自動時間序列ARIMA的P、D、Q的調整
python決策樹規則輸出
基于自定義圖像的文本標簽云
非結構化數據,例如圖像、音頻、文本等處理
對象持久化處理
如何使用Python調用R實現數據挖掘
自動化學習:增加了對于自動化數據挖掘與機器學習的理論、流程、知識和應用庫介紹,并基于TPOT做自動化回歸和分類學習案例演示
有關這本書的寫作感受、詳細內容介紹、附件(含數據和代)下載、關鍵知識和方法以及完整書稿目錄,請訪問《Python數據分析與數據化運營》第二版出版了!要購買此書,可以去京東、當當和天貓等查看。
總結
以上是生活随笔為你收集整理的python谱聚类算法_谱聚类Spectral clustering(SC)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python闭包详解函数_详解pytho
- 下一篇: python脚本编程手册_Python