Densest Subgraph Discovery on Large Graphs

CUHKSZ PPT

无向图上的密集子图

对于一个无向图$G(V,E)$,图的密度就是边的密度,即
$$
\rho (G) = \frac{\lvert E \rvert}{\lvert V \rvert}
$$

那么,最密子图挖掘就是找到密度$\rho(G)$最大的子图

目前对于这种DSD问题的exact solution有两种:

  • 基于最大流的算法
  • 基于线性规划的算法
    当然还有一些其他approximation solution和DSD问题的变种

Maxflow-based Algorithm

二分+网络流最小割

二分最大密度 $\rho$ 从 $0$ 到 $m$
每次建立超级源点和超级汇点跑网络流最小割来判断 $\rho$ 是不是合法的

LP-based Algorithm

Original LP

$S$是点集,$E(S)$是其边集

$x_v=\frac{1}{\lvert S \rvert}$ 表示节点 $v$ 属于点集 $S$,$y_e=\frac{1}{\lvert S \rvert}$表示边 $e$ 属于边集 $E$

$$
\text{maximize }\sum_{e \in E}y_e \\ \\
\text{subject to }y_e \leq x_u, x_v, \forall e = (u, v) \in E \\
\sum_{v \in V} x_v \leq 1 \\
x_v, y_e \geq 0, \forall e \in E, \forall v \in V
$$

Dual LP

$\alpha_u^e$是节点$u$从边$e$接收到的权重,例如:$\alpha_u^e = \frac{w_e}{2}$

$$
\text{min } \rho \\ \\
\text{s.t. } \rho \geq \sum_{e:u \in e} \alpha_u^e, \forall u \in V \\
\sum_{u \in e} \alpha_u^e \geq w_e, \forall e \in E \\
\alpha_u^e \geq 0, \forall u \in e \in E
$$

然后要用Frank-Wolfe算法来解决Dual LP问题,再用网络流算法来准确计算最大密度

有向图上的密集子图

对于一个有向图$G(V,E)$,图的密度是针对两个点集的,即
$$
\rho(S,T) = \frac{\lvert E(S,T) \rvert}{\sqrt{\lvert E \rvert \lvert T \rvert}}
$$

那么,最密子图挖掘就是找到两个点集$S’$和$T’$,使得其有最大密度

KClist++

A Simple Algorithm for Finding k-Clique Densest Subgraph in Large Graphs

概念

k-Clique:大小为k的团,其里面每一对子节点都有相应的边直接连接

k-Clique Density:k团密度,其在无向图$G(V,E)$中的定义为

$$
\rho(G) = \frac{\lvert \Psi \rvert}{\lvert V \rvert}
$$

期中$\Psi$表示$G$中所有k-Clique的集合,$\lvert \Psi \rvert$则表示$G$中k-Clique的数量

k-Clique Densest Subgraph:k团最密子图,即k团密度最大的子图。其在k=2的时候是最基础的最密子图(DSD),在k=3的时候是有最多平均三角形数量的子图

核心思想

我们针对每一个节点$u$给一个分数$r(u)$,初始化为0,然后在之后的每一次迭代里,我们都会根据边对这些分数进行一些操作,当迭代次数足够多的时候,我们会发现maximal k-clique densest subgraph会有更多的分数。这可以高效地分理出这些子图,而且仅具有线性的内存空间

KCCA

A Counting-based Approach for Efficient k-Clique Densest Subgraph Discovery

前置算法

Frank-Wolfe算法在CSD的应用

先给每一个节点$v$分配一个权重$r(v)$,初始化为包含$v$的k-Clique数量(除以k?)。然后在每次迭代里,对于每一个k-Clique,它找到最小权重的节点$v$,并更新这个节点的权重$r(v)$

CDS问题的CP公式

LP公式

$$
\text{LP}(G,k):\ \ \ \ \ \text{maximize} \sum_{C \in \Psi_k(G)} y^C \\ \\
\text{s.t.} \forall v \in C, y^C \leq x_v, \forall C \in \Psi_k(G) \\
\sum_{v \in V}x_v \leq 1 \\
y^C \geq 0, x_v \geq 0, \forall C \in \Psi_k(G), \forall v \in V
$$

Dual LP公式

$$
\text{DP(G, k)}:\ \ \ \ \ \min \max_{v \in V} r(v) \\ \\
\text{s.t.} r(v) = \sum_{C \in \Psi_k(v,G)} \alpha_v^C, \forall v \in V \\
\sum_{v \in C} \alpha_v^C = 1, \forall C \in \Psi_k(G) \\
\forall v \in C, \alpha_v^C \geq 0, \forall C \in \Psi_k(G)
$$

其中,$\alpha_v^C$是Clique $C$给它的一个节点$v$分配的权重,$r(v)$是$v$从所有包含其的k-Cliques中获得的权重和

