python - 聚类稀疏共现矩阵

标签 python matrix cluster-analysis sparse-matrix

我有两个必须分析的 N x N 共现矩阵(484x484 和 1060x1060)。矩阵沿对角线对称并且包含许多零值。非零值是整数。

我想将非零位置组合在一起。也就是说,我要做的是算法on this link . When order by cluster is selected, the matrix gets re-arranged in rows and columns to group the non-zero values together.

因为我使用 Python 来完成这个任务,所以我查看了 SciPy Sparse Linear Algebra图书馆,但找不到我要找的东西。

非常感谢任何帮助。提前致谢。

最佳答案

如果您的矩阵 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 )来描述样本的最佳排序。

关于python - 聚类稀疏共现矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44357681/

相关文章:

javascript - 在 Javascript 中乘以 2 个矩阵

python - symPy 中的 inv() 没有返回正确的值

cluster-analysis - 按时间和地点对图片进行聚类

machine-learning - Weka 中分类前的聚类

python - Pandas astype 为 int() 抛出无效文字,基数为 10 错误

c - 传递要在 C 函数中修改的动态分配矩阵

Python 连接多个文件,每个文件中的行数不得超过一定限制

r - 如何从 flexclust 生成集群的性能统计信息?

python - 如何干净地退出cmd模块的cmd循环

python - 在一定数量的内核上进行多处理