Louvain社区检测算法
Louvain社区检测算法
介绍
用途:用来进行社区检测,抽象来说,就是从一个网络图中,利用模块度启发式的分为若干个不同的分区,区内联系紧密,区间联系稀疏。
模块度:模块度是评估一个社区网络划分好坏的度量方法,它的物理含义是社区内节点的连边数与随机情况下的边数只差,它的取值范围是 [−1/2,1),其定义如下:

流程
Louvain算法的思想很简单:
1)将图中的每个节点看成一个独立的社区,次数社区的数目与节点个数相同;
2)对每个节点i,依次尝试把节点i分配到其每个邻居节点所在的社区,计算分配前与分配后的模块度变化Δ𝑄ΔQ,并记录Δ𝑄ΔQ最大的那个邻居节点,如果𝑚𝑎𝑥Δ𝑄>0maxΔQ>0,则把节点i分配Δ𝑄ΔQ最大的那个邻居节点所在的社区,否则保持不变;
3)重复2),直到所有节点的所属社区不再变化;
4)对图进行压缩,将所有在同一个社区的节点压缩成一个新节点,社区内节点之间的边的权重转化为新节点的环的权重,社区间的边权重转化为新节点间的边权重;
5)重复1)直到整个图的模块度不再发生变化。
细节:不同社区间融合为一个社区后,社区内的边就不算了。那么社区间的边权重就有可能发生变化。整个网络的总边权重也会发生变化。
从流程来看,该算法能够产生层次性的社区结构,其中计算耗时较多的是最底一层的社区划分,节点按社区压缩后,将大大缩小边和节点数目,并且计算节点i分配到其邻居j的时模块度的变化只与节点i、j的社区有关,与其他社区无关,因此计算很快。
有向图处理
可视化
最后计算可以得到一个关于所有节点的划分。我们可以给不同分区的节点上不同的颜色。分区间的边可以考虑不画。

浙公网安备 33010602011771号