一、社团结构的描述
如上图,每个社团内部的节点之间的连接相对较为紧密,各个社团之间的连接相对来说比较稀疏。
生活中许多实际网络都具有较为明显的社团结构。
社团结构分析与计算机科学中的图分割和社会学中的分级聚类等有着密切的关系。图分割问题的一个实际例子是并行计算,找到这类分割问题的精确解是一个NP难题,当图的规模很大时不存在有效解法。分级聚类是寻找社会网络中社团结构的一类传统算法。它基于各个节点之间连接的相似性或者强度,把网络自然的划分为各个子群。根据向网络中添加边还是从网络中移除边,这类算法又可以分为两类:凝聚方法和分裂方法。
二、模块度
模块度的基本想法是把划分社团后的网络与相应的零模型进行比较,以度量社团划分的质量。
所谓与一个网络对应的零模型,就是指与该网络具有某些相同的性质而在其它方面完全随机的随机图模型。
下面来介绍度模块的概念。
对于一个给定的实际网络,假设找到了一种社团划分,那么所有社团的内部的边数的总和可计算如下:
其中A=(a
i
j
_{ij}
ij)是实际网络的邻接矩阵,C
i
_i
i与C
j
_j
j分别表示节点i和节点j在网络中所属的社团:如果这两个节点属于同一个社团,
δ
\delta
δ取值为1,否则
δ
\delta
δ取值为0。
对于与该实际网络对应的一个相同规模的零模型,如果用相同的社团划分,那么所有社团内部的边数总和的期望值为:
其中p
i
j
_{ij}
ij是零模型中节点i和节点j之间的连边数的期望值。
一个网络的模块度就定义为该网络的社团内部边数与相应的零模型的社团内部边数之差占整个网络边数M的比例,即
在理论上,对于与原网络具有相同度序列但不具有度相关性的一个常用零模型:配置模型,我们有p
i
j
_{ij}
ij=k
i
_i
ik
j
_j
j/(2M),k
i
_i
i与k
j
_j
j分别为原网络中节点i和节点j的度。因此,常用的模块度定义为:
其中
B=b(
i
j
_{ij}
ij)
N
×
N
_{N\times N}
N×N也称为模块度矩阵。
实际网络数据通常包含的是节点之间的连边信息,而不会直接给出各个节点的度值。为此,下面给出模块度的一种更便于实际计算的形式。
记e
v
w
_{vw}
vw为社团v和社团w之间的连边占整个网络边数的比列,有:
记a
v
_v
v为一端与社团v中节点相连的连边的比列,则有:
注意到
于是度模块定义也可以写为:
上式意味着,只要根据网络连边数据统计出每个社团v内部节点之间的连边数占整个网络边数的比例e
v
v
_{vv}
vv,以及一端与社团v中节点相连的连边的比例a
v
_v
v,就可计算出模块度。
三、加权和有向网络的模块度
模块度公式可以直接推广到加权网络情形,只需把边数用边的权值之和代替,节点度值用节点强度代替,从而有:
其中,W是网络中所有边的权值之和,s
i
_i
i是节点i的强度,即与节点i相连的所有边的权重和,w
i
j
_{ij}
ij是网络中节点i与节点j之间的连边的权值。s
i
_i
is
j
_j
j/2W是相应的零模型中节点i与节点j之间的连边的期望的权值。W
c
_c
c是社团C内部所有边的权重和,S
c
_c
c是所有与社团C内部的点相关联的边的权重和。
注意到对于具有M条边的无向网络,邻接矩阵的非零元素的个数为2M,并且所有节点的度值之和为2M;对于具有M条边的有向网络,邻接矩阵的非零元素的个数为M,并且所有节点的入度(出度)之和为M。因此,无向网络的模块度公式推广到有向情形可表示为;
其中k
i
o
u
t
_i^{out}
iout、k
i
i
n
_i^{in}
iin分别表示节点i的出度和入度。
把上面两个式子结合,就得到一般的加权网络的模块度公式:
其中,s
i
o
u
t
_i^{out}
iout、s
i
i
n
_i^{in}
iin分别表示节点i的出强度和如强度。