一、CNM算法
该算法是基于贪婪算法思想的社团结构检测算法,该算法的计算复杂度为O(nlog
2
^2
2n),算法代码可以从网上搜到。CNM算法采用堆数据结构计算和更新模块度,具体描述如下:
(1)初始化:初始时假设每个节点就是一个独立的社团,模块度值Q=0,初始的e
i
j
_{ij}
ij、a
i
_i
i计算如下:
初始的模块增量矩阵的元素计算如下:
得到初始的模块度增量矩阵后,就可以得到由它每一行的最大元素构成的最大堆H。
(2)从最大堆中选择最大的
Δ
\Delta
ΔQ
i
j
_{ij}
ij,合并相应的社团i和j,标记合并后的社团的标号为j,并更新模块度增量矩阵
Δ
\Delta
ΔQ
i
j
_{ij}
ij,最大堆H和辅助向量a
i
_i
i。
Δ
\Delta
ΔQ
i
j
_{ij}
ij的更新:删除第i行和第i列的元素,更新第j行和第j列的元素,得到:
最大堆H的更新:更新最大堆中相应的行和列的最大元素。
辅助向量a
i
_i
i的更新:a
j
,
_j^,
j,=a
i
_i
i+a
j
_j
j,a
i
,
_i^,
i,=0。记录合并以后的Q=Q+
Δ
\Delta
ΔQ
i
j
_{ij}
ij。
(3)重复步骤(2)直到网络中所有节点都归到一个社团内。
当模块度增量矩阵中最大的元素由正变负时就可以停止合并,并认为此时的结果就是网络的社团结构。
二、层次化社团检测
大规模实际网络中的节点往往具有不同层次的组织结构,大社团内部可能含有较小规模的社团,较小规模社团内部可能又包含更小规模的一些社团,如下图所示:
基于模块度的概念人们提出了一种能够用于加权网络的层次化社团结构的凝聚算法,简称BGLL算法,算法分为两个阶段:
(1)初始时假设每个节点都是一个独立的社团。对任意相邻的节点i和节点j,计算将节点i加入其邻居节点j所在的社团(记为社团C)时对应的模块度增量
Δ
\Delta
ΔQ:
其中s
i
,
i
n
_{i,in}
i,in是节点i与社团C内其它节点所有连边的权重和。
计算节点i与所有邻居节点的模块度增量,然后选出其中最大的一个。当该值为正时,把节点i加入相应的邻居节点所在的社团,否则,节点i留在原社团中。这种社团合并过程重复进行,直到不在出现合并现象,这样就划分出了第一层社团。
(2)构造一个新网络,其中的节点是前一阶段划分出的社团,节点之间的连边权重是两个社团之间所有连边的权重和。然后再利用(1)中的方法对新网络进行社团划分,得到第二层社团结构,以此类推,直到不能划分出更高一层的社团结构为止。
三、多片网络社团检测
1、定义
模块度的概念可以推广同于随时间演化的动态网络、具有多种连接形式的多元网络以及具有不同尺度社团结构的过尺度网络。一种统一的处理办法就是把这些网络表示为如下图所示的多片网络。其中,同一片上的节点之间的连接用实线表示,位于不同片的同一个节点之间用虚线连接。
根据片与片的关系,可以把多篇网络分为两类:
(1)各片之间有先后次序关系的多片网络,典型例子包括随时间演化的组织内部成员之间的关系网络。
(2)各片之间并无先后次序关系的多片网络。典型例子包括一群个体之间基于不同的关系类型定义而得到的不同的关系网络。
2、多片加权网络的模块度公式
第p片上节点i与节点j之间的连接权重记为w
i
j
p
_{ijp}
ijp,第p片网络上的节点i与第q片网络上的节点i之间的连接的权重记为c
i
p
q
_{ipq}
ipq。定义第p片上的节点i的三种强度如下:
片上强度:
片间强度:
总强度:
第p片上所有节点的强度之和记为W
ρ
_\rho
ρ=
∑
i
\sum_i
∑is
i
p
_{ip}
ip,所有片上所有节点的总强度之和记为:
由上可得,多片加权网络的模块度公式如下:
其中
λ
p
\lambda_p
λp是用来控制各片网络内社团划分规模和数量的分辨率系数。理论上说,方括号中的第二项也可以添加一个表示片间耦合的分辨路参数因子,但是这个参数可以包含到片间节点的连边权重c
i
p
q
_{ipq}
ipq的取值中,通常取值为0(没有连接)或者取为
ω
\omega
ω>0。
四、空间网络社团检测
为了更有效的研究空间网络的社团结构,我们再看以下模块度的原始定义:
其中p
i
j
_{ij}
ij是零模型中节点i和节点j之间连边数的期望值,并且对于通常选取的保持度序列不变的配置模型有:
为了考虑空间的影响,可以把上式修改为:
其中N
i
_i
i是度量节点i的重要性,d
i
j
_{ij}
ij是节点i和节点j之间的物理距离。由于相隔一定距离的节点之间的总的权值应保持不变,即有
因此,障碍函数具有如下形式: