复习
图在生活中广泛存在:事件网络、计算机网络、疾病网络、社交网络、交通网络、知识图谱等
图神经网络是端到端的表示学习,可以自动学习特征,无需人为的特征工程
图嵌入是一个 $d$ 维的嵌入向量表示节点的语义信息
节点、连接、子图、全图都可以有特征
图机器学习的任务包括:节点层面【判断是否有信用卡欺诈】、社团(子图)层面【用户聚类】、边层面【推荐“可能认识的人”】;图层面【判断分子是否有毒、生成新的分子结构等等】
图的基本表示
基本表示
Objects: nodes (节点),vertices (顶点),表示为 $N$
Interactions: links, edges,表示为 $E$,绝对值表示数量
System: network, graph,表示为 $G(N,E)$,绝对值表示数量
本体图(Ontology)
如何设计本体图,取决于将来想解决什么问题
有些时候,设计是唯一的,如用节点代表人物;另外一些时候,如家族、地点、时间,表达通常不唯一
图的种类
Undirected: 无向图【对称的,互相的】,如关系、合作
Directed: 有向图,如交通流
Heterogeneous: 异质图,节点和连接存在不同的类型,如论文的标题、作者、年份网络
Bipartite: 节点只有两类;每一类的节点只与另一类节点相连,如作者-论文图
节点连接数
无向图:平均度为 $\bar{k}=\langle k \rangle = \frac{1}{N} \sum_{i=1}^{N} k_{i} = \frac{2E}{N}$
有向图:平均度为 $\bar{k}=\frac{E}{N}$
邻接矩阵
无向图:
邻接矩阵是对称阵 $A_{ij}=A_{ji}$,$A_{ii}=0$ ,连接总数 $L=\frac{1}{2} \sum_{i=1}^{N} k_{i}=\frac{1}{2} \sum_{ij}^{N}A_{ij}$
沿行或者列求和可以得到节点的度
有向图:
邻接矩阵式非对称阵,$A_{ij} \neq A_{ji}$
连接总数: $L=\sum_{i=1}^N k_i^{i n}=\sum_{j=1}^N k_j^{\text {out }}=\sum_{i j}^N A_{i j}$
出度 $k_i^{\text {out }}=\sum_{j=1}^N A_{i j}$ ,入度 $k_j^{i n}=\sum_{i=1}^N A_{i j}$
为什么把图表示成矩阵形式,方便计算机进行处理,而且大多时候我们的图是稀疏的
连接列表、邻接列表
连接列表:记录存在连接的节点对(Edge list)
Edge list: (2, 3), (2, 4), (3, 2), (3, 4), (4, 5), (5, 1), (5, 2)
邻接列表:记录相关连接的节点,每个节点占用一行
1:
2:3,4
3: 2, 4
4: 5
5: 1,2
其他种类的图
Unweighted: 边上没有权重,邻接矩阵的数值为 0 或者 1
Weighted: 边上带有权重,邻接矩阵的数值为自然数,例如道路交通网络,可以边权表示流量大小
Self-edges (self-loops): 带有自环的无向图,主对角线元素不只有 0
Multigraph: 节点之间有多条边可以连接
图的连通性
Connected graph (无向图):任意两个节点都有路线相连;connected components 称为连通域
Disconected graph (无向图):邻接矩阵是 block-diagonal,而连通图在其他位置的元素也可能非 0
Strongly connected directed graph: 有向图中,任意两个节点都可以相互触达
Weakly connected directed graph: 忽略方向之后,如果任意两个节点能互相到达
Strongly connected components (SCCs): 强连通域;In-component:节点指向强连通域;Out-component:节点指出强连通域
传统图机器学习(人工特征工程)
学习步骤:
把节点、连接、全图编码成 D 维向量
将D维向量输入到机器学习模型中进行训练
给出一个新的图(节点、连接、全图)和特征,进行预测
节点层面的特征工程
流程:给出 $G=(V,E)$,学习一个 funtion: $f: V \rightarrow \mathbb{R}$
半监督节点分类任务:使用已知节点图,预测未知节点的类别
节点特征:Node degree、Node centrality(节点重要度)、Clustering coefficient(聚集系数)、Graphlets(子图模式)
Node degree
含义:节点度表示为该节点所有边数的和
特点:只看圈子人数,不看圈子质量,将所有邻接节点同等看待
Node centrality【考虑了节点重要度特征】
Eigenvector centrality
含义:一个节点 $v$ 是重要的如果他被重要的邻居节点包围
公式:$c_{v} = \frac{1}{\lambda} \sum_{u \in N (v)} c_{u}$,$v$ 节点邻居节点重要度求和
求解:需要递归进行 (recursive manner),等价于求解 $\lambda c = Ac$ 【邻接矩阵的特征值和特征向量】
Betweenness centrality
含义:一个节点是重要的如果它在很多其他节点的最短路径中 【交通咽喉,必经之地】
公式:$c_{v} = \sum_{s \neq v \neq t} \frac{# \text{(shortest paths between } s \text{ and } t \text{ that contains } v )}{# \text{(shortest paths between } s \text{ and } t )}$
其中,分子表示其中有多少对节点的最短距离通过节点 $v$;分母表示除了 $v$ 节点之外,两两节点对数(对于连通域,分母都相同)
案例:
Closeness centrality
含义:一个节点是重要的如果它有去其他节点较小的最短路径【去哪儿都近】
公式:$c_v=\frac{1}{\sum_{u \neq v} \text { shortest path length between } u \text { and } v}$
其中,分母表示节点 $v$ 到其他节点 $u$ 最短路径长度求和
案例:
Clustering coefficient
含义:衡量节点有多抱团
公式:$e_v=\frac{#(\text { edges among neighboring nodes })}{\left(\begin{array}{c}k_v \ 2\end{array}\right)} \in[0,1]$
其中,分子表示 $v$ 节点相邻节点两两也相连个数(三角形个数),分母表示 $v$ 节点相邻节点两两对数
案例:
Ego-network (自我中心网络): 计算三角形个数
Graphlets
含义:Rooted connected,非同型的,类似于同分异构体
Graphlets Degree Vector(GDV)计算方式:提取某一个节点的其余节点的子图个数,可以构建一个向量
案例:
5 个节点的 graphlets 有 73 个子图个数,GDV 具有 73 维的向量
连接层面的特征工程
目的:通过已知连接补全未知连接
方式:直接提取 link 的特征,把 link 变成 D 维向量;注意,把连接两端节点的 $D$ 维节点拼在一起,会丢失 link 本身的连接结构信息
Link prediction任务:
随时间不变的(蛋白质分子):随机删除一些连接,然后再预测
随时间变化的(论文引用、社交网络):使用上一个时间区段的图预测下一个时间区段的 L 个连接,选出 Top N 个连接,将这些连接和下一个真实时刻的连接进行比较,用于分析模型性能
评估:将预测新的 link 和真实的 link 进行对比
方法:还是先提取连接特征,再转为 D 维向量,计算 Link 的分数,最后进行排序选出
连接特征分类
Distance-based feature
含义:两个节点之间的最短路径,【只看最短路径长度,忽略个数】
案例:
Local neighborhood overlap
含义:基于两节点局部连接信息
共同好友个数 (Common neighbors) : $\left|N\left(v_1\right) \cap N\left(v_2\right)\right|$
交并比 (Jaccard's coefficient) : $\frac{\left|N\left(v_1\right) \cap N\left(v_2\right)\right|}{\left|N\left(v_1\right) \cup N\left(v_2\right)\right|}$
共同好友是不是社牛 (Adamic-Adar index): $\sum_{u \in N\left(v_1\right) \cap N\left(v_2\right)} \frac{1}{\log \left(k_u\right)}$
案例:
Global neighborhood overlap
局部特征计算时可能会碰到两个节点没有共同好友的情形
Katz index:
节点 $u$ 和节点 $v$ 之间长度为 $K$ 的路径个数
计算方式: $P^{(K)}=A^k$;例如: 计算 $P_{u v}^{(2)}=\sum_i A_{u i} * P_{i v}^{(1)}=\sum_i A_{u i} * A_{i v}=A_{u v}^2$
节点 $u$ 和节点 $v$ 之间长度为 $K$ 的路径个数是 $A_{u v}^K$ 矩阵的第 $u$ 行第 $v$ 列元素。
$S_{v_1 v_2}=\sum_{l=1}^{\infty} \beta^l A_{v_1 v_2}^l$ ,其中 $\beta$ 为折减系数, $0<\beta<1$
最后, $S=\sum_{i=1}^{\infty} \beta^i A^i=(I-\beta A)^{-1}-I$
小结:
基于两节点距离:Uses the shortest path length between two nodes but does not capture how neighborhood overlaps
基于两节点局部连接信息:Captures how many neighboring nodes are shared by two nodes;Becomes zero when no neighbor nodes are shared
基于两节点在全图的连接信息:Uses global graph structure to score two nodes;Katz index counts # walks of all lengths between two nodes
全图层面的特征工程
目标: 提取出的特征应反映全图结构特点
使用 Bag-of-Words (BoW) 方法,可以应用于图,即将图看成文章,将节点看作单词,但是无法表示连接
区别:计算全图的Graphlet个数,而非特定节点领域Graphlet个数
公式: $\left(f_G\right)_i=#\left(g_i \subseteq G\right)$ for $i=1,2, \cdots, n_k$ ,表示第 $i$ 个 Graphlet 在全图中的个数
Graph kernel
含义:Count the number of different graphlets in a graph
区别(与节点层面的):Graphlets 的节点可以是孤立;计算的是全图的 Graphlets 个数,而非特定区域的
案例:
两个图的 Graph kernel: $K\left(G, G^{\prime}\right)=f_G^T f_{G^{\prime}}$ ,两个图的 Graphlet Count Vector 数量积
特点:计算一个图的 size 为 k 的 graphlets 属于是子图匹配问题,是 NP-Hard.
Weisfeiler-Lehman Kernel
想法:使用邻居结构迭代地丰富节点词库
对每个阶段上色,表示如下
$$
c^{(k+1)}(v)=\operatorname{HASH}\left(\left{c^{(k)}(v),\left{c^{(k)}(u)\right}_{u \in N(v)}\right}\right)
$$
重复上述步骤,进行 $K$ 步, $c^{(K)}(v)$ 表示 K-hop 的连接
WL kernel 在计算上非常高效,复杂度是线性的,只需要关注非零元素即可
Kernel Methods:
可以表示两个图的数量积运算,即 $K\left(G, G^{\prime}\right)=\phi(G)^T \phi\left(G^{\prime}\right)$