newman算法
① 社区检测—GN(Girvan-Newman)算法及其实现
在探讨社区检测这一重要领域时,我们将聚焦于一种经典算法,即GN(Girvan-Newman)算法及其实现。社区检测,作为网络分析的核心任务之一,在大规模网络如在线社交平台中尤为重要。在面对数以百万计的节点和边时,有效划分网络为多个紧密相连的社区成为可能的挑战。
社区的定义在图论中,是指节点的子集,这些节点之间紧密相连,而与其他社区的节点联系较为松散。因此,社区检测算法对于理解网络结构,揭示潜在的组织模式至关重要。
社区检测方法主要分为两大类:凝聚方法与分裂方法。凝聚方法自空图开始,逐步将边添加到图中,优先考虑强边。分裂方法则相反,从完整的图开始,迭代地移除边,尤其是权重最大的边。Girvan-Newman算法即代表了分裂方法的典型应用。
在Girvan-Newman算法中,社区的发现基于边介数中心性(Edge Betweenness Centrality,EBC)的计算。该值衡量了网络中通过一条边的最短路径的数量,有助于识别关键连接节点的边,进而通过移除这些边来揭示潜在的社区结构。
计算EBC分数涉及一个迭代过程,首先需要识别网络中所有节点间的最短路径。以一个示例图为例,我们可以从任意节点出发,计算该节点与网络中所有其他节点间的最短路径数量,以此为基准给边分配EBC分数。
分配分数的步骤包括从根节点开始遍历整个图,计算节点分数后,再对剩余节点重复此过程,最终得到网络中所有边的分数。这些分数用于评估边的连接重要性,为后续的社区划分提供依据。
在Girvan-Newman算法中,我们基于EBC分数的计算结果,迭代地移除得分最高的边,直至图分裂为多个独立的子图。这些子图即为识别出的社区。
为了实现Girvan-Newman算法,Python提供了一种直观且高效的解决方案。借助于相应的库,如NetworkX,用户可以轻松构建和分析复杂网络,实现算法的关键步骤,包括EBC分数的计算与社区的划分。
本文旨在提供一个简洁的框架,展示Girvan-Newman算法在社区检测领域的应用及其实现方法。通过理解算法的核心原理与实践过程,读者能够更深入地探索网络分析的复杂性和多样性。
② 社区检测算法(Community Detection)
社区检测(community detection)又被称为是社区发现,它是用来揭示网络聚集行为的一种技术。社区检测实际就是一种网络聚类的方法,这里的“社区”在文献中并没有一种严格的定义,我们可以将其理解为一类具有相同特性的节点的集合。
近年来,社区检测得到了快速的发展,这主要是由于复杂网络领域中的大牛Newman提出了一种模块度(molarity)的概念,从而使得网络社区划分的优劣可以有一个明确的评价指标来衡量。一个网络不通情况下的社区划分对应不同的模块度,模块度越大,对应的社区划分也就越合理;如果模块度越小,则对应的网络社区划分也就越模糊。
下图描述了网络中的社区结构:
Newman提出的模块度计算公式如下:
所以模块度其实就是指一个网络在某种社区划分下与随机网络的差异,因为随机网络并不具有社区结构,对应的差异越大说明该社区划分越好。
Newman提出的模块度具有两方面的意义:
(1)模块度的提出成为了社区检测评价一种常用指标,它是度量网络社区划分优劣的量化指标;
(2)模块度的提出极大地促进了各种优化算法应用于社区检测领域的发展。在模块度的基础之上,许多优化算法以模块度为优化的目标方程进行优化,从而使得目标函数达到最大时得到不错的社区划分结果。
当然,模块度的概念不是绝对合理的,它也有弊端,比如分辨率限制问题等,后期国内学者在模块度的基础上提出了模块度密度的概念,可以很好的解决模块度的弊端,这里就不详细介绍了。
常用的社区检测方法主要有如下几种:
(1)基于图分割的方法,如Kernighan-Lin算法,谱平分法等;
(2)基于层次聚类的方法,如GN算法、Newman快速算法等;
(3)基于模块度优化的方法,如贪婪算法、模拟退火算法、Memetic算法、PSO算法、进化多目标优化算法等