从无向图中提取群集/节点集

时间:2019-03-20 10:47:17

标签: matrix graph cluster-computing connected-components

说明

我想从无向图数据集中(最好在Python中)以节点组的形式识别并获取n个大小的群集。目前,我在自己的舒适和知识领域之外处于困境,所以我认为值得在这里与感兴趣的人联系。

这里的集群的特征是一组节点都通过(非定向)边缘互连。出于简化原因,可以考虑所有边缘权重,权重=1。而且,也没有在节点或边缘内存储的其他信息。

下图说明了数据结构和依赖性

图形方案

Graph scheme

为此,我正在努力寻找一种解决方案,该解决方案可以自动检测完全互连的节点集,如下所示:

预期的群集结果

Expected Cluster Results

应动态识别群集大小并始终考虑互连节点的最大数量(例如,n1和n2不视为自己的群集,因为n3与它们两个都有联系)。

方法

我尝试通过强连接组件的概念解决此问题,但是由于所有节点之间的连接都不是定向的,因此它似乎无法提供所需的输出。 我也尝试过以矩阵形式解决此问题,如下所示:

图形作为矩阵

Graph as matrix

但是我无法采用一种优雅的解决方案,该解决方案没有采用使用遍历索引的嵌套循环的不可扩展方法。

是否有人对如何解决这个问题有一个想法,或者甚至以我可以定位的可共享解决方案对此进行了优化? 非常感谢!

1 个答案:

答案 0 :(得分:0)

集群的正确命名为complete subgraph。您的问题称为clique problem。 Python最好的图形处理库之一-networkx-有多种算法可以解决此问题: networkx cliques

此功能可以解决您的问题:networkx.algorithms.clique.enumerate_all_cliques

您应该将图形转换为networkx格式,并使用这些算法进行查找。