如何在使用邻接矩阵表示的大型网络中查找桥(社区连接节点)

时间:2013-03-18 10:55:03

标签: matlab search math graph social-networking

我有大约10K到100K节点的网络都已连接。这些节点通常被分组为社区集群,这些集群与它们之间的许多边缘紧密连接,并且存在集线器等。在社区之间存在具有少量边缘的节点桥接 / 连接社区在一起。这些数据集在邻接矩阵中

我已经尝试了谱聚类(Ding et al 2001),但它在大型数据集上确实很慢,并且在存在很多歧义时似乎停止工作(桥梁不是通往另一个群集的唯一桥接路径 - 其他社区可以作为替代代理路线)。

我尝试了martelot中的一些方法,例如用于模块化优化的Newman算法,但没有将稳定性优化函数纳入该工作中(这可能是至关重要的吗?)。在通过随机图(ER图)创建聚类的合成数据集上,这些方法可以工作,但是在存在嵌套层次结构的实际数据集中,结果是分散的。使用独立的可视化应用程序/工具,桥梁显而易见。

您会推荐/建议尝试哪些方法?我正在使用MATLAB。

1 个答案:

答案 0 :(得分:6)

你想做什么,确切地说?检测社区或它们之间的桥梁?这是两个不同的问题。一旦拥有了社区,就可以直接识别连接两个不同社区的节点的边缘。所以,我猜你想要探测社区。

实际上有数千种方法用于此目的,其中一些方法在Matlab中实现,例如您引用的方法,或generalized Louvain algorithm(也基于模块化优化)。但是,它们中的大多数可以作为C或C ++程序使用,例如InfoMap(基于数据压缩范例),WalkTrap(使用基于随机游走的距离进行聚类),{{3} }(模拟一些传播机制),列表继续......

这些工具将社区结构的概念或多或少地形式化,在应用于同一网络时可能导致不同的(估计的)社区结构。当然,不同的社区也意味着不同的桥梁。所以问题是要知道如何为数据选择合适的方法。您似乎拥有关于您正在学习的网络的先验知识,因此您应该使用它来做出选择(而不是编程语言)。例如,即使您没有明确说明,您似乎也在寻找一种分层的社区结构:并非所有工具都能够检测到这种结构。同样,如果您认为一个节点可以同时属于多个社区,那么您应该考虑寻找重叠社区,例如使用Markov Cluster(基于clique percolation)。

我建议您查看社区检测的这篇优秀评论,您可能会发现一些有趣的信息,可以让您选择一种方法:CFinder。另外,从编程的角度来看,我建议你使用Community Detection in Graphs(适用于C,R和Python):它包含几个标准的社区检测工具。您可以尝试使用他们的数据,看看你得到了什么。