INTRODUCTION

简介

  • 图到处都是
  • 举例

真实世界的图(具象化模型)

  • Node classification: Predict the type of a given node 预测图的类型
  • Link prediction: Predict the interaction (or existence of) between two nodes 预测链接类型
  • Community detection: Identify linked clusters of nodes 识别链接集群
  • Network similarity: Measure similarity among nodes/sub-graphs/whole networks 相似性的图(类比推理模型迁移)

社交网 social network

  • 六人联系:我们可以根据最多六个人的关系就可以认识全世界的每一个人

传播类影响 Influence Propagation

  • 网络预测,故障分析,薄弱点分析
  • 病毒传播,感染力模型

知识图谱 Knowledge Graph

  • 用图来表示信息
    • 知识点上下位关系
    • 知识点的串并联关系
    • 知识点相关性力度
    • 知识点联系长度
    • 知识点的输入输出关系

推荐预测(信息茧房)Recommender System

  • 也就是将相关的信息本体套上不同的维度,之后按照韦恩图一样进行叠加,在相应的用户进行阅读的时候,我们通过提取相关的信息来逐渐的找到用户所适合的维度,最后在用户所可能感兴趣的维度内进行相关的推荐和预测
  • 举个例子:
    • 电影推荐
      • 演员维度
      • 剧情维度
      • 配乐维度
      • 电影类型
    • 也可以看这个图
      • 用户层(主观性内容)
      • 知识层(客观性推荐内容)
      • 通过确定二者的交杂点,就可以找到合适的推荐内容

生化流程应用 Biochemical Applications

  • 药物的合成预测
  • 产物路径预测
  • 一般应用的是图卷积网络

Structure of a Graph

Network Properties

度的衡量

  • 讲的也就是怎么样来进行度的描述和数学化
  • 一般来说,会应用这样的模型

步长Path Length

这里讲的就是一些基本的定义基本的量,也就是最基本的一些表述元素

  • path
    • 拥有链接顺序
    • 可以多次通过,自联系
    • 遵循有向性
  • distance
    • 两个path之间的最短路径
  • diameter
    • 途中两个节点的最远距离
  • average path length
    • 仅限于联通的无方向的图
    • 我们在这里也可以引入相互关联的强度,也可以类比卷积来思考和看
    • 忽视那些没有联系的点,我们只对那些已经联系上的点来去步长

对于无向图的聚类计算Clustering Coefficient (for undirected graph)

  • Clustering Coefficient for a node i:节点的聚集关联度

    • 表示了怎么和身边的信息进行关联
    • 拥有聚集度k
    • 要考虑边缘量
    • 也就是类比的粒度关系,拥有0-1的相关联度
  • Average Clustering Coefficient平均聚合度计算

  • 也就是从群体到个体的划分关系

关联复杂度 Connected Component

这里其实插入了一个BFS广度优先算法的内容,详细的解释来看超链接

这里讲的也就是图是否闭合的问题,如果全部都能走通,那就代表肯定是联系上的,那如果走通不了,那就代表是没有联系的。

随机图生成模型 Random Graph Generation Models

Erdos-Renyi Model

Application of Graphs

图的相关算法

  • 图的搜索算法:图的搜索指的就是从图的某一节点开始,通过边到达不同的节点,最终找到目标节点的过程。根据搜索的顺序不同,图的搜索算法可分为“广度优先搜索”和“深度优先搜索”两种。
  • 图的最短路径问题:最短路径问题就是要在两个节点的所有路径中,找到一条所经过的边的权重总和最小的路径。相关算法有“贝尔曼-福特算法”,“狄克斯特拉算法”和“A* 算法”三种。

图的搜索算法

广度优先搜索会根据离起点的距离,按照从近到远的顺序对各节点进行搜索。而深度优先搜索会沿着一条路径不断往下搜索直到不能再继续为止,然后再折返,开始搜索下一条路径。

广度优先算法

广度优先搜索和深度优先搜索一样,都是对图进行搜索的算法,都是从起点开始顺着边搜索,此时并不知道图的整体结构,直到找到指定节点(即终点)。在此过程中每走到一个节点,就会判断一次它是否为终点。

广度优先搜索会根据离起点的距离,按照从近到远的顺序对各节点进行搜索。

在广度优先搜索中,有一个保存候补节点的队列,队列的性质就是先进先出,即先进入该队列的候补节点就先进行搜索。

下图中红色表示当前所在的节点(节点A),终点设为节点G,将与节点A直连的三个节点B, C, D放入存放候补节点的队列中(与节点A直连的三个节点放入时可以没有顺序,这里的放入顺序为B, C, D),用绿色表示。

1、上面左图:此时从队列中选出一个节点,优先选择最早放入队列的那个节点,这里选择最左边的节点B。将已经搜索过的节点变为橙色(节点A),搜索到节点B时,将与节点B直连的两个节点E和F放入队列中,此时队列为 [C, D, E, F]。

