时序的 GFD 发掘
约 1550 字大约 5 分钟
2023-11-22
时序的 GFD 发掘(SEQUENTIAL GFD DISCOVERY)
我们将时间顺序的 GFD 发掘算法记作:SeqDisGFD。
这里面包含两个问题:
- SeqDis:给定 G,k 和 σ,发现一个 k-bounded 的,具备 σ 频繁的 GFDs 集合 Σ。
- SeqCover:给定 Σ,如何计算它的一个覆盖 Σc。
SeqDis
如果使用暴力枚举算法,首先根据传统图挖掘算法枚举出图 G 中所有频繁模式 Q,然后通过增加属性来生成 GFDs。但是这种枚举 k-bounded GFDs 的方法在图 G 非常大的时候代价很大。
为了降低代价,SeqDis 算法将这两个步骤合并为一个,可以尽早地淘汰不感兴趣的 GFDs。
算法在 k2 次迭代中运行。对于每个迭代 i,发现并存储所有的大小为 i(有 i 条边)且 σ 频繁的最小 GFDs 在 Σi 集合中。在最初的迭代中,初始化一个 GFD 生成树 T,存储只包含单点的模式的频繁 GFDs。之后通过两个方向的扩展来扩展这个树:
- 垂直扩展:扩展模式 Q。
- 水平扩展:生成依赖 X→Y。
每次迭代 i(0<i<k2),SeqDis 生成并证实 GFD 的候选项,并填充在树 T 的第 i 层。具体的操作为下面的两个步骤:
模式证实。
SeqDis 算法先进行垂直扩展。在 T 的第 i 层生成一个新的图模式。而每个图模式 Q′ 都是由第 i−1 层的模式 Q 通过扩展一条边(或者一条边和一个新点)得到的。然后通过模式匹配找到第 i 层所有模式的匹配。
GFD 验证。
算法随后进行水平扩展,将一组属性与 T 的第 i 层上新验证的图形模式关联起来,以生成一组 GFD 候选项。对于每一组候选项,执行 GFD 验证去找到 Σi 中的 GFDs,即第 i 层上满足 G,并且是频繁的,并且是最小的 GFD。验证过程一致持续到第 i 层的模式相关的所有的GFD候选项都被验证过。
这两个步骤不断迭代知道没有新的 GFDs 可以被生成,或者所有的 k-bouned GFDs 都被遍历过。
接下来详细介绍垂直扩展和水平扩展,算法的核心就是如何维持用来保存 GFD 候选项的生成树。
生成树
树 T=(VT,ET) 控制着 GFD 候选项的迭代。
每个在 T 的第 i 层的点 v∈VT 都存储着一个元组 (Q[xˉ],lvec)。其中:
- v.Q[xˉ] 是一个拥有 i 个边的图模式。
- v.lvec 是一个向量,每个条目 levc[l] 存储着一个以属性 l 为根的属性树。此时,l 是 x.A=c 或者 x.A=y.B,其中 x,y∈xˉ,且 A,B 是 Γ 中的属性,c 是 G 中的常量。
每个第 j 层的点的 levc[l] 是一个属性集合 X,使得 Q[xˉ](X→l) 是一个 GFD 的候选项。对于一个属性 l′ 来说,如果 X1=X2∪l′,则 v.levc[l] 中有一个边 (X1,X2)。
每个点 v(A[xˉ],lvec) 拥有一个边 (v,v′)∈ET 连接到另一个点 v′(Q′[xˉ],lvec′) 如果 Q′ 是由 Q 扩展了一条单边形成的。

上图就是一棵 GFD 生成树 T,展示了前文中提到过的两个 GFD,分别是:
- GFD φ1=Q1[x,y](y.type=film→x.type=producer)。
- GFD φ4=Q′1[x,y,z](x.type=producer,z.name=Academy best picture→y.type=film)。
该生成树就只有两个节点,第一层的节点存储了 v(Q1,Q1.lvec),其中 Q1 是节点左边展示的图模式,Q1.lvec 则是一个以 x.type=producer 为根的树,相当于将 φ1 的函数依赖存储到一棵树。第二层的节点存储了 v(Q1′,Q1′.lvec),而 Q1′.lvec 以 y.type=film 为根节点。
因为 X′′ 是由 X′ 扩展一个属性得来的,即 X′′=X′∪z.name=Academy best picture,所以 X′ 和 X′′ 之间存在一条边。又因为 Q1′ 是通过给 Q1 增加一条 y→z 的边得到的,所以 Q1 到 Q1′ 有一条边。
注
对于第 i 层的 φ=Q[xˉ](X→l),长度 ∣X∣ 最大为 J=i∣Γ∣(∣Γ∣+1),其中 Γ 由 G 中的属性组成。
GFD 扩展
生成树 T 通过不断执行下面的两个原子操作来生成新的 GFD 候选项。
垂直扩展(VSpawn)
垂直扩展操作 VSpawn(i) 会在第 i 层通过在第 i−1 层的 v.Q 的基础上增加一条边 e 来生成新的点 v′.Q′。它通过增加边 (v,v′) 到 T,使得 T 在垂直方向上扩展。
显然 VSpawn(i) 新增了一种图模式到 T,当 1≤i≤k2。对于第 i−1 层的每一个 GFD φ=Q[xˉ](X→l) 来说,它通过增加一条边到 Q 来生成模式 Q′。例如图 3.1 中 Q 进行垂直扩展,增加边 e=(y,z) 从而得到 Q′。
水平扩展($HSpawn)
水平扩展通过属性和约束来生成字段。具体来说,HSpawn(i,j) 在 T 中的第 i 层,字段树的第 j 层执行。例如图 3.1 中 HSpawn(2,j) 就是发生在第 2 层的新图模式上。HSpawn(2,2) 通过增加 z.name=Academy best picture 将 level j=1 的 X′ 扩展到 level j=2 的 X′′。
剪枝
- 当验证 G⊨Q[xˉ](X→l) 时,水平扩展终止。
- 当 supp(Q,G)<σ 时,垂直扩展终止。
这两条策略可以保证 GFDs 发现在实际应用时的可行性。
引理 4
对于一个支持度高于 σ 的 GFDs 覆盖集 Σc:
- Σc 不包含任何的平凡 GFD。
- 对于任意的 φ=Q[xˉ](X→l),如果 G⊨φ,则 Σc 不包含 φ′=Q[xˉ](X′→l) 如果 X⊆X。
- 如果一个 GFD φ=Q[xˉ](X→l) 满足支持度 supp(Q,G)<σ,则 Σc 不包含 φ′=Q[xˉ](X′→l) 如果 Q≪Q′。