community_louvain社群划分方法
第一、
这个方法是一个典型的EM算法。定义了一个“模块度”的量化评价指标,然后结合上优化方法,不断地优化模块度,最终得到社群划分的结果。
第二、模块度的定义,具体如下:
对于图中任意两个节点,i和j
1、A(i,j)表示两点之间的边的权重
2、2m表示所有边的权重和
3、k(i)表示点i所有边的权重和(度中心性)
4、c(i,j)表示两者是否在一个社区,如果在则为1否为为0
含义理解:
可以看到,
1、对于一个社区内边越多,对外边越少,则模块度越大。
第三、算法流程
Louvain社区划分算法及Java语言实现_Aldebran__的博客-CSDN博客_社区划分算法实现
1、每个节点当成一个社群;
2、每个节点的社区编号由相邻节点决定;(看看把当前节点给谁,模块度最大)
3、遍历所有节点;
4、重复1~3,直到所有节点的社群编号收敛;
======================
模块度定义,随时间的演化:
------------------------
结论:对于模块度的定义,记住这句话就好:每个社团内部的边的权重之和,减去所有外部与社团节点相连边的权重之和。