核心思想

现有的基于枚举k-Clique的CDS挖掘算法在k变大时复杂度会变得巨大,所以作者团队就在思考能不能不枚举所有的k-Clique,而是通过计算k-Clique的数量来找CDS

通过深度解析Frank-Wolfe算法,作者团队发现在该算法的每次迭代中,$r(v)$的变化,可以通过包含$v$的k-Clique数量来计算,这可以极大的减少解决CDS问题的时间复杂度

In-depth Analysis of DSD

In-depth Analysis of Densest Subgraph Discovery in a Unified Framework

DSD的统一框架

Graph Reduction:简化图形,旨在在一个小的子图里定位出最密子图

VWU:Vertex Weight Update,更新T次迭代之后的节点权重

CSV:Candidate Subgraph Extract and Verify,基于节点权重分离候选子图,然后验证其是否在误差 $\epsilon$ 范围内,在的话终止迭代,否则继续更新参数

Efficient Algorithms for DSD

General Motif DS 了解通常模体最密子图

概念

$k$-Core:是指图G中的一个极大连通子图H,其中H的每个节点的度数至少为k

$(k,\Psi)$-Core:G的子图H中每个节点的度数至少为k,而且是个Clique

Motif/Pattern:模体,一般是具有某种固定特征的小图,比如说一个四边形就可以是一个Motif/Pattern

Isomorphism:同构,一个图 $G(V,E)$ 说是和一个模体 $\Psi(V_\Psi,E_\Psi)$ 同构,当且仅当存在一个映射关系 $\phi:V_\Psi \rightarrow V$,对于 $\forall v,v’ \in V_\Psi$,如果 $(v,v’) \in E_\Psi$,节点$v$的模体度数$\deg_G(v,\Psi)$是包含$v$的模体实例的数量,那么$(\phi(v),\phi(v’)) \in E$。简单来讲就是如果有两个点在$\Psi$里面有边直接相连,他们对应的点在$G$里面也要有边直接相连

Pattern-Degree:模体度数,给一个图$G

Pattern-Density:模体密度,即:
$$
\rho(G,\Psi) = \frac{\mu(G,\Psi)}{\lvert V \rvert}
$$
$\mu(G,\Psi)$是$G$里面的$\Psi$模体实例数量

Pattern Densest Subgraph:即模体密度最大的子图

核心思想

作者团队认为现有的DSD方法时间复杂度太高了,然后发现DS其实就定位在图的k-Core之间,通过寻找$(k,\Psi)$-Core来,可以快速准确地找到SDS

Scalable Temporal Motif DSD

Temporal Motif DS 了解时态模体最密子图

A New Dynamic Algorithm for Densest Subhypergraphs

DSD on Hypergraph 主要看定义

概念

Hypergraph:超图,与普通图一条边只能连两个点不同,超图中的一条边(称为Hyperedge,超边)可以同时连接任意数量的的节点,表示多元关系。超图的节点集跟普通图一样,都是$V={v_1,v_2,\dots,v_n}$,但是边集$E={e_1,e_2,\dots,e_n}$里的每个超边$e_i$表示的是V的一个子集,可以包含1个、2个或多个节点

Subhypergraph Density:子超图密度,对于一个图$G(V,E,w)$的子节点集合$U \subseteq V$,它的密度是:
$$
\rho_G(U) = \frac{\sum_{e \in E[U]}w_e}{\lvert U \rvert}
$$
如果没有权值的话,可以简化为:
$$
\rho_G(u) = \frac{\lvert E[U] \rvert}{\lvert U \rvert}
$$
其中,$E[U]$表示的是完全被节点子集$U$覆盖的超边集合

Distance-generalized Core Decomposition

H-Distance DS 主要看最密图定义

概念

$(k,h)$-Core:$h$-neighborhood $k$-core,是指图G中的一个极大连通子图H,其中H的每个节点至少有$k$个节点与其距离$\leq h$。通常我们说的$k$-Core可以认为是这里的$(k,1)$-Core

Distance-$h$ Densest Subgraph:在图$G(V,E)$中找到一个子图$S$,最大化其Distance-$h$密度:
$$
\rho_G(S) = \frac{\sum_{v \in S}\deg^h_{G[S]}(v)}{\lvert S \rvert}
$$
其中,$\deg^h_{G[S]}(v)$表示在子图$G[S]$中,节点$v$的$h$-hop度数,即$v$在距离其不超过$h$的节点的邻居数量

Scalable Large Near-Clique Detection in Large-Scale Networks via Sampling

Biclique DS 了解双团最密子图

概念

$(p,q)$-Biclique:$(p,q)$-双团,一个无向二分图$G(L \cup R, E)$,如果满足$\lvert L \rvert = p$,$\lvert R \rvert = q$且
$$
(u,v) \in E, \forall u \in L, \forall v \in R$$
我们认为其是一个$(p,q)$-双团

