社区发现算法总结

图划分指将网络顶点划分为指定规模,指定数量的非重叠群组,使得群组之间的边数最小。图划分时,群组的数量和规模是固定的。
社区发现不同于图划分的是网络群组的数量和规模不是由实验者确定的,而是由网络本身确定的。社区发现的目的是找到网络内部把不同群组之间的分割线。
图划分和社区发现另一个差异是目的不同,图划分用来将网络划分成多个更小,更易管理的单元;社区发现则用来了解网络结构,发掘网络中不易观察的连接模式。

传统的社区发现算法
传统的社区发现算法包括图分割算法,层次聚类算法,分割式聚类,谱聚类等。
图分割算法将社区发现问题定义为将网络中的节点分配到g个已经预先定义好规模的社区中去,并使处在社区间的边数最小。社区间的边数称为割值(cutsize)。图分割算法必须提前指定社区的个数及社区的大小规模。如Kernighan-Lin算法。
层次聚类算法假设社区可能是不同级别的小社区的集合,该类算法目的是识别出具有较高相似度的节点集合,识别图中的多级社区结构,它有两种类别:凝聚算法,不断合并相似度较高的节点,凝聚算法是自底向上进行的;分裂算法,不断地移除相似度较低的节点对之间的边,分裂算法是自上而下进行的。
分割式聚类算法是一种聚类算法,需要提前指定聚类的个数k。将每一个节点映射到一个度量空间中去,为一个节点对指定一个空间距离函数表示了节点之间的相似度。算法的目的就是将节点分到k个非重叠聚类中。
谱聚类算法是将一些初始的节点集合转移到样本空间中去,这种转换可以使原始节点集的聚类属性更加明显。Donath和Hokmann利用邻接矩阵的特征向量进行图分割,同年Fiedler 提出拉普拉斯矩阵的第二小特征值对应的特征向量可以对网络进行有效具有的且具有更小割值的二分割。

基于分裂的算法
分裂算法即将处在两个社区之间的边检测出来并将其删除,以使社区与社区彼此不相连。分裂算法和分裂聚类的思想比较相似,只不过前者是直接在图上进行边的切边,而后者则是基于节点表征向量的相似度进行节点自下而上的合并实现的。
GN算法就是分裂算法,通过使用边介数值的方法来挑选社区间的边。他们考虑了三种不同的边介数定义:边介数(Edgebetweenness)、随机游走介数(Random-walkbetweenness)、电流介数(Current-flow betweenness)。边介数指的是所有节点对间的经过这条边的最短路径总个数。随机游走介数是指一个随机游走者在沿着网络结构运行时经过这条边的频率。电流介数就是边的电流均值,将网络当作一个电路网络,每个边之间都有单位电阻,如果在某一节点对加上电压差,每个边就会有一对应的电流值。

基于模块度的算法
模块度最优化算法是基于较高的模块度值对应较好的网络划分这一假设。但模块度最优化是NP完全问题,我们将重点介绍三种常用的近似最优算法:贪心技术、模拟退火、极值最优。
第一个模块度贪心优化算法是Louvain算法,算法首先将所有的节点当作孤立的节点,然后不断地将两个节点合并,以使模块度不断增大。Louvain算法是一种启发式贪婪算法,将算法流程分为合并社区以及重构网络两个过程。它为每个顶点指定不同的社区;每个顶点一个。它根据模块化的增益迭代地合并节点。若没有增益,那么这个节点将保留在它自己的社区中。重复该过程,直到模块度增益不再增加。然后,它以超级节点取代第一阶段确定的社区的方式重建网络继续第二阶段的迭代计算。依此类推 。由于该算法只使用网络局部信息,因此算法复杂度很低适用于大规模网络的社区发现。
模拟退火算法是一种概率化最优化过程,该算法包含两类移动过程:局部移动,随即挑选节点然后再从一个社区交换到另外一个社区;全局移动,将社区进行合并或者分割。该方法的结果非常接近真实的模块度最优值,但是复杂度很高,只能在节点个数小于104的网络上使用。

重叠社区检测技术。大多数节点可能同时属于多个社区。传统的社区检测技术无法识别重叠的社区。Clique percolation 是用于识别网络中重叠社区的最著名技术。它基于这样一种观点,即cliques更可能由紧密连接的内部边形成,而不是由稀疏连接的外部边形成。社区由k-cliques 组成,k-cliques 指的是具有k个顶点的完整子图。如果两个clique共享k-1个节点,则认为它们相邻。k-cliques社区是由所有相邻的k-clique组成的。
该类别还有标签传播算法。在一个同步的状态下,系统中的单元处于相同或者相似的状态。标签传播算法也可以应用到社区发现上来,Raghavan将网络中的节点赋予单一标签,然后根据传播规则来更新自身标签,提出LPA算法。