2、上面中图:对节点B搜索完毕,节点B不是要找的终点,再搜索节点C,将与节点C直连的节点H放入队列中,此时队列为 [D, E, F, H]。

3、然后对节点D进行同样的操作,此时队列为 [E, F, H, I, J]。

4、上面右图:对与节点A直连的节点搜索完毕,再对与节点B直连的节点进行搜索(因为剩下的点中它们最先放入队列),这里选择节点E,将与节点E直连的节点K放入队列中,此时队列为 [F, H, I, J, K]。

然后一直按照这个规则进行搜索,直到到达目标节点G为止,搜索结束

广度优先搜索为从起点开始,由近及远进行广泛的搜索。因此,目标节点离起点越近,搜索结束得就越快

深度优先算法

在深度优先搜索中,保存候补节点是,栈的性质就是先进后出,即最先进入该栈的候补节点就最后进行搜索。

还是将起点设为节点A,终点设为节点G,还是先将与节点A直连的三个节点B, C, D放入存放候补节点的栈中(这里的放入顺序为D, C, B)。到这里和广度优先搜索似乎没什么区别。

因为节点B是最后放入,则先从节点B开始搜索,将与节点B直连的两个节点E和F放入栈中,此时栈为 [D, C, F, E]。

1、上面左图:然后再对节点E进行搜索,将与节点E直连的节点K放入栈中,此时栈为 [D, C, F, K]。

2、此时节点K在栈的最后,所以先对节点K进行搜索,节点K不是终点,而且节点K没有其他直连的节点,所以此时栈为 [D, C, F]。

3、上面中图:然后再对节点F进行搜索,节点F也不是终点,而且节点F也没有其他直连的节点,所以此时栈为 [D, C]。

3、上面右图:接下来就对节点C进行搜索,将与节点C直连的节点H放入栈中,此时栈为 [D, H]。

然后一直按照这个规则进行搜索,直到到达目标节点G为止,搜索结束

深度优先搜索会沿着一条路径不断往下,搜索直到不能再继续为止,到了路径的尽头,再折返,再对另一条路径进行搜索。

总结

虽然广度优先搜索和深度优先搜索在搜索顺序上有很大的差异,但是在操作步骤上却只有一点不同,那就是选择哪一个候补节点作为下一个节点的基准不同。

广度优先搜索选择的是最早成为候补的节点,因为节点离起点越近就越早成为候补,所以会从离起点近的地方开始按顺序搜索;而深度优先搜索选择的则是最新成为候补的节点,所以会一路往下,沿着新发现的路径不断深入搜索。

上面介绍过连通图的定义,通过深度优先搜索可以判断图是否是连通图。具体实现为:在图中任意选择一个节点,从该节点开始进行深度优先搜索,如果在这个搜索过程中所有的节点都被搜索到,则该图为连通;反之,若存在没有被搜索到的节点,则说明该图是非连通的。

在广度优先搜索的执行过程中,搜索范围从起点开始逐渐向外延伸,所以不但可以判断两个节点之间是否有路径,还可以找出这两个节点的最短路径,即可以解决最短路径问题。

广度优先搜索可以用于找到两个节点的最短路径问题,这里的最短路径其实是针对于非加权图,寻找段数最少的路径。但是对于加权图,段数最少的路径并不代表路径中的权重总和也最小。

其实可以浅显的理解一下,广度搜索更像是横向发展,一点点的漫走整个树,直到找到理想的答案,而深度搜索更像是顺着一个方向不断地深究,然后再找那个理想的答案

Transclude of 深度优先搜索与广度优先搜索的本质区别!---知乎.mhtml

图的最短路径问题

贝尔曼-福特算法

狄克斯特拉算法

A* 算法


网络结构 Structure of the Web

  • 其实可以思考成一个黑箱子,适当的减少一些路径,然后进行相应的处理和选择。
  • 其实这里讲的很多很多都是相关的算法啥的,这个后续学python学习的时候再进行细化。

一些杂七杂八的知识

图的分类

1、如果给边加上一个值表示权重,这种图就是加权图,没有权重的图就是非加权图,没有权重的边只能表示两个节点的连接状态,而有权重的边就可以表示节点之间的“连接程度”。

2、如果给边加上表示方向的箭头,即表示节点之间的传递方向,这种图就是有向图,而边上没有箭头的图就是无向图。

3、如果图中任意两个节点都能找到路径可以将它们进行连接,则称该图为连通图,上面这个图就是连通图,反之则为非连通图。 加权图与有向图 连通图 非连通图

而图的存在目的是为了什么呢?当然是为了存储关系和信息呀,因此就有了下面的内容

参考资料

Transclude of 简单的图论入门---知乎.mhtml
https://blog.csdn.net/PolarisRisingWar/article/details/117287320 大佬写的笔记,可以直接拿来借鉴

https://zhuanlan.zhihu.com/p/272671494 https://zhuanlan.zhihu.com/p/543187296 知乎写的很好的总结,参考这个即可 # 图神经网络(GNN)的学习和GCN粗浅理解


chat速成图论入门