01图论基础

  • Post author:
  • Post category:其他




什么是图

图的基本示意图

图的基本示意图

图是描述复杂事务的数据表示形式,由节点和边组成,数学上一般表述为

图G-(V,E)。其中的V(vertical)代表节点,可被理解为事物。

而E(edge)代表边,描述的是两个事物之间的关系。例如一个图的社交网络图,每个人都可视为节点,而人与人之间的关系可被视为边。

而在我们的推荐系统中,用户与物品之间的交互关系,用户与用户自身的关系,物品与物品之间的关系,完全可由一张图完整的进行描述。如下图所示:

用户与物品之间的关系图
在这里插入图片描述



无向图与有向图

无向图
在这里插入图片描述

有向图
在这里插入图片描述

双向图
在这里插入图片描述

无向图是由没有方向的无向边组成的图,而有向图是由具有方向的有向边组成的图,有向边的出发节点称为

头节点

,结束节点则称为

尾节点

,无向图与双向图等价



有向有环图和无向无环图

有向有环图
在这里插入图片描述

有向无环图
在这里插入图片描述

上图展示了有向有环图与有向无环图的区别,环是一种特殊的有向图,例如上方图中的1,2,3,4节点,1->2->4->3->1即形成一个环。在环中的任意节点经过边游走都能回到自身.

如果在一个有向图中没有任何一个节点经过边游走能回到自身,则便是有向无环图。即下面的图



无权图与有权图

在这里插入图片描述

无权图指边没有权重,有权图只边带有权重

在这里插入图片描述



同构图和异构图

在这里插入图片描述

同构图

在这里插入图片描述

异构图



图的表示



1.邻接矩阵

虽然图在人类眼中可以很自观的展示出信息,但是对于计算机来讲,就不是那么容易理解了。所以我们需要研究图如何在计算机中表示。

邻接矩阵(Adjacency Matrix)是一种最基础的图表示方式。假设一个图的节点数量为N,则生成一个N*N的矩阵。矩阵中的值为对应位置节点与节点之间的关系,一般用A表示。

场景1:无向图

在这里插入图片描述

在这里插入图片描述

在一个基础的无向图中,若节点i与节点j有边连接,则在邻接矩阵的对应位置赋值1即可,记作A

ij

=A

ji

=1,否则为0。如上图所示,比如节点1与节点2右边相连,所以A

12

和A

21

的位置为1。无向图的邻接矩降是一个以对角矩阵镜像对称的矩阵。

场景2: 有向图

在这里插入图片描述

在这里插入图片描述

对于一个有向图,邻接矩阵不是对称矩阵,我们将邻接矩阵的行索引代表有向图中有向边的头节点,列索引代表尽节点。那么如果有边i->j,则A

ij

=1,A

ji

不再为1,除非连接i和j是一条双向边

场景3:有权图

在这里插入图片描述

在这里插入图片描述

有权图的邻接表与无权图的唯一区别就是将边的权重代替了原来1的位置。

值得提的是,所有邻接矩阵的对角线均为0,因为对角线其实代表了节点与自身的关系,而节点与自身并无边相连,所以为0。

另外异构图的图表示方法略微复杂一点,我们具体放在后面讲。



2.邻接列表

场景1:无权图

将一张图以矩阵的形式表示固然非常使于计算,但是对于稀疏的人图非常不友好。而邻按列表的表示方式对于稀疏人图则非常友好。

在这里插入图片描述

1:2,5

2:4

3:1

4:3

场景2:有权图

在这里插入图片描述

key: value

1: [(2,0.2), (5,3.6)]

2: [(4, 1.6)]

3: [(1,0.8 )]

4:[(3,6.2)]



3.边集

边集就更的简单,通常用两个头尾节点的索引元组表示一条边。例如头节点是h,尾节点是t:那么这一条有向边就是(b, t),如果是一条无向边则就用一对对称元组表示,即(h, t), (t, h)

场景1:有向无权图

在这里插入图片描述

(1, 2),

(1,5),

(2.4),

(4.3),

(3,1)

场景2:无向无权图

在这里插入图片描述

(1,2),

(2,1),

(1,5),

(5.1),

(2.4),

(4,2),

(4.3),

(3, 4),

(3,1),

(1.3)

场景3:有权图

在这里插入图片描述

(1.0.2.2),

(1,3.6.5),

(2, 1.6.4),

(4,6.2,3),

(3,0.8,1)



邻居与度

节点的邻居(neighbor)指的是与该节点在同一边另一端的节点。

节点的度(degree)指的是该节点邻居的数量.


场景1:无向图


在这里插入图片描述

节点1:

邻居(neighbor)= 2,3,5

度(degree)- 3

节点2:邻居(neighbor)-1,4

度(degree)=2


场景2:有向图


在这里插入图片描述

节点1:

前继邻居(predecessor)-3

后继邻居(successor)= 2,5

入度(indegree)= 1

出度(outdegree)= 2



结构特征、节点特征、边特征

在这里插入图片描述

用户物品特征图

如上图所示,该图表示的是推荐场景中常有的用户与物品交互关系图。整个图即代表结构特征,本章目前讨论到现在也仅是在讨论图的结构特征

图由节点与边组成,对于节点来说,本身也可以带有一些特征或属性,例如上图中的用户画像特征。当然对于边同理,如上图的观看时长或点赞频率,边特征有时也叫关系特征:边的权重也可视为特征。

在机器学习与深度学习时,经常会对内容进行嵌入(embedding)操作,由嵌入操作得到的节点向量与边向量也可视为它们的特征.



处理图的库



1. NetworkX

Networks是最老牌的图处理库,早在2002年就发布了第一版,对于专门学习图算法的同学一定不陌生。简单易用,实现了一些基础的图算法。例如最小路径算法,最小权重生成树算法等。

https://www.osgeo.cn/networkx/tutorial.html



2.DGL(Deep Graph Library)

2.DGi(第一版发布于2018年,亚马逊继MxNet后又一力作,基于深度学习框架的图神经网络库,实现了主流的图神经网络算法。兼容MxNet,PyTorch,Tensorlow, 有中文的官方教程。是目前最主流的处理图的python APl

https://docs.dgl.ai/en/latest/guide_cn/index.html



PGL(Paddle Graph Learning)

3.PGL(Paddle Graph Learning),第一版发布于2020年,百度发布的国人之光框架,号称速度是DGL的13倍,使用与上手更容易。并且集成了百度自研的高效算法。但有一个致命的缺点,就是只兼容百度自家的飞浆(PaddlePaddle)深度学习框架。不知未来是否公与MxNet,PyTorch等兼容。



版权声明:本文为Edward_Legend原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。