Louvain 算法来源于文章2010年的论文Fast unfolding of communities in large networks,简称为Louvian [1]。
算法原理
Louvain算法是基于模块度(Modularity)的社区发现算法,该算法在效率和效果上都表现比较好,并且能够发现层次性的社区结构,其优化的目标是最大化整个图属性结构(社区网络)的模块度。
其中需要理解的核心点有:
模块度Modularity的定义,这个定义是描述社区内紧密程度的值QQ;
模块度增量ΔQ\Delta Q,即把一个孤立的点放入一个社区C后,计算Modularity的变化,其中计算过程的要点是,首先计算1个点的Modularity,和社区C的Modularity,再计算合并后新社区的Modularity,新社区的Modularity减去前两个Modularity就是ΔQ\Delta Q。
对上述公式的理解是,将ΔQ\Delta Q展开其等价于1/2*(ki,in/m-Sumtot/m*ki/m)1/2 *( k_i,in / m - Sum_{tot} / m * ki / m ),其中kik_i,in/min/m表示的是将孤立的节点和社区C放在一起对整个网络 Modularity 的影响,而 Sumtot/mSum_{tot} / m 和 ki/mki / m 分别表示孤立的节点和社区C分开式分别对整个网络Modularity的影响,所以他们的差值就反应了孤立的节点放入社区C前后对整个网络Modularity的影响。
算法的计算过程如下:每个点作为一个community,然后考虑每个community的邻居节点,合并到community,然后看ΔQ\Delta Q