图数据结构的认识
图的定义
- 一个图被记为 G = { V , E } \mathcal{G}=\{\mathcal{V}, \mathcal{E}\} G={V,E},其中 V = { v 1 , … , v N } \mathcal{V}=\left\{v_{1}, \ldots, v_{N}\right\} V={v1,…,vN}是数量为 N N N的结点的集合, E = { e 1 , … , e M } \mathcal{E}=\left\{e_{1}, \ldots, e_{M}\right\} E={e1,…,eM} 是数量为 M M M 的边的集合。
- 图用节点表示实体(entities ),用边表示实体间的关系(relations)。
- 节点和边的信息可以是类别型(categorical)或者数值型(numeric)
类别型数据的取值只能是指某一类别。类别型的信息为标签(label)。
数值型数据的取值在实数范围。数值型的信息为属性(attribute)。 - 一般而言,节点含有信息,边可能含有信息。
图的邻接矩阵
-
图 G = { V , E } {G}=\{{V}, {E}\} G={V,E},其的邻接矩阵被记为 A ∈ { 0 , 1 } N × N \mathbf{A} \in\{0,1\}^{N \times N} A∈{0,1}N×N。 A i , j = 1 \mathbf{A}_{i, j}=1 Ai,j=1表示存在从结点 v i v_i vi到 v j v_j vj的边,反之表示不存在从结点 v i v_i vi到 v j v_j vj的边。
按结点连接方向划分为有向图和无向图
按结点连接权重划分为有权图和无权图 -
无向图,即结点之间不存在方向信息,从结点 v i v_i vi到 v j v_j vj的边和从结点 v j v_j vj到 v i v_i vi的边同时存在或同时不存在。因此无向图的邻接矩阵是对称的。
-
无权图,各边权重被认为是等价的,即各条边的权重为1。
-
有权图,其邻接矩阵被记为 W ∈ { 0 , 1 } N × N \mathbf{W} \in\{0,1\}^{N \times N} W∈{0,1}N×N,其中 W i , j = w i j \mathbf{W}_{i, j}=w_{ij} Wi,j=wij表示从结点 v i v_i vi到 v j v_j vj的边的权重。若边不存在则权重为 0 0 0。
以下是一个无向无权图
其邻接矩阵表示为:
A = ( 0 1 0 1 1 1 0 1 0 0 0 1 0 0 1 1 0 0 0 1 1 0 1 1 0 ) \mathbf{A}=\left(\begin{array}{lllll} 0 & 1 & 0 & 1 & 1 \\ 1 & 0 & 1 & 0 & 0 \\ 0 & 1 & 0 & 0 & 1 \\ 1 & 0 & 0 & 0 & 1 \\ 1 & 0 & 1 & 1 & 0 \end{array}\right) A=⎝⎜⎜⎜⎜⎛0101110100010011000110110⎠⎟⎟⎟⎟⎞
图的属性
结点的度(degree):
- 有向有权图中,结点 v i v_i vi的出度(out degree)等于从 v i v_i vi出发的边的权重之和,结点 v i v_i vi的入度(in degree)等于从连向 v i v_i vi的边的权重之和。
- 无向图是有向图的特殊情况,结点出度与入度相等。
- 无权图是有权图的特殊情况,各边权重为 1 1 1,结点 v i v_i vi的出度(out degree)等于从 v i v_i vi出发的边的数量,结点 v i v_i vi入度(in degree)等于从连向 v i v_i vi的边的数量。
- 结点 v i v_i vi的度记为 d ( v i ) d(v_i) d(vi),入度记为 d i n ( v i ) d_{in}(v_i) din(vi),出度记为 d o u t ( v i ) d_{out}(v_i) dout(vi)。
邻接结点(neighbor):
- 结点 v i v_i vi的邻接结点为与结点 v i v_i vi直接相连的结点,其被记为** N ( v i ) {N(v_i)} N(vi)**。
- **结点 v i v_i vi的 k k k跳远的邻接节点(neighbors with k k k-hop)**指的是到结点 v i v_i vi要走 k k k步的节点(一个节点的 2 2 2跳远的邻接节点包含了自身)。
行走(walk):
- w a l k ( v 1 , v 2 ) = ( v 1 , e 6 , e 5 , e 4 , e 1 , v 2 ) walk(v_1, v_2) = (v_1, e_6,e_5,e_4,e_1,v_2) walk(v1,v2)=(v1,e6,e5,e4,e1,v2),这是一次“行走”,它是一次从节点 v 1 v_1 v1出发,依次经过边 e 6 , e 5 , e 4 , e 1 e_6,e_5,e_4,e_1 e6,e5,e4,e1,最终到达节点 v 2 v_2 v2的“行走”。
- 下图所示为 w a l k ( v 1 , v 2 ) = ( v 1 , e 6 , e 5 , e 4 , e 1 , v 2 ) walk(v_1, v_2) = (v_1, e_6,e_5,e_4,e_1,v_2) walk(v1,v2)=(v1,e6,e5,e4,e1,v2),其中红色数字标识了边的访问序号。
- 在“行走”中,节点是运行重复的。
设图的邻接矩阵为 A \mathbf{A} A, A n \mathbf{A}^{n} An为邻接矩阵的 n n n次方,那么 A n [ i , j ] \mathbf{A}^{n}[i,j] An[i,j]等于从结点 v i v_i vi到结点 v j v_j vj的程度为 n n n的行走的个数。
路径(path):
- “路径(path)”是结点不可重复的“行走(walk)”。
子图(subgraph):
- 有一图 G = { V , E } {G}=\{{V}, {E}\} G={V,E},另有一图 G ′ = { V ′ , E ′ } {G}^{\prime}=\{{V}^{\prime}, {E}^{\prime}\} G′={V′,E′},其中 V ′ ∈ V {V}^{\prime} \in {V} V′∈V, E ′ ∈ E {E}^{\prime} \in {E} E′∈E并且 V ′ {V}^{\prime} V′不包含 E ′ {E}^{\prime} E′中未出现过的结点,那么 G ′ {G}^{\prime} G′是 G {G} G的子图。
连通分量(connected component):
-
给定图 G ′ = { V ′ , E ′ } {G}^{\prime}=\{{V}^{\prime}, {E}^{\prime}\} G′={V′,E′}是图 G = { V , E } {G}=\{{V}, {E}\} G={V,E}的子图。记属于图 G {G} G但不属于 G ′ {G}^{\prime} G′图的结点集合记为 V / V ′ {V}/{V}^{\prime} V/V′ 。如果属于 V ′ {V}^{\prime} V′的任意结点对之间存在至少一条路径,但不存在一条边连接属于 V ′ {V}^{\prime} V′的结点与属于 V / V ′ {V}/{V}^{\prime} V/V′的结点,那么图 G ′ {G}^{\prime} G′是图 G {G} G的连通分量。
左右两边子图都是整图的连通分量。
连通图(connected graph):
- 当一个图只包含一个连通分量,即其自身,那么该图是一个连通图。
最短路径(shortest path):
-
v
s
,
v
t
∈
V
v_{s}, v_{t} \in {V}
vs,vt∈V 是图
G
=
{
V
,
E
}
{G}=\{{V}, {E}\}
G={V,E}上的一对结点,结点对
v
s
,
v
t
∈
V
v_{s}, v_{t} \in {V}
vs,vt∈V之间所有路径的集合记为
P
s
t
{P}_{\mathrm{st}}
Pst。结点对
v
s
,
v
t
v_{s}, v_{t}
vs,vt之间的最短路径
p
s
t
s
p
p_{\mathrm{s} t}^{\mathrm{sp}}
pstsp为
P
s
t
{P}_{\mathrm{st}}
Pst中长度最短的一条路径,其形式化定义为
p s t s p = arg min p ∈ P s t ∣ p ∣ p_{\mathrm{s} t}^{\mathrm{sp}}=\arg \min _{p \in {P}_{\mathrm{st}}}|p| pstsp=argp∈Pstmin∣p∣
其中, p p p表示 P s t {P}_{\mathrm{st}} Pst中的一条路径, ∣ p ∣ |p| ∣p∣是路径 p p p的长度。
直径(diameter):
- 给定一个连通图 G = { V , E } \mathcal{G}=\{\mathcal{V}, \mathcal{E}\} G={V,E},其直径为其所有结点对之间的最短路径的最小值,形式化定义为
diameter ( G ) = max v s , v t ∈ V min p ∈ P s t ∣ p ∣ \operatorname{diameter}(\mathcal{G})=\max _{v_{s}, v_{t} \in \mathcal{V}} \min _{p \in \mathcal{P}_{s t}}|p| diameter(G)=vs,vt∈Vmaxp∈Pstmin∣p∣
拉普拉斯矩阵(Laplacian Matrix):
- 给定一个图 G = { V , E } {G}=\{{V}, {E}\} G={V,E},其邻接矩阵为 A A A,其拉普拉斯矩阵定义为 L = D − A \mathbf{L=D-A} L=D−A,其中 D = d i a g ( d ( v 1 ) , ⋯ , d ( v N ) ) \mathbf{D=diag(d(v_1), \cdots, d(v_N))} D=diag(d(v1),⋯,d(vN))。
对称归一化的拉普拉斯矩阵(Symmetric normalized Laplacian):
- 给定一个图 G = { V , E } {G}=\{{V}, {E}\} G={V,E},其邻接矩阵为 A A A,其规范化的拉普拉斯矩阵定义为
L = D − 1 2 ( D − A ) D − 1 2 = I − D − 1 2 A D − 1 2 \mathbf{L=D^{-\frac{1}{2}}(D-A)D^{-\frac{1}{2}}=I-D^{-\frac{1}{2}}AD^{-\frac{1}{2}}} L=D−21(D−A)D−21=I−D−21AD−21
图的种类
-
同质图(Homogeneous Graph):仅存在一种类型的节点和一种类型的边的图。
-
异质图(Heterogeneous Graph):存在多种类型的节点和多种类型的边的图。
-
二部图(Bipartite Graphs):节点分为两类,只有在不同类的节点之间存在边。
图结构数据上的机器学习
- 节点预测:预测节点的类别或某类属性的取值
例:对是否是潜在客户分类、对游戏玩家的消费能力做预测 - 边预测:预测两个节点间是否存在链接
例:Knowledge graph completion、好友推荐、商品推荐 - 图的预测:对不同的图进行分类或预测图的属性
例:分子属性预测 - 节点聚类:检测节点是否形成一个社区
例:社交圈检测 - 其他任务
图生成:例如药物发现
图演变:例如物理模拟
……
应用神经网络于图面临的挑战
过去的深度学习应用中,我们主要接触的数据形式主要是这四种:矩阵、张量、序列(sequence)和时间序列(time series),它们都是规则的结构化的数据。然而图数据是非规则的非结构化的,它具有以下的特点:
- 任意的大小和复杂的拓扑结构;
- 没有固定的结点排序或参考点;
- 通常是动态的,并具有多模态的特征;
- 图的信息并非只蕴含在节点信息和边的信息中,图的信息还包括了图的拓扑结构。
以往的深度学习技术是为规则且结构化的数据设计的,无法直接用于图数据。应用于图数据的神经网络,要求
- 适用于不同度的节点;
- 节点表征的计算与邻接节点的排序无关;
- 不但能够根据节点信息、邻接节点的信息和边的信息计算节点表征,还能根据图拓扑结构计算节点表征。下面的图片展示了一个需要根据图拓扑结构计算节点表征的例子。图片中展示了两个图,它们同样有俩黄、俩蓝、俩绿,共6个节点,因此它们的节点信息相同;假设边两端节点的信息为边的信息,那么这两个图有一样的边,即它们的边信息相同。但这两个图是不一样的图,它们的拓扑结构不一样。
接下来就是Pytorch Geometric(简称PyG)的安装配置和使用
图神经网络_环境配置与PyG的使用