参考文献:http://blog.csdn.net/cleverlzc/article/details/39494957
Gephi 是一款网络分析领域的可视化处理软件,可以用于数据分析,链接分析,社交网络分析等。
标签传播算法LPA(Label Propagation Algorithm)最早是针对社区发现问题提出时的一种解决方案。
主要优点有:时间复杂度(近似线性),不需要事先知道社区数量。
主要算法流程:首先为每个节点设置唯一标签,接着迭代依次更新各个节点,针对每个节点,通过统计节点邻居的标签,选择标签数最多的标签更新该节点,如果最多便签数大于一,则从中随机选择一个标签更新该节点,直到收敛为止。
标签传播算法的节点标签更新策略主要分成两种,一种是同步更新,另一种是已不更新。
其中同步更新:在执行第t次迭代更新时,仅依赖第t-1次更新后的标签集。
异步更新:在执行第t次迭代更新时,同时依赖t次迭代已经更新的标签集以及在t-1更新但t次迭代 中未来的及更新的标签集,异步更新策略更关心节点更新顺序,所以在异步更新过程中,节点的 更新顺序采用随机选取的方式。
LPA算法适用于不重叠社区发现,针对重叠社区的发现问题,学者提出了COPRA(Community Overlapping Propagation Algorithm)算法。该算法提出所有节点可以同时属于V个社区,V是个人为设定的全局变量,很显然v的选择直接影响算法的效果,针对v的选择需要足够的先验知识,在真实的社区网络中,v的选择不能很好的被控制。
SLPA(Speaker-listener based information propagation algorithm)算法引入了Listener和Speaker两个形象化概念,在标签更新过程中,待更新的节点我们称为Listener,该节点的领域节点我们称为Speaker,因为Listener最终的标签属性是根据这些Speaker所决定的。
在LPA中,把局域节点中最多标签数的标签赋予该节点,但这是一种更新规则,在SLPA中有多重更新策略规则。
基本算法流程和LPA相同,不同点:在SLPA中为每个节点设置了一个历史标签队列,该队列记录了t次迭代以来,该节点被赋予的标签。直到迭代结束后,对每个节点的历史标签队列进行统计,标签频率超过一个给的的阈值ρ的所有标签就是该节点所属的多个社区。
SLPA算法中涉及一个重要参数ρ,如果ρ的取值为1,则SLPA算法退化成非重叠社区。
HANP(Hop Attenuation & Node Preference)算法,其基本思想为:
①为每个标签引入score值来对该标签的传播能力进行评价,score值随着传播距离的增加而减弱。
score衰减规则:
其中δ 表示衰减因子(hop attenuation),δ 等于0的时候停止传播
②每个节点通过领域节点更新标签时的规则δ 根据丰富(会综合考虑标签的传播能力score值、标签出现频率、标签的度等)
标签更新规则:
BMLPA算法主要思想:
提出平衡归属系数概念,即对于每个节点其归属的社区数不限,但对同一节点的标签局域平衡归属系数。
标签更新:待更新标签的领域标签均由一个二元组序列与之对应,二元组的第一项表示标签类别,第二项表示节点属于该类别的隶属度,对于每个节点,所有隶属的之和为1。
①按照类别统计所有领域中的节点标签和隶属度,得到领域中的所有标签,和标签对应的隶属的之和。
②归一化A:将统计后的标签-隶属度序列中对大隶属度值除以所有标签的隶属度,得出一组隶属度最大值为1的标签-隶属度序列。
③筛选:将标签-隶属度序列中小于阈值ρ的标签剔除出去。
④标签更新:归一化B,为了保证最后得到标签-隶属度序列中所有隶属度和为一,将所以标签的隶属度除以所有标签隶属度之和。最后把得到标签-隶属度二元组赋值给待更新的标签。
Fast Unfolding算法
该算法是一种基于modularity optimization的启发式方法。
算法步骤,主要分成两个步骤:
①首先把每个节点赋予一个唯一的社区,然后对所有的节点依次实行聚合,将待聚合的节点找到其所有的领域,依次把该节点聚合到领域节点中,计算modularity值,将节点最终聚合到modularity值最大的那个邻居节点中,反复迭代,直到所有节点都不能改善modularity值为止。
②将第一阶段生成的社区网络中的所有社区看成“节点”,因为新“节点”中包含多个节点,所有两个“节点”间需要有权重,权重采用两个社区间个边的权重总和。
DCLP(Distance-Control Label Propagation)算法,由HANP算法简化而来,只考虑标签传播过程中的衰减因素,并使用距离dis_allowed代替δ,通过该参数可以有效控制标签的传播范围。
AM-DCLP算法对原图进行DCLP算法运算,但得到的某些社区规模较大时,则将它们对应的子图再继续执行DCLP算法。
两个控制参数:
maxC_allowed:社区规模的最大值
break_down_allowed:允许调用DCLP算法的基数
SDCLP算法:每次DCLP算法迭代后,对所有的社区进行检测,若社区的规模足够大,则终止迭代,否则继续迭代。
优点:及时的终止可以有效的反正大社区的出现,同时过小的社区通过迭代可以得到从发的发展。