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,直到所有节点的社群编号收敛;

======================

模块度定义,随时间的演化:

louvain算法 - 知乎

------------------------

 

 

 结论:对于模块度的定义,记住这句话就好:每个社团内部的边的权重之和,减去所有外部与社团节点相连边的权重之和。

posted @ 2022-05-23 21:49  bH1pJ  阅读(154)  评论(0编辑  收藏  举报