动态社区发现

属于这一类的算法生成的社区会随着时间的推移而演变。

动态算法的组织方式类似于[Rossetti18]中提出的分类法

  • 即时优化,

  • 时间权衡

有关提取和操作动态社区的可用方法的详细信息,请参阅TemporalClustering文档。

即时优化

第一类方法直接来源于将静态社区发现方法应用于动态情况。 使用一系列步骤来模拟网络演化,并为每个步骤确定一个最优分区。 通过指定连接在不同(可能是连续的)时刻发现的拓扑结构的关系,从这些最优分区中定义动态社区。

cdlib 实现了一种模板化方法,将每个静态社区发现算法转换为遵循标准两阶段方法的动态算法:

  • 识别:在演化的每一步检测静态社区;

  • 匹配:在每一步中,将在步骤t找到的社区与在步骤t − 1找到的社区对齐。

这里是一个基于动态快照序列图的Louvain分区的两步示例(其中每个快照都是一个LFR合成图)。

from cdlib import algorithms
from cdlib import TemporalClustering
from networkx.generators.community import LFR_benchmark_graph

tc = TemporalClustering()
for t in range(0,10):
    g = LFR_benchmark_graph(n=250, tau1=3, tau2=1.5, mu=0.1, average_degree=5, min_community=20, seed=10)
    coms = algorithms.louvain(g)  # here any CDlib algorithm can be applied
    tc.add_clustering(coms, t)

关于第二阶段(快照的节点聚类匹配),请参考cdlib文档中的Community Events and LifeCycle部分。

时间权衡

属于时间权衡类别的算法迭代处理网络的演化。 此外,与即时最优方法不同,它们考虑网络和在前一步骤(或前n步)中发现的社区,以识别当前步骤中的社区。 属于这一类的动态社区发现算法可以通过一个迭代过程来描述:

  • 初始化:为网络的初始状态找到社区;

  • 更新:在步骤t使用图t和过去的信息为每个传入步骤找到社区。

目前 cdlib 包含以下时间权衡算法:

tiles(dg[, obs])

TILES 旨在逐步识别和更新流图中的社区。

[Rossetti18]

罗塞蒂、朱利奥和雷米·卡扎贝特。“动态网络中的社区发现:一项调查。”《ACM计算调查》(CSUR)51.2(2018):1-37。