模块化#
- 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