$(p,q)$-Biclique Density:$(p,q)$-双团密度,一个无向二分图$G(L \cup R, E)$,对于$S \subseteq L \cup R$,我们认为其双团密度是:
$$
\rho_{p,q}(S) = \frac{\mu_{p,q}(S)}{\lvert S \rvert}
$$
其中,$\mu_{p,q}(S)$是$S$中$(p,q)$-双团的数量

CCAS

Efficient k-Clique DSD: Towards Bridging Practice and Theory

Motivation

作者团队认为,现有的CDS算法,例如Enumeration-based的KCList++和SCTL,还有Counting-based的KCCA和PSCTL,在实际应用中,尤其是高密度大数据中的表现不尽人意。

核心思想

  • 找到一种缩图技巧
  • 利用现有的Counting-based算法发展出一种更高效的CDS算法

作者团队发现在SuperGreedy++的每次迭代中,节点权重的变化可以用k-cliques counting来计算,通常会比k-clique enumeration快很多。然后又设计出了一种非常少迭代的方法,比原来的S++要快很多。

除此之外,作者团队还设计出了一种高效算法,可以找到所有k的CDS,和找单个k的CDS速度很接近。

关于CDS的缩图,现有的两种缩图方法,k-core-based和k-clique engagement-based都有限制和缺陷。作者团队发现,大的k-clique一定由很多小的k-clique组成(遗传性),且数小的k-clique数量会比数大的要快很多,所以,作者团队提出了一种HCGR算法,用小的k-clique engagement去估计大的k-clique engagement。

Fast Local Subgraph Counting

一个非常高效的,计算在图$G(V,E)$中,每个节点所具有pattern $p$的数量(所具有表示$p$包含这个节点),称之为Loacl Counting。

概念

Homomorphism:同态,一个图$G(V,E)$和一个pattern $p(V_p, E_p)$,如果有一种映射$f:V_p \mapsto V$使得$\forall (u,u’) \in E_p, (f(u),f(u’)) \in E$,那么称其为同态。同态不一定要一一对应。可以$p$的多个点对应$G$的一个点。匹配简称homo-match。

Isomorphism:同构,在满足同态映射关系的同时还要单射,即一个$p$的点只能映射到一个$G$的点,要一一对应,而且不能出现一对多或者多对一。匹配简称iso-match。

Automorphism:自同构,可以理解为对称的情况。用$\text{Aut}(G)$表示自同构的集合,$\lvert \text{Aut}(G) \rvert$就表示自同构的数量。

Automorphism Orbit:自同构轨道,在自同构中,有对称关系的几个节点可以被算进同一个自同构轨道。用这个自同构轨道上的节点$o$表示一个轨道。

Local Subgraph的计算公式

$$
\lvert \text{SubG}_{p,o}(v) \rvert = \frac{\lvert \text{ISO}_{p,o}(v) \rvert \cdot \lvert \theta \rvert}{\lvert \text{Aut}(p) \rvert}
$$

其中,$\lvert \text{SubG}_{p,o}(v) \rvert$表示对于子图$p$中的一个节点$v$满足$f(o)=v$,它在$G$中的子图数量。它的数量不受自同构结构影响,所以要在同构子图数量上稍作计算。

$\lvert \text{ISO}_{p,o}(v) \rvert$表示对于子图$p$中的一个节点$v$满足$f(o)=v$,它在$G$中的同构子图数量。

注意,这两个$f$指的都是前面提到的映射关系,所以就是Local Counting。

$\lvert \theta \rvert$表示子图$p$的自同构轨道数。

Tree Decomposition:树分解。
给定一个无向Pattern $p$,它的树分解就是树$T=(V_T,E_T)$。我们用$\tau_i$表示$V_T$里面的一个节点,是$V_p$的一个非空子集,这样的话$p$的一个缩减子图就是$p(\tau_i)$。这个$T$满足以下三个条件:

  1. $V_p=\bigcup_{\tau_i \in V_T}V(\tau_i)$

  2. $\forall (u, v) \in E_p$,$u$和$v$同时出现在至少一个$\tau_i$里面

  3. 如果$\tau_i$与$\tau_j$相连,说明它们包含$p$的同一个节点

tISO:对于$p$的一个树分解$T$,记$T_i$是它的一个子树,$p(T_i)$的tiso-match就是,$p(T_i)$在$G$里的homo-match,并且$T_i$里的每一个$\tau_j$都相互iso-match。用$\lvert \text{tISO}_{p,o,T}(v) \rvert$来表示给定一个树分解$T$,$G$中的$v$对应到$p$中的$o$之后的tiso-match的数量。$V_C(\tau)$表示$V(\tau)$和$V(\text{parent}(\tau))$共有的节点,

