modularity#
- modularity(G, communities, weight='weight', resolution=1)[source]#
返回给定图分区的模块度。
模块度在[R6937dc4d2017-1]_中定义为
\[Q = \frac{1}{2m} \sum_{ij} \left( A_{ij} - \gamma\frac{k_ik_j}{2m}\right) \delta(c_i,c_j)\]其中:math:
m`是边的数量(或[R6937dc4d2017-5]_中所有边权重的总和),:math:`A`是 `G
的邻接矩阵,\(k_i`是:math:`i`的(加权)度,:math:\)gamma`是分辨率参数,:math:`delta(c_i, c_j)`是1如果:math:`i`和:math:`j`在同一个社区,否则为0。根据[R6937dc4d2017-2]_(并通过一些代数验证),这可以简化为
\[Q = \sum_{c=1}^{n} \left[ \frac{L_c}{m} - \gamma\left( \frac{k_c}{2m} \right) ^2 \right]\]其中总和遍历所有社区:math:
c
,\(m`是边的数量,:math:`L_c`是社区:math:`c`的内部链接数量,:math:`k_c`是社区:math:`c`中节点的度数总和,:math:\)gamma`是分辨率参数。分辨率参数设置了一个任意平衡组内边和组间边的权衡。通过使用多个gamma值分析同一网络并结合结果,可以发现更复杂的分组模式[R6937dc4d2017-3]_。尽管如此,通常简单地使用gamma=1是很常见的。关于gamma选择的更多信息在[R6937dc4d2017-4]_中。
第二个公式实际上用于模块度的计算。对于有向图,第二个公式将:math:
k_c`替换为:math:`k^{in}_c k^{out}_c
。- Parameters:
- GNetworkX 图
- communities列表或可迭代对象,包含节点集合
这些节点集合必须表示G的节点的分区。
- weight字符串或None,可选(默认=”weight”)
作为权重的数值值的边属性。如果为None或边没有该属性,则该边的权重为1。
- resolution浮点数(默认=1)
如果分辨率小于1,模块度倾向于较大的社区。大于1倾向于较小的社区。
- Returns:
- Q浮点数
分区的模块度。
- Raises:
- NotAPartition
如果
communities
不是G
节点的分区。
References
[1]M. E. J. Newman “Networks: An Introduction”, page 224. Oxford University Press, 2011.
[2]Clauset, Aaron, Mark EJ Newman, and Cristopher Moore. “Finding community structure in very large networks.” Phys. Rev. E 70.6 (2004). <https://arxiv.org/abs/cond-mat/0408187>
[3]Reichardt and Bornholdt “Statistical Mechanics of Community Detection” Phys. Rev. E 74, 016110, 2006. https://doi.org/10.1103/PhysRevE.74.016110
[4]M. E. J. Newman, “Equivalence between modularity optimization and maximum likelihood methods for community detection” Phys. Rev. E 94, 052315, 2016. https://doi.org/10.1103/PhysRevE.94.052315
[5]Blondel, V.D. et al. “Fast unfolding of communities in large networks” J. Stat. Mech 10008, 1-12 (2008). https://doi.org/10.1088/1742-5468/2008/10/P10008
Examples
>>> G = nx.barbell_graph(3, 0) >>> nx.community.modularity(G, [{0, 1, 2}, {3, 4, 5}]) 0.35714285714285715 >>> nx.community.modularity(G, nx.community.label_propagation_communities(G)) 0.35714285714285715