稀疏共现矩阵的聚类

6
我有两个N x N共现矩阵(484x484和1060x1060),需要进行分析。这些矩阵沿对角线对称,并包含许多零值,非零值是整数。
我想要将非零位置进行分组,换句话说,我想要执行此链接中的算法。当选择按簇排序时,矩阵会重新排列行和列以将非零值分组在一起。
由于我正在使用Python进行此任务,所以我查看了SciPy稀疏线性代数库,但没有找到我要找的内容。
非常感谢您的帮助。提前致谢。
2个回答

7
如果您有一个包含对象间配对距离的矩阵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),以描述样本的最佳排序。

4
因为您的数据稀疏,所以请将其视为图形而不是矩阵。然后尝试各种图形聚类方法。例如,在这样的数据上兴趣点在于寻找团伙。请注意,并非所有内容都可以进行聚类。

要将数据框转换为networkX图,请参见https://dev59.com/MLXna4cB1Zd3GeqPOqgp - Joris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接