动态社区检测算法,随着时间流逝的过程中动态更新顶点的社区划分。采用随机游走来识别社区。在随机行走中,步行者从一个节点开始在社区内行走,并在每个时间步移动到随机均匀选择的相邻节点。由于高密度和多条路径,步行者在密集的社区内花费了很长时间。基于随机游动的最流行技术的例子有PageRank算法、WalkTrap和Infomap。复杂网络中的扩散社区是一组节点,通过网络中相同属性、行为或信息的传播而组合在一起。这一类别的例子包括标签传播和动态节点着色。

具体算法介绍

Kernighan-Lin算法
先以任意方式将网络顶点按指定规模划分为两个群组,然后,对于任意一对不属于同一分组的节点对,交换两个节点,计算交换前后两个群组割集规模的变化量。在所有节点对中找到使割集规模减少最多的顶点对。如果没有使割集规模减少的定点对,在选择使割集规模增加最小的节点对,然后交换两个节点。重复该过程,被交换过的节点不再参与交换,直到没有可以交换的顶点为止。记录所有交换后的状态,选择割集规模最小的状态。重复上述步骤,每次初始的划分为上一次得到的最优网络划分,直到割集规模不再改善,最终得到的划分就是最后一轮最优割集规模划分。

clique渗透算法(Clique percolation)
对于一个图G而言,如果其中有一个完全子图(任意两个节点之间均存在边),节点数是k,那么这个完全子图就可称为一个k-clique。如果两个k-clique之间存在k-1个共同的节点,那么就称这两个clique是“相邻”的。彼此相邻的这样一串clique构成最大集合,就可以称为一个社区(而且这样的社区是可以重叠的,即所谓的overlapping community,就是说有些节点可以同时属于多个社区)。

GN(Girvan-Newman)算法
GN(Girvan-Newman)算法,是一种基于图割(graph cut)思想的社区发现算法,利用边介数来标记每条边对网络连通性的影响。边的边介数是指网络中通过这条边的最短路径的数目。社区一般指内部节点连接稠密而社区之间连接稀疏。社团间连边的边介数比较大,因为社团间顶点对的最短路径必然通过它们;而社团内部边的边介数则比较小。如果找到边介数比较大的边并移除,网络中的社区自然就分割出来了。
GN算法的基本流程
(1)计算网络中各条边的边介数;
(2)找出边介数最大的边,并将它移除(如果最大边介数的边不唯一,那么既可以随机挑选一条边断开也可以将这些边同时断开);
(3)重新计算网络中剩余各条边的边介数;
(4)重复第(2)和(3)步,直到达到预定的迭代次数或者其它停止条件(例如模块度的大小的增大与否可以作为其停止条件)。
每一次迭代,GN都要计算所有节点间的最短路径(移除当前边介数最大的边之后网络的结构发生变化,需要重新计算),其计算复杂度高。

LPA(标签传播)算法
标签传播的思想很简单,在图上越靠近的节点之间越可能是相似的节点。每个节点会把邻居节点中标签最多的标签信息更新为自己的标签。
该算法的工作原理如下:
1 每个节点都使用唯一的社区标签进行初始化。
2 利用这些标签通过网络传播。
3 在传播的每一次迭代中,每个节点都将其标签更新为其最大邻居数所属的标签。
4 当每个节点都具有其邻居的多数标签时,LPA 达到收敛。
5 如果达到收敛或用户定义的最大迭代次数,则 LPA 将停止。
随着标签的传播,密集连接的节点组很快就唯一标签达成共识。收敛时具有相同社区标签的节点被认为属于同一个社区。

louvain算法
模块度的定义(模块度的定义由于当时研究的图类型的不同而一直发生变化)
定义一,社区内边数的比例(社区边数/网络总边数)-社区内节点产生边数的期望(随机网络下同样的社区的期望边数)
定义二,社区内节点的连边权重和与对应随机图中的连边权重和的差,可以理解为社区内边权重之于社区间边权重的比例,当然,社区内边权重越大,则模块度越大,社区中节点联系更加紧密,社区划分质量越好。
社区发现算法总结_第1张图片
社区发现算法总结_第2张图片

通俗来讲,模块度的物理含义是社团内,实际的边数与随机情况下的边数的差距。如果越大,说明社区内部密集度高于随机情况。
社区发现的好坏一种评价标准是和随机图比较。随机图指的是图中节点和边的数量不变,把节点之间连接关系随机打乱。一个图如果不像随机图,那可能存在社区。
louvain中的模块度公式如下
社区发现算法总结_第3张图片
在带权网络中,ki为与节点i所连的边的权重和,Aij为边的权重值,m则为所有边的权重和。节点j连接到任意节点的概率为kj/2m,因此,度为ki的节点与节点j之间的边的概率为ki * kj/2m。模块度公式可进一步简化:
社区发现算法总结_第4张图片
Σin是社区c内部边的权重和;Σtot是整个随机图中与社区c内节点相连的边的权重和

