分为非重叠社团检测算法(传统社团检测算法)和重叠社团检测算法,非重叠检测算法的社团相互独立,
一 非重叠社团检测算法
1.1基于图分割的方法 K-L
划分前需要指定划分社团大小,基于贪心策略,通过增益峰值分为两部分
步骤:1.随机分成两个社团;
2.分别从两个社团各取一个节点,计算增益值,分别取出让两个节点增益值最大节点对,交换;
3.每个节点只交换一次,所有节点重复执行第2步,
4.指导函数增益值小于0,或者某一子图中所有节点都完成交换。
1.2基于谱分析的方法
根据节点合适的特征值为样本,计算节点间相似性并完成节点拓扑结构的分析,实现社团划分。
基于拉普拉斯矩阵的算法步骤:
1.D:度矩阵(节点度形成的对角矩阵),A:邻接矩阵,L:拉普拉斯矩阵,L=D-A
2.L取最小的K个特征值及其关联的特征向量
3.K个特征向量按序排列并按行标准化,构造新的特征向量矩阵
4.聚类算法对特征向量矩阵聚类,划分社团
特点:1稀疏图,2需要合适的相似度图,否则不稳定,3存储大,可以通过动态增量采样发得到近似特征向量(依照数据不同的概率分布进行采样)
1.3 基于图动力学-随机游走策略
随机遍历节点,再由底到顶合并
MCL算法步骤:
1.初始化邻接矩阵,添加自还,
2.按列标准化邻接矩阵->转移矩阵
3.扩张操作:转移矩阵计算e次幂
4.膨胀操作:转移矩阵中各个元素值计算r次幂
5.迭代3,4至转移矩阵收敛
Infomap,Infohiemap,Scalable random walks,PPC
1.4基于层次划分
层次据类主要分为凝聚算法和分裂算法
分裂算法自顶向下,开始整个网络作为一个社团开始,不断去除连接低相似度指标的边,最终形成一个树状图。切割树状图来发现社团。
GN算法基于边介数(穿过最短路径的数量),每次迭代删除具有最大边介数的边,然后重新计算重复去除边,直到边没有剩余,特点:精度高,计算边介数复杂,使用小型网络
GN算法步骤:
1.计算所有边的边介数
2.去除边介数最大值关联的边
3.重复计算边介数,迭代至所有边被去除
FastQ算法:开始每个节点作为一个社团,根据相似度指数合并最接近的一对社团,最终取最大模块度所对应的社团划分作为最终划分结果
FastQ算法步骤:
1.每个节点作为一个社团,
2.合并后计算模块度增量
3.选择使模块度值增量最大或减量最小对应两个社团进行合并
4.迭代2,3步至合并为一个社团
特点:稀疏网络效率低下->CNN
CNN算法步骤:
1.每个节点作为一个社团,
2.求模块度增量矩阵
3.从最大堆中选取最大模块度增量,合并其关联的社团,更新模块度矩阵
4.迭代2,3步至合并为一个社团
1.5基于信息传播(标签传播)
LPA算法:基本思想是利用已有标签的节点来影响未有标签的节点,步骤:
1.初始化每个节点作为一个社团并制定唯一的标签
2.更新所有节点的标签,选取其邻居节点数值最大对应的标签为当前节点的标签
3.迭代2直到达到指定ji所有节点标签保持不变
4.同种标签对应的节点隶属于同一社团
更新标签分为同步和异步两种,同步更新更加稳定,但容易在二分类网络中出现标签摇摆的问题,LPA算法采用的是异步更新。LPA算法具有近似线性的时间复杂度。
缺点:迭代更新过程中算法随机选取节点更新标签,随机性会导致算法不稳定且多次运行后得到的结果不唯一。->模块度优化与标签传播思想结合->LPAm算法(时间复杂度O(mlogn方))->结合同步和异步模型的SSLPA算法
解决LPA算法随机性问题->CLPA-GNR算法(社团结构薄弱的网络中无法将社团结构成功划分)->基于CLPA-GNR的SSCLPA算法(基于Sorensen-Dice指数的相似性系数检测初始化社团,将已分配节点同步更新策略和未分配节点混合更新策略)
1.6基于模块度优化
模拟退火,谱优化,主要用启发式的方法在NP-hard社团检测问题中找到模块度Q的最佳值,代表为BGLL,缺点会造成一个或多个社团很大,步骤:
1.节点作为社团,社团数目即为节点数目
2.依次尝试将当前处理的节点分配至其邻居节点所在的社团,将节点分配至模块度增量最大的邻居社团,否则当前节点保持不变
3.迭代2,直到节点所属社团保持稳定
4.将属于同一社团的节点作为统一个体,刷新网络整体结构
5.迭代2,直到网络模块度保持不变
SLM算法基于BGLL, 3)完成后,划分结果再次使用BGLL算法使社团规模变得更小,4)将所得到的小社团作为网络中的节点再构建新网络,SLM算法通过划分社团或节点的交换不断寻找可以增加模块度的机会,执行更多的迭代划分获得社团结构质量的进一步提升。
二 重叠社团检测算你发
2.1基于派系过滤的方法
CPM算法步骤:
1.初始化k代表派系大小,网络中搜索大小k的派系形成矩阵,矩阵的元素代表派系间(社团间)的公共节点数
2.矩阵中非对角线元素小于k-1,对角线元素小于k的所有项设为0,其余元素设为1,修改后对角线1代表派系,非对角线1代表临近社团,从而得到社团划分
缺点:不能对社团之外的节点划分社团->CPMw算法,SCP算法,使用一种序列化处理方法,可以用于有权和无权网络
2.2基于边聚类的方法
通过对边进行社团划分来实现对重叠社团的检测,算法步骤:
1.初始化每条边作为一个社团,
2.采用jaccard系数计算相邻边之间的链路相似性,形成矩阵
3.根据矩阵进行层次据类,得到树状图,分区密度度量来确定最佳社团检测结果
缺点,忽略了非相邻边之间的相似性->替换LC中相似性系数,基于扩展链路聚类的ELC算法(该算法计算扩展链路相似性ELS,得到变换矩阵,使用扩展模块度EQ指标作为切割层次划分树的依据,从而找到最佳的划分结果)
2.3基于层次划分的方法
CONGA再GN基础上改进,提出节点分裂介数(若节点被分裂为两个新的节点,节点分裂介数为网络中所有节点对最短路径通过这两个节点的数目)的概念,用以代替GN算法中的边介数,算法步骤:
1.计算边和节点介数和分裂介数
2.删除分裂介数最大的边,保留其余的边和节点
3.再次计算边介数和分裂介数
4.重复2,3直到无边
缺点:如果一个网络的节点分裂介数较低,时间复杂度O(n三次方)->Peacock,通过预设即将分裂节点的范围,通过迭代寻找网络中具有最大分裂介数的节点,使其分裂,当该值降低到阈值之外时,算法结束。->CONGO,加入短路径计算,即算法首先得到短路径的数量,依据短路径数量指导网络中边介数和分裂介数的计算,短路径数量e不可以超过算法中参数h。
2.4基于局部扩张
基于适应度函数的LFM算法
算法步骤:
1.随机寻去一个节点A,检测包含A的自然社团
2.随机选取一个尚未分配给任何社团的节点B,检测包含B的自然社团,检测过程中不管其邻接点是否属于其他社团
3.迭代2,直到所有节点你都至少被分配到一个社团
缺点:重复计算适应度值->GCE,将不同社团假定为种子节点,采用贪婪策略和局部适应度指标对种子进行扩展,NDOCD,利用节点聚类指标来识别网络中的社团,并对这些社团进行以删除边的方式来迭代的分割网络
2.5基于信息传播
LPA基于信息传播,但无法检测重叠社团->COPRA提出节点携带信息(C,B)C表示社团,B表示该节点位于社团C中隶属度,任意节点B隶属度之和为1,步骤:
1.初始化,节点作为社团,每个节点隶属度为1
2.节点根据相邻节点传递的标签决定赋予该节点标签的内容,选取所占标签比例较高者,当该值不仅有一个时,任选v个标签更新,v为算法初始时自定义的参数
3.直到算法运行结果稳定时终止,否则返回2
BMLPA取消了COPRA中对所属社团数的限制,SLPA算法是对LPA算法的扩展,算法为每个节点建立一个标签存储列表,长度由给定的最大迭代次数限制,标签传播过程中,对列表进行处理,列表中满足所设定阈值范围内的标签进行保留,其余标签删除,最终得到每个节点的标签列表,若列表标签有多个,该节点是重叠节点,->HLPA算法使用混合更新提高标签传播效率,同时避免出现再二分图或近似二分图中的标签摇摆现象,还基于RDD数据结构Dpark实现,更易并行化。