我高度怀疑community
包中有一个bug。它在计算模块中的分数。我查看了Louvain
算法paper,发现了一些异常。问题来了-
在Q
方程中
有k_ik_j/2m
,在将外部1/2m
相乘之后,它应该是k_ik_j/4 sqr(m)
,但是如果您使用包的modularity()
函数,代码是这样的-sqr(k_ik_j/4m)
。见第131行
res += (inc.get(com, 0.) / (2. * links)) -(deg.get(com, 0.) / (2. * links)) ** 2
但是,根据等式应该是这样的-
res += (inc.get(com, 0.) / (2. * links)) - deg.get(com, 0.) / (2. * links) ** 2
我测试了一些玩具图,以检查最佳集群的模块化得分和第二次修正的代码给出了最佳分区的最高模块化。但是,第一个代码(可能是错误的)给出了最佳分区的低模块性分数。你知道吗
以上是我在阅读论文、使用一些图形进行测试、理解和调试modularity()
函数之后得到的。你知道吗
我的问题是,我的发现正确吗?有人能检查一下吗?如果有人需要更多的信息或澄清,我可以提供。你知道吗
我使用的是0.8版本的python-louvine包。你知道吗
你是对的,第二部分是kïi*kïj/(4 sqr(m)),kïi是群落i的度,但你只考虑i==j的情况,因此它变成:
k泳i*k泳i/4平方米(m)==(k泳i/(2 m))**2
用你的方程,我想你只是考虑了k琰I,忘记了k琰j
相关问题 更多 >
编程相关推荐