2017-06-04 93 views
0

我有兩個N×N共生矩陣(484×484和1060×1060),我必須分析。矩陣沿着對角線是對稱的幷包含大量的零值。非零值是整數。我想將非零的位置分組在一起。換句話說,我想要做的是算法on this link。當按羣集排序被選中時,矩陣被重新排列成行和列以將非零值組合在一起。聚類一個稀疏的共生矩陣

由於我正在使用Python進行此任務,因此我查看了SciPy Sparse Linear Algebra庫,但找不到要查找的內容。

任何幫助,非常感謝。提前致謝。

回答

1

如果矩陣dist具有對象之間的成對距離,則可以通過在該矩陣上應用聚類算法(http://scikit-learn.org/stable/modules/clustering.html)找到重新排列矩陣的順序。例如,它可能是這樣的:

from sklearn import cluster 
import numpy as np 
model = cluster.AgglomerativeClustering(n_clusters=20,affinity="precomputed").fit(dist) 
new_order = np.argsort(model.labels_) 
ordered_dist = dist[new_order] # can be your original matrix instead of dist[] 
ordered_dist = ordered_dist[:,new_order] 

順序由可變model.labels_,它具有到每個樣本所屬的簇的數目給出。幾點意見:

  1. 你必須找到一個聚類算法,接受距離矩陣作爲輸入。 AgglomerativeClustering就是這樣一種算法(注意affinity="precomputed"選項告訴它我們正在使用預先計算的距離)。
  2. 你有什麼似乎是一個配對相似矩陣,在這種情況下,你需要將其轉換爲距離矩陣(如dist=1 - data/data.max()
  3. 在我以爲20簇的例子,你可能與此變量的發揮位。或者,您可以嘗試找到數據的最佳一維表示(使用例如MDS)來描述樣本的最佳排序。
0

因爲您的數據很稀疏,所以將其視爲圖表,而不是矩陣

然後嘗試各種圖形聚類方法。例如派系對這些數據感興趣。

請注意,並非所有的東西都可能聚集在一起。