$\lvert \text{HOM} \rvert$ and $\lvert \text{ISO} \rvert$

HOM的数量就是$p$的所有子集的ISO数量之和。

$$
\lvert \text{HOM}_{p, o}(v) \rvert = \sum_{p’ \in {p} \cup \text{Sub}(p)} \lvert \text{ISO}_{p’, o(p’)}(v) \rvert
$$

这个式子在结构上是

$$
f(p) = \sum_{p’ \subseteq p} g(p’)
$$

那么根据莫比乌斯反演,可以得到

$$
g(p) = \sum_{p’ \subseteq p} \mu(p, p’)f(p’)
$$

其中有莫比乌斯函数

$$
\mu(p,p’) = (-1)^{|p| - |p’|}
$$

原来的式子就可以写成
$$
\lvert \text{ISO}_{p,o}(v) \rvert = \sum_{p’ \in {p} \cup \text{Sub}(p)} \mu(p,p’) \cdot \lvert \text{HOM}_{p’, o(p’)}(v) \rvert
$$

如何计算$\lvert \text{tISO} \rvert$?

通过枚举每一个$\tau \in T$在G里面的iso-match,记为$R_\tau = \text{ISO}(p(\tau))$。对于每一个叶子节点$\tau \in T$,其iso-match的数量记为$X(V_C(\tau), C)$且有

$$
X_{\tau}(V_C(\tau), C) = {_{V_C(\tau)}}\Upsilon_{count(*) \rightarrow C}(R_\tau)
$$

意思就是对$V_C(\tau)$进行数数然后把输出数量命名成$C$。

对于非叶子节点,且不是根节点的:
$$
X_{\tau}(V_C(\tau), C) = {_{V_C(\tau)}}\Upsilon_{sum{(C_1 \times C_2 \times \dots \times C_k)}\rightarrow C}(J_{\tau})
$$

对于根节点:
$$
X_{\tau}(o, C) = {_o}\Upsilon_{sum{(C_1 \times C_2 \times \dots \times C_k)}\rightarrow C}(J_{\tau})
$$

其中:
$$
J_{\tau} = R_{\tau} \bowtie X_{\tau_1} \bowtie X_{\tau_2} \bowtie \dots \bowtie X_{\tau_k}
$$

$\bowtie$是自然连接符号。

如何计算$\lvert \text{ISO} \rvert$?

在上面的tree decomposition中,我们其实得到了pattern $p$的subpattern $p’$,也就是一些pattern的子图。对于每个$p’$,可以有以下集合:
$\mathcal{I} = {I_1, I_2, \dots, I_{\lvert V_{p’} \rvert}}$,$I_k$表示一个独立点集而且它们内部在$p$里面没有直接边相连,这样就可以做homo-match。

$\text{Cov}(p,T)$:给定一个 $p$ 的树分解,$p_i$ 是 $p$ 的一个子图,它对应的partition是$\mathcal{I}={I_1, I_2, \dots}$。如果两个节点$u$和$v$在相同的$I_k$里面出现了,而且没有在任何$T$的节点$\tau$里面一起出现,我们称$T$覆盖了$p_i$。$p$被$T$覆盖的子图集合,记为$\text{Cov}(p,T) (\subseteq \text{Sub}(p))$。

SCOPE

  1. 对给定pattern $p$做tree decomposition $T$。
  2. 在$T$上做tISO Counting
  3. 将tISO Counting转换成ISO Counting
  4. 再用公式算Local Subgraph Counting

优化:Symmetry-Breaking Rules和Multi-join Algorithms

Counting Cohesive Subgraphs with Hereditary Properties

概念

Hereditary:遗传性,指的是一个具有性质A的图,它的子图还是具有性质A,比如Clique。常见的例子有 s-defective clique, s-plex, s-clique, quasi-clique, k-core, k-truss, k-edge connected subgraph。

Hereditary Cohesive Subgraphs:Clique, s-defective clique and s-plex。

S-Defective Clique:对比一个Clique,最多删掉s条边的图。它具有继承性是因为删掉一个节点并不会增加少边的数量。

S-Plex:对比一个Clique,每个节点最多删掉s条边。它具有继承性是因为删点只会让邻居节点少一个边,而且Clique也少了一层,非邻居节点不受任何影响。

Motivation

计算小的clique数量在很多方面有很基础的应用,但是clique性质太严格了,所以作者团队研究出了一种算法,可以高效地计算具有遗传性和紧密性的子图(HCS)的数量。并且有local counting!

核心思想

算法HCSPivot可以高效地通过递归树和组合数学算出HCS的数量,这个也可以应用在motif里面(如果把一个HCS当成motif)


本站由 Sky Zhou 使用 Stellar 1.29.1 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
© Copyright skyzhou.top
All Rights Reserved