我正在研究网络中的检测社区。 p>
我使用的是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移动到新社区。 但是这不起作用,似乎我在公式中犯了错误,因为大量的节点算法并没有找到社区。 p>
有没有人知道如何解决这个问题?
答案 0 :(得分:0)
无权访问您提供的链接。 (我打算发表评论,但此时我无法添加评论)
答案 1 :(得分:0)
您不需要解决此问题,该算法已在community包中的python中实现。您可以在the source code中了解他们是如何做到的。
如果你必须自己为一项作业实施它,尽量避免使用堆栈溢出的坏习惯,你可以通过自己找到来学习更多;)