社区包中的错误?

时间:2017-06-27 20:47:47

标签: python python-3.x

我非常怀疑community包中存在错误。它在模块得分的计算中。我查看了Louvain算法paper,发现了一些异常现象。这是问题 - 在Q

的等式中

Equation for 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包。

1 个答案:

答案 0 :(得分:1)

你是对的,第二部分是k_i * k_j /(4 sqr(m)),其中k_i是社区i的程度。但是你只考虑i == j的情况,因此它变成了:

k_i * k_i / 4 sqr(m)==(k_i /(2 m))** 2

用你的等式,我认为你只考虑k_i而忘记了k_j。