使用python和networkx检测社区

时间:2015-03-13 18:31:12

标签: python networkx modularity

我正在研究网络中的检测社区。

我使用的是networkx和Python,我需要实现这个算法:http://arxiv.org/pdf/0803.0476.pdf

这就是我试图解决的问题: 首先,我列出包含与图中节点一样多的列表(社区)的列表,以便我可以按索引查找社区。然后,对于每个节点,我找到它们的邻居并计算模块化增益,如下所示:

q1 = (sum_in+ki_in)/float(2*m) - pow(sum_tot+ki,2)/float(pow(2*m,2))
q2 = sum_in/float(2*m) - pow(sum_tot, 2)/float(pow(2*m,2)) -pow(ki,2)/float(pow(2*m,2))
q =  q1 - q2

,其中

for x in temp: # list of neighbors of node i
    sum_in += G.degree(x, weight='weight')
    sum_tot += G.in_degree(x, weight='weight')
    ki_in += weights[i, x]
    ki = G.in_degree(i, weight='weight')

然后我找到最大q并将节点I移动到新社区。 但是这不起作用,似乎我在公式中犯了错误,因为大量的节点算法并没有找到社区。

有没有人知道如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

无权访问您提供的链接。 (我打算发表评论,但此时我无法添加评论)

答案 1 :(得分:0)

您不需要解决此问题,该算法已在community包中的python中实现。您可以在the source code中了解他们是如何做到的。

如果你必须自己为一项作业实施它,尽量避免使用堆栈溢出的坏习惯,你可以通过自己找到来学习更多;)