模块化#

modularity(G, communities, weight='weight', resolution=1)[源代码]#

返回图的给定分区的模块性。

模块化在中定义 [1] 作为

\[Q=\FRAC{1}{2m}\sum_{ij}\Left(A_{ij}-\Gamma\FRAC{k_ik_j}{2m}\右) \Delta(c_i,c_j)\]

哪里 \(m\) 是边的数量, \(A\) 是的邻接矩阵 G\(k_i\) 是一种程度 \(i\)\(\gamma\) 是分辨率参数,并且 \(\delta(c_i, c_j)\) 为1,如果 \(i\)\(j\) 都在同一个社区,否则0。

根据 [2] (并由一些代数验证)这可以归结为

\[Q = \sum_{c=1}^{n} \left[ \frac{L_c}{m} - \gamma\left( \frac{k_c}{2m} \right) ^2 \right]\]

其中和迭代遍历所有社区 \(c\)\(m\) 是边的数量, \(L_c\) 是社区的社区内链接数 \(c\)\(k_c\) 是社区中节点的度数之和 \(c\) ,以及 \(\gamma\) 是分辨率参数。

RESOLUTION参数设置组内边缘和组间边缘之间的任意折衷。通过分析具有多个伽马值的同一网络,然后合并结果,可以发现更复杂的分组模式 [3]. 也就是说,简单地使用Gamma=1是非常常见的。 [4].

第二个公式是计算模数时实际使用的公式。对于有向图,第二个公式替换 \(k_c\) 使用 \(k^{{in}}_c k^{{out}}_c\)

参数
G网络X图表
communities节点集的列表或可迭代

这些节点集必须表示G的节点的划分。

weight字符串或无,可选(默认为“权重”)

保存用作权重的数值的边属性。如果无或某条边不具有该属性,则该边的权重为1。

resolution浮点(默认值=1)

如果分辨率小于1,则模块化有利于更大的社区。大于1表示支持较小的社区。

返回
Q浮动

分区的模块化。

加薪
NotAPartition

如果 communities 不是的节点的分区 G .

工具书类

1

M.E.J.纽曼,《网络:导论》,第224页。牛津大学出版社,2011年。

2

书名/作者声明/作者声明:[by]“在非常大的网络中寻找社区结构。”太棒了。修订本E 70.6(2004)。<https://arxiv.org/abs/cond-mat/0408187>

3

Reichardt和Bornholdt:《社区探测的统计力学》物理学。修订版E 74,016110,2006年。Https://doi.org/10.1103/PhysRevE.74.016110

4

M·E·J·纽曼,《社区检测的模块化优化和最大似然方法之间的等价性》,物理。E 94修订版,052315,2016年。Https://doi.org/10.1103/PhysRevE.94.052315

实例

>>> import networkx.algorithms.community as nx_comm
>>> G = nx.barbell_graph(3, 0)
>>> nx_comm.modularity(G, [{0, 1, 2}, {3, 4, 5}])
0.35714285714285715
>>> nx_comm.modularity(G, nx_comm.label_propagation_communities(G))
0.35714285714285715