模块度与Louvain社区发现算法

转自:感谢分享!https://zhuanlan.zhihu.com/p/29380602

详细解释见: www.cnblogs.com/fengfenggirl

 

Louvain算法其实是基于层次聚类的,图聚类。层次聚类依据是类间距更大,Louvain算法图聚类依据是模块度(公式在下方)。

 

Louvain算法包括两个阶段,迭代这两个阶段。

 

1不断地遍历网络中的结点,假设每个节点为1个社区,N个节点,初始化N个社区,尝试将单个结点加入能够使模块度提升最大的社区中,直到所有结点都不再变化。

 

模块度提升的定义如下:

前项代表的意思为结点加入邻居社区后,社区内内所有边

 

后项代表着结点加入邻居社区后,社区所有边(包括内部边,以及连接外部的边)

 

目的是变化后希望子社区内边,外边少,即更聚集。

 

但是为什么后项要所有边呢?因为后项带了惩罚项的意思,没有惩罚项的话把所有都分成一个社区都分成一起就最大了。

 

2它处理第一阶段的结果,将一个个小的社区归并为一个超结点来重新构造网络。它的执行流程如图所示:

迭代这两个步骤直至算法稳定(所有子社区模块度相加值不变)。

前项代表的意思为子社区内所有边,后项代表着子社区社区所有边(包括内部边,以及连接外部的边)。

 

模块度就是希望子社区内边,外边少,即更聚集。

 

posted @ 2017-10-26 14:50  白婷  阅读(9219)  评论(0编辑  收藏  举报