参考:
Louvain algorithm for community detection
Louvain 算法
一种基于模块度的图算法模型。对于点多边少的图,进行聚类效果特别明显。louvain是针对于无向图的社区发现算法.
社区
如果一张图是对一片区域的描述的话,我们将这张图划分为很多个子图。当子图之内满足关联性尽可能大,而子图之间关联性尽可能低时,这样的子图我们可以称之为一个社区。
模块度的定义:
模块度是评估一个社区网络划分好坏的度量方法,它的物理含义是社区内节点的连边数与随机情况下的边数之差,它的取值范围是 [−0.5,1]。可以简单地理解为社区内部所有边权重和减去与社区相连的边权重和。
- 模块度越大分群质量越高
算法流程:
1、初始时将每个顶点当作一个社区,社区个数与顶点个数相同。
2、依次将每个顶点与之相邻顶点合并在一起,计算它们的模块度增益是否大于0,如果大于0,就将该结点放入该相邻结点所在社区。
3、迭代第二步,直至算法稳定,即所有顶点所属社区不再变化。
4、将各个社区所有节点压缩成为一个结点,社区内点的权重转化为新结点环的权重,社区间权重转化为新结点边的权重。
5、重复步骤1-3,直至算法稳定。
分群算法过程图解(摘自论文Fast unfolding of communities in large networks)
Louvain 分群过程
网友评论