1. 程式人生 > >使用SKlearn中的SpectralClustering 中的一些小細節

使用SKlearn中的SpectralClustering 中的一些小細節

在使用SKlearn中的聚類演算法時需要引入 cluster 模組,使用譜聚類時(或者其他任意一個聚類演算法,如KMeans)都需要先進行聚類演算法的一些必要的引數設定,這裡舉例的譜聚類就需要配置要聚類的簇數。即n_clusters,n_neighbors,eigensolve等引數雖然都有預設設定,但是有時候還是需要自己設定的。

但是用這些演算法的時候除了要注意官方文件中列出來的函式,還可以看看“source”即原始碼中還有沒有屬性“attribute”可用,有時候能大大簡化你要解決問題便捷度。比如我要得到譜聚類過程中用到的親和矩陣,在官方文件中是沒有提到的,但是在原始碼中卻有個屬性“affinity_matrix_”,在使用SpectralClustering.fit(x)後可以再呼叫SpectralClustering.affinity_matrix_來獲取親和矩陣:

from sklearn.clustering import SpectralClustering

X = data
s = SpectralClustering(n_clusters=2,n_neighbors=10,eigensolve="arkpark")

s.fit(X) # create affinity matrix

labels = s.fit_predict(X)
or use attribute:
labels = s.labels_
# 以上兩種方式都可以獲取資料譜聚類預測的標籤

要獲取譜聚類演算法執行過程中用到的親和矩陣(affinity matrix)也使用屬性 affinity_matrix_:
s.fit(X)
affinity_matrix = s.affinity_matrix_(X) # 注意要先使用fit方法才行;shape(n_samples,n_samples)

其實這裡想強調的主要還不是使用標準庫的情況下如何獲取中間結果,而是想說有時候光看官方文件還不夠,還需要我們去看原始碼中是怎麼定義的,比如引數是怎設定的,官方文件中的方法是怎麼定義的,還定義了哪些私有屬性是我們可以用的但是官方文件中沒有介紹的。