基于标签传播的非重叠社区发现算法LPA
LPA主要思想是起初每个节点拥有独立的标签,那么网络中有n不同标签,每次迭代中对于每个节点将其标签更改为其邻接点中出现次数最多的标签,如果这样的标签有多个,则随机选择一个。通过迭代,直到每个节点的标签与其邻接点中出现次数最多的标签相同,则达到稳定状态,算法结束。此时具有相同标签的节点即属于同一个社区。
LPA算法执行步骤:
利用igraph,给出LPA的R代码
> library('igraph')
> karate <- graph.famous("Zachary")
> community <- label.propagation.community(karate)
> modularity(community)
[1] 0.3717949
> membership(community)
[1] 1 1 1 1 1 1 1 1 2 1 1 1 1 1 2 2 1 1 2 1 2 1 2 2 2 2 2 2 2 2 2 2 2 2
> plot(community,karate)
基于标签传播的重叠社区发现算法COPRA
LPA算法虽然有很多优势,但无法发现重叠社区结构。对此,基于LPA算法,引入了新的标签结构(c,b),其中,c表示社区标识符,b表示节点x在社区c中的从属系数,且0≤b≤1。顶点x的所有从属系数之和等于1,通过bt(c,b)表示迭代次数t时的顶点x对于社区c的从属系数,N(x)表示顶点x的邻接顶点集。