模块度就可以理解为社区内部边的权重减去所有与社区节点相连的边的权重和,无向图中则表示为社区内部边的度数减去社区内部节点的总度数。

Louvain是一个迭代更新算法(初始每个节点自成一个社区),不断迭代以下两个步骤。
1)步骤1:首先,为每个节点分配一个单独的社区。其次对于每个节点i,考虑其邻居j,计算将节点i归入节点j所在社区模块度的增益。考虑节点i的所有邻居,并且将节点i归入到模块度增益的社区最大。如果节点i归到他邻居所在社区都没有模块度增益(即模块度增益为0或者负数)的话,那节点i仍然留在他原始的社区中。这个过程反复做,直到改变任何节点的社区标签都没有更进一步的模块度增益就停止。
模块度增益计算

在这里插入图片描述
在这里插入图片描述

括号中第一项的意思可以理解为节点i加入邻居所在社区之后对应社区内的连边数。括号中第二项的意思可以理解为结点加入邻居社区后,对应社区间以及社区内的连边数。最大化该模块度增益,就是最大化这个差,这个差大了,就说明节点i加入到这个邻居社区之后,使得该社区的内聚度更高了,社区结构越明显了。

(2)步骤2:算法的第二阶段做的事情是,结合步骤1得到的初始社区划分建立一个新的网络,新网络的节点是在第一阶段发现的初始社区(把社区粗化成一个粗化节点),两个粗化节点之间的边由两个社区原始对应的社区间边的权重和(无向图即两个社区间相连的边数),同一社区节点之间的连边权重生成这个社区粗化节点的一个自环边。一旦完成了第二阶段,就将构成的新的网络输入第一阶段再进行迭代(因为粗化(层次的概念),每次网络中的初始社区数会变小,因此后面迭代的速度会更快)。
经过Louvain算法计算后的社区,是一个多层次的结构

infomap
旨在解决有向有权图上的社区发现问题。作者从信息论的视角出发,将有向有权图上的社区发现问题转化为随机行走产生路径的最小编码问题。InfoMap本质的优化目标是通过最小化熵来寻求最优的聚类方案。信息熵就等价于平均编码长度,所以最小化熵事实上就是在寻找更好的压缩算法,达到最短平均编码长度。

类比于记忆一个序列的过程,虽简单的方式是按类别分组记忆,使系统熵降低。而Infomap的目标就是最小化熵来寻求最优的聚类方案。借鉴这种分组思想使熵降低的编码方式就是层次编码。层次编码能更有效地压缩信息。所谓层次编码就是用两个(也可以更多个)编码的组合来表示一个对象,其中第一个编码代表对象的类别,第二个编码则代表它在类内的编号。在描述某个群组内部的一段随机游走路径的时候,总是以群组名的编码开头,以跳出编码结束。在给定编码方案后需要计算平均编码长度。层次编码最短平均编码长度等于类的平均编码长度和类内对象的平均编码长度的加权和L(M),M为节点总数。因此,在给定一个序列后,可以通过最小化L来为该序列中的对象聚类。

InfoMap的聚类过程为通过构造转移概率,在图上进行随机游走来生成序列,在通过对序列做层次编码,最小化目标从而完成聚类。
Infomap 算法的大体步骤如下
初始化相关参数,包括超参数随机跳转概率等,将每个节点都看作独立的社区。
使用随机游走对图里面的节点进行采样,得到一个序列,并且尝试按顺序把节点赋予和当前节点直接相连的邻居节点所在的社区,计算L(M)的值,并且取L(M)下降最大的那个社团作为当前节点的社团,如果L(M)没有降低,则当前节点的社区还是它本身。
反复进行步骤2后,直到L(M)无法继续变化。

社区算法评价指标
社区发现的3个评估指标:标准化互信息NMI,ARI指标,以及模块度(modularity)
参考
社区发现算法综述 - 知乎 (zhihu.com)
Community Detection 算法_皮果提的博客-CSDN博客_community detection
网络算法系列之社区发现(二):模块度 - 掘金 (juejin.cn)
“您可能认识的好友”是怎么被检测出来的:社区发现与Louvain算法 - 知乎 (zhihu.com)
最小熵原理(五):“层层递进”之社区发现与聚类 - 科学空间|Scientific Spaces (kexue.fm)
社区发现算法问题&&NetworkX&&Gephi - nolonely - 博客园 (cnblogs.com)
louvain__Fast unflod of communities in large networks
InfoMap__Maps of random walks on complex networks reveal community structure
Encoding dynamics for multiscale community detection: Markov time sweeping for the map equation
efficient community detection of network flows for varying markov times and bipartite networks
Network_Community_Detection_A_Review_and_Visual_Survey

你可能感兴趣的:(图论和图神经网络,数据挖掘,算法,聚类,机器学习)