简介
一个基于模块度优化的启发式算法,用于发现大型网络的社团结构。
相关定义
模块度(第二版)
在一个(有权)网络中,模块度被定义为:
其中表示节点和节点之间的边权值;表示与节点i相连的边的权值之和(无权网络中为度);表示所属的社团;若节点和节点属同一社团,则为1,否则为0;表示网络中节点的边数量,若网络为有权网络则表示边权重和。
模块度(第一版)
基本思想
算主分为迭代重复计算的两个阶段:1.节点社团归属确定;2.社团合并。
step0:在算法开始,为网络中的每一个节点分配为一个不同的社团。
step1:确定节点社团归属
对于节点,依次考虑将其加入其邻居节点所属的社团,此步骤带来的模块度增益为:
加入后的整体模块度 - 加入前整体的模块度
模块度(第一版)
对于社团,若记sigma_in为社团内所有边权重和的2倍,sigm_tot为连接到社团中节点的连边和,则社团的模块度为:
节点加入后的社团模块度为:
其中为节点连接到社团中边的权重和,表示节点的度;
若节点为孤立节点,即其所属社团仅有一个节点,则移出前,社团的模块度为:
移出后,社团的模块度为:
因此可以得到此时模块度增益为:
(网络上很多翻译、博客将此公式译为模块度增益公式,是不正确的!该公式仅给出了对于孤立节点的加入社团c带来的模块度增益,论文中也有对应说明。)
若节点未非孤立节点,则需要计算
此时社团的模块度为:
移出节点后,社团的模块度为:
其中为节点连接到社团中边的权重和,表示节点的度;