社团检测之LFM种子传播算法及其python实现
LFM算法
LFM算法首先定义出可以衡量一组节点连接紧密程度的适应度函数:Fitness,具体计算公式如下:
fg=kgin(kgin+kgout)α
f
g
=
k
i
n
g
(
k
i
n
g
+
k
o
u
t
g
)
α
其中 kgin k i n g 表示这些结点内部的度数,也就是内部边的2倍; kgout k o u t g 表示与外部结点相连的度数。一个社区由一组能够使fitness函数最大的结点组成,也就是再向这个社区中添加任何邻居结点都会使fitness减小。而一个结点对于这个社区的fitness定义如为包含这个结点的社区的fitness-不包含这个结点的社区的fitness差值:
fAg=fg+A−fg−A
f
g
A
=
f
g
+
A
−
f
g
−
A
算法过程
LFM算法主要由两个步骤构成:选取种子和拓展种子。
- 它随机地选择一个还没有被分配社区的结点作为种子,通过优化fitness函数的方法拓展它以形成一个社区。
- 根据适应度函数判断子社团的邻居节点是否可以加入到当前社团当中。
- 迭代这两步直到所有结点都属于至少一个社区为止。
由于在拓展社区的时候,即使已经被分配社区的结点也可能被添加进来,所以LFM算法是可以发现重叠社区的。
Python 实现
参考论文: Detecting the overlapping and hierarchical community structure in complex networks.