“Multi-level learning based memetic algorithm for community detection”
1.Introduction
传统的几种算法和本文使用的算法MLCD:
(1)FM(fast greed method):迭代加入一对模块化增益最大的群落,倾向于获得相当大的群落而忽略小的群落。缺点:从而很容易进入局部最优网络划分。
(2)LPAm(The modularity-specific label propagation algorithm):对节点的优化顺序非常敏感,因此在不同的独立试验中显示的网络分区是不同的。此外,还容易进入局部最优网络划分,其中被检测的群落总体上是相似的
(3)The multistep techniques:迭代地合并一组节点和社区,也很容易得到一个局部最优解。这是因为合并的节点和社区几乎不可能再次分离。
(4)Memetic algorithms (MAs) :模因算法是全局-局部混合启发式搜索方法。全局启发式搜索准确但是速度慢,局部搜索速度快但是易陷于局部最优解,综合了基于种群的全局搜索和基于个体的局部搜索的互补优势,可以有效地产生更好的解决方案。
(5)Meme-Net:揭示不同等级层次的社区。但是计算复杂度过大使它不可能运用于大型网络。
(6)MLCD(Multi-level learning based memetic algorithm):采用遗传算法作为全局搜索,使用所提出的多层次学习算法来加速收敛。提出的多层次学习策略分别在网络的节点、聚类和网络划分层次上起作用。通过迭代执行遗传算法和多级学习策略,可以准确、稳定地获得模块化程度高的网络划分。还采用了模块化特定的标签传播规则来更新每个操作中每个节点的聚类标识符。
2.Problem definition
(1)community的定义:它的定义与具体系统和实际应用密切相关。在大多数情况下,community在算法层面的定义是基于图的顶点度的。
对于community(or sub-graph:
S
∈
G
S \in G
S∈G):
k
s
i
n
=
∑
i
∈
S
,
j
∈
S
A
i
j
k_s^{in}=\sum_{i\in S,j\in S}A_{ij}
ksin=∑i∈S,j∈SAij表示的是
S
S
S中所有边的的个数,
k
s
o
u
t
=
∑
i
∈
S
,
j
∉
S
A
i
j
k_s^{out}=\sum_{i\in S,j\not\in S}A_{ij}
ksout=∑i∈S,j∈SAij表示的是
S
S
S之外所有边的个数,
如果
k
s
i
n
>
k
s
o
u
t
k_s^{in}>k_s^{out}
ksin>ksout,那么就说明这个子图是一个community。
(2)评价网络划分的质量:典型的方法是模块化(Modularity)。模块化度量的是社区内边缘的实际比例与其期望值之间的差异。
一个具有 m 个边和 k 个社区的网络,模块性可以表示为:
Q
=
∑
s
=
1
k
[
l
s
m
−
(
k
s
2
m
)
]
Q=\sum_{s=1}^k\left[\frac{l_s}{m}-\left(\frac{k_s}{2m}\right)\right]
Q=s=1∑k[mls−(2mks)]
其中
l
s
l_s
ls和
k
s
k_s
ks是
s
s
s中的
l
i
n
k
link
link 总数和节点的总度,
Q
∈
[
−
1
,
1
]
Q\in \left[-1,1\right]
Q∈[−1,1],当
Q
<
0
Q< 0
Q<0 时,意味着网络划分对于反映网络的社区结构是无用的;当
Q
=
0
Q = 0
Q=0,表示社区和零模型之间的边的比例没有差异;对于给定的网络,模块化值较高的网络分区对应于网络的更好的社区分区。如果采用
Q
Q
Q 来评价网络社区划分的质量,那么复杂网络中的社区发现问题就成为一个基于模块化的最佳化问题。
3.The proposed memetic algorithm with multi-level learning strategies for community detection
(1)表示:
- x a : 1 ≤ a ≤ N p x_a: 1\leq a\leq N_p xa:1≤a≤Np, each solution(chromosome or individual),
- x a = { x a 1 , x a 2 , . . . , x a n } x_a=\lbrace x_a^1, x_a^2, ..., x_a^n \rbrace xa={xa1,xa2,...,xan};
- x a j x_a^j xaj: 表示在个体 x a x_a xa 节点 v j v_j vj 的聚类标识符, [ 1 , 2 , . . . , n ] \left[1, 2, ..., n\right] [1,2,...,n],如果 x a i = x a j x_a^i=x_a^j xai=xaj,那么节点 v i v_i vi 和 v j v_j vj 在同一个聚类中。
(2)初始化:启发式初始化
- 首先,每个个体中的每个基因都初始化到不同的聚类中: x a i ← 1 , 1 ≤ i ≤ n , 1 ≤ a ≤ N p x_a^i\leftarrow 1,1\leq i\leq n, 1\leq a\leq N_p xai←1,1≤i≤n,1≤a≤Np;
- 然后根据邻居节点更新节点的聚类标识符: x a i ← x a j , ∃ j ∈ { j ∣ A i j = 1 } x_a^i\leftarrow x_a^j, \exists j\in\lbrace j|A_{ij}=1\rbrace xai←xaj,∃j∈{j∣Aij=1};
- 上述过程更新 N p N_p Np 次,有最大模块化的个体被选择为 x g x_g xg.
(3)基因操作:交叉
- 传统方法有:uniform crossover and the two-point crossover;
- Two-way crossover
(4)基因操作:突变
- 首先,对于每个个体 x c ∈ X C x_c\in X_C xc∈XC 中的每个节点 v i v_i vi ,生成一个随机数 ∈ [ 0 , 1 ] \in [0, 1] ∈[0,1];
- 如果随机数 < p m <p_m <pm,那么节点 v i v_i vi的聚类标识符随机突变成此节点邻接点的聚类标识符: x c i ← x c j , ∃ j ∈ { j ∣ A i j = 1 } x_c^i \leftarrow x_c^j,\exists j\in \lbrace j|A_{ij}=1\rbrace xci←xcj,∃j∈{j∣Aij=1};
- 生成的子代中,模块化最大的个体,被选择为 x l x_l xl.
(5)多层次学习策略
-
The first-level learning:类似于LPAm
x l x_l xl: 突变之后选中的模块化最大的个体,作为节点层次学习策略的初始化个体;
G G G: 有 n n n个节点的网络;
缺点:易于陷入局部最优
M-LPAm:LPAm算法结合遗传算法,能够避免局部最优解,但是对于大规模的网络则不行。
-
The second-level learning:类似于BGLL
首先假设个体 x l x_l xl有 k k k个社区, ( e . g . s 1 , s 2 , . . . , s k ) (e.g. s_1,s_2,...,s_k) (e.g.s1,s2,...,sk),一个网络 G ′ G^\prime G′,节点是由 k k k个社区组成;
然后给每个节点分配一个独一无二的聚类标识符, X i = i , 1 ≤ i ≤ k X^i=i, 1\leq i\leq k Xi=i,1≤i≤k,其中 X i X^i Xi表示的是每个节点 v i ′ v_i\prime vi′的聚类标识符;
接着使用 The first-level learning 策略找到一个更好的网络划分;
最后将 G ′ G^\prime G′解码成原来网络 G G G的社区划分,返回一个新的个体 x e x_e xe 。
-
The third-level learning:
对于两个个体: x g = { g 1 , g 2 , . . . , g k 1 } x_g=\lbrace g_1, g_2, ... , g_{k_1}\rbrace xg={g1,g2,...,gk1} 和 x e = { s 1 , s 2 , . . . , s k 2 } x_e=\lbrace s_1, s_2, ... , s_{k_2}\rbrace xe={s1,s2,...,sk2},其中 k 1 k_1 k1和 k 2 k_2 k2分别是 x g x_g xg和 x e x_e xe的聚类的数量;
g i g_i gi: 1 ≤ i ≤ k 1 1\leq i\leq k_1 1≤i≤k1,是 x g x_g xg的聚类;
g i g_i gi中对应的节点划入同一个聚类中的两个原则:(1)如果节点在两个个体中都是同属于一个聚类,那么将它们划分到一个聚类中;(2)如果节点在 x g x_g xg中属于一个聚类,但是在 x e x_e xe中属于不同的聚类,那么将它们划分到不同的聚类;