2017-06-04 27 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

因为您的数据很稀疏,所以将其视为图表,而不是矩阵

然后尝试各种图形聚类方法。例如派系对这些数据感兴趣。

请注意,并非所有的东西都可能聚集在一起。