Python代码:GitHub
Zachary’s karate club网络
Zachary网络是一个检验不同社区发现算法的经典真实的无权网络,一共有34个节点,78条边。该网络是Zachary在上世纪70年代,用了两年时间观察研究空手道俱乐部34个成员之间的个关系而得到的,如下图所示。在调查过程中,俱乐部的主管和校长产生争执,分裂成了两个团体,真实的社区如下所示:
[[1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 17, 18, 20, 22],
[32, 33, 34, 9, 10, 15, 16, 19, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31]]
这里使用 Python 的 NetworkX 包以及 Matplotlib 包来完成对于 Girvan-Newman 算法的演示,以及Gephi,一个基于JVM的可视化平台。
NetworkX是一个用于创建,操作和研究复杂网络的结构、动态和功能的Python包。Matplotlib是一个Python 2D绘图库,利用它完成模块化函数Q与划分社区数目的关系曲线,之后使用Gephi作为网络的可视化工具,将GML文件中的图中划分的社区表示出来。
Python环境需求:
1. Python-3.6.3
2. NetworkX-2.0
3. Matplotlib-2.1.0
安装好Python环境需求后,可直接运行Girvan-Newman.py,输出格式为GML的文件,以及其他信息。获得基于Girvan-Newman算法的社区发现的一些特性。Zachary’s karate club网络Girvan-Newman算法划分社区数与Q值的关系(如下图所示)。
我们可以看到,当我们已知应该划分社区的个数,即2个社区时,Girvan-Newman算法的模块度函数Q值到达极大值,为0.35996055226824464,将输出的GML文件用Gephi打开。这时的社区划分结果如下所示,除了节点3以外,其它节点都被正确归类,如下图所示。
-----------Using number to divide communities and the Q-----------
The number of Communites: 2
Communites: [[1, 2, 4, 5, 6, 7, 8, 11, 12, 13, 14, 17, 18, 20, 22], [32, 33, 34, 3, 9, 10, 15, 16, 19, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31]]
Max_Q: 0.35996055226824464
-------------------------------------------------------------------
但是对于不知道应该划分社区个数时,依赖模块度函数Q的最大值划分社区,从图3中可知,当划分成5个社区时,模块度函数Q达到最大值,为0.40129848783694944,这时的社区划分结果较实际网络相差略大。
-----------the Max Q and divided communities-----------------------
The number of Communites 5
Communites: [[1, 2, 4, 8, 12, 13, 14, 18, 20, 22], [32, 3, 25, 26, 28, 29], [5, 6, 7, 11, 17], [33, 34, 9, 15, 16, 19, 21, 23, 24, 27, 30, 31], [10]]
Max_Q: 0.40129848783694944
-------------------------------------------------------------------
下图为 Newman和 Girvan 在论文 Finding and evaluating community structure in networks 中给出计算结果,和之前给出的图以及计算出的划分社区的每一个步骤对比发现,我们实现的Girvan-Newman算法与论文中给出的结果相一致。
对于m条边和n个节点的网络,Girvan-Newman算法计算边介数的时间复杂度为O(n(m+n)),且在移除m条边的每条边前都需要执行该计算,所以整个算法的时间复杂度为O(mn(m+n))。
若在m∝n稀疏网络中的时间复杂度为O(n3)。
这里总结下Girvan-Newman算法的优缺点。
Girvan-Newman算法的优点:
在知道划分社团数量时,可以较为精确的给出社团的划分结果;
可以给出不同程度的社团划分结果,可以揭示关于网络层次结构的信息;
Girvan-Newman算法的缺点:
在计算边介数的时候可能会有很多重复计算最短路径的情况,时间复杂度太高;
若无法知道应该划分社团的数量,算法效果会相对较差;
总而言之,Girvan-Newman算法不必依赖多余的信息来判断得到的社团结构是否具有实际意义,而是可以直接从网络的拓扑结构来进行分析。
但是该算法的耗时比较大,时间复杂度为O(mn(m+n)),因此它仅仅适用于中等规模的复杂网络(n≤10000)。
1、Newman M E J, Girvan M. Finding and evaluating community structure in networks[J]. Physical review E, 2004, 69(2): 026113.
2、杨晓光. 基于复杂网络的社区发现算法研究与实现[D].南京理工大学,2017.
3、汪洋. 复杂网络的社团发现算法研究[D].安徽大学,2014.
4、莫春玲. 复杂网络中聚类方法及社团结构的研究[D].武汉理工大学,2007.