如果您从 R 中使用 igraph,请使用此选项
modularity.igraph {igraph} | R 文档 |
此函数计算将图划分为子图的给定社群结构的模块化程度。
## S3 method for class 'igraph'
modularity(x, membership, weights = NULL, resolution = 1, directed = TRUE, ...)
modularity_matrix(
graph,
membership,
weights = NULL,
resolution = 1,
directed = TRUE
)
x, graph |
输入图。 |
membership |
数值向量,每个顶点一个值,社群结构的成员向量。 |
weights |
如果不是 |
resolution |
分辨率参数。必须大于或等于 0。将其设置为 1 以使用模块度的经典定义。 |
有向 |
是否使用模块度的有向或无向版本。对于无向图,将被忽略。 |
... |
其他参数,目前没有。 |
modularity
计算关于给定 membership
向量的图的模块度。
关于某些划分(或顶点类型)的图的模块度衡量了划分的好坏,或者不同顶点类型之间的分离程度。它被定义为
Q=\frac{1}{2m} \sum_{i,j} (A_{ij}-\gamma\frac{k_i k_j}{2m})\delta(c_i,c_j),
这里 m
是边的数量,A_{ij}
是 A
邻接矩阵中第 i
行和第 j
列的元素,k_i
是 i
的度,k_j
是 j
的度,c_i
是 i
的类型(或组件),c_j
是 j
的类型,总和遍布所有 i
和 j
顶点对,如果 x=y
,则 \delta(x,y)
为 1,否则为 0。对于有向图,它定义为
Q = \frac{1}{m} \sum_{i,j} (A_{ij}-\gamma \frac{k_i^{out} k_j^{in}}{m})\delta(c_i,c_j).
分辨率参数 \gamma
允许加权随机零模型,这在找到具有高模块度的分区时可能很有用。当找到具有高模块度的分区时,最大化具有较高分辨率参数值的模块度通常会导致更多、更小的集群。较低的值通常会导致更少、更大的集群。当设置 \gamma
为 1 时,将检索模块度的原始定义。
如果给出了边权重,则将它们视为 A
邻接矩阵的元素,并且 k_i
是顶点 i
的相邻边的权重之和。
modularity_matrix
计算模块度矩阵。这是一个密集矩阵,定义为邻接矩阵和配置模型零模型矩阵之间的差。换句话说,元素 M_{ij}
给定为 A_{ij}-d_i d_j/(2m)
,其中 A_{ij}
是(可能加权的)邻接矩阵,d_i
是顶点 i
的度,m
是边的数量(或者如果图是加权的,则为总权重)。
对于 modularity
,一个数值标量,给定配置的模块度分数。
对于 modularity_matrix
,一个数值方阵,它的阶数是图中顶点的数量。
Gabor Csardi csardi.gabor@gmail.com
Clauset, A.; Newman, M. E. J. & Moore, C. Finding community structure in very large networks, Physical Review E 2004, 70, 066111
cluster_walktrap
, cluster_edge_betweenness
, cluster_fast_greedy
, cluster_spinglass
, cluster_louvain
和 cluster_leiden
用于各种社群检测方法。
g <- make_full_graph(5) %du% make_full_graph(5) %du% make_full_graph(5)
g <- add_edges(g, c(1,6, 1,11, 6, 11))
wtc <- cluster_walktrap(g)
modularity(wtc)
modularity(g, membership(wtc))