图深度学习(二)

图深度学习(二)

本文参考链接
为了督促自己学习,参照这个链接进行了笔记的搬运。需要看原文的可以到对应链接去查看。来自datawhale的自主学习


图理论基础

本节包含图的背景、图的定义、图的性质、图的连接表示、图的类型等


一、图的背景问题:柯尼斯堡七桥

  1. 柯尼斯堡七桥问题:市区跨普列戈利亚河两岸,河中心有两个小岛。小岛与河的两岸有七条桥连接。在所有桥都只能走一遍的前提下,如何才能把这个地方所有的桥都走遍?
  2. 欧拉将**实际的抽象问题简化为平面上的点与线组合,每一座桥视为一条线,桥连接地区视为点。这样若从某点出发后再回到这点,则这一点的线数必须是偶数。**这样的点称为偶顶点。相对的,连有奇数条线的点称为奇顶点。
    在这里插入图片描述

3.欧拉把问题的实质归于一笔画问题,即判断一个图是否能够遍历完所有的边而没有重复,而柯尼斯堡七桥问题则是一笔画问题的一个具体情境。欧拉最后给出任意一种河──桥图能否全部走一次的判定法则,从而解决了“一笔画问题”。对于一个给定的连通图,如果存在超过两个的奇顶点,那么满足要求的路线便不存在了,且有n个奇顶点的图至少需要 ⌈ n / 2 ⌉ \lceil n/2 \rceil n/2笔画出。如果只有两个奇顶点,则可从其中任何一地出发完成一笔画。若所有点均为偶顶点,则从任何一点出发,所求的路线都能实现,他还说明了怎样快速找到所要求的路线。

不少数学家都尝试去解析这类事例。而这些解析,最后发展成为了数学中的图论

二、图的定义

1.简单图

  • 图被记为 G = { V , E } {G}=\{{V}, {E}\} G={V,E}
  • 其中 V = { v 1 , … , v N } {V}=\{v_{1}, \ldots, v_{N}\} V={v1,,vN} 是数量为 N = ∣ V ∣ N=|{V}| N=V节点(node或vertex)的集合 E = { e 1 , … , e M } {E}=\{e_{1}, \ldots, e_{M}\} E={e1,,eM} 是数量为 M M M边(edge或link)的集合
  • 图用节点表示实体(entities),用边表示实体间的关系(relations)。
  • 假如一条边 e ∈ E e\in{E} eE 连接两个节点 v 1 v_{1} v1 v 2 v_{2} v2,那么这条边可以被表示为 e = ( v 1 , v 2 ) e=(v_{1}, v_{2}) e=(v1,v2)
  • 节点和边的信息可以是类别型的(categorical),类别型数据的取值只能是哪一类别。一般称类别型的信息为标签(label)
  • 节点和边的信息可以是数值型的(numeric),数值型数据的取值范围为实数。一般称数值型的信息为属性(attribute)
  • 在图的计算任务中,我们认为,节点一定含有信息(至少含有节点的度的信息),边可能含有信息。

networkx创建一个简单图:

# 创建一个图
g = nx.Graph()
# 添加图的节点
g.add_node(2)
g.add_node(5)
# 添加图的边
g.add_edge(2, 5)
g.add_edge(1, 4) # 当添加的边对应的节点不存在的时候,会自动创建相应的节点
g.add_edge(1, 2)
g.add_edge(2, 6)
# 绘制图
nx.draw(g)

在这里插入图片描述

2.有向图&无向图

代码如下(示例):

# 默认情况下,networkX 创建的是无向图
G = nx.Graph()
print(G.is_directed())

# 创建有向图
H = nx.DiGraph()
print(H.is_directed()).oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
# 判断结果
False
True

在这里插入图片描述

3.有权图&无权图

根据图的边上权重是否为1,我们可以将他们分为:

  • 图的边上权重为1时,它是一个无权图(unweighted graph)
  • 图的边上权重不为1时,它是一个有权图(weighted graph)。我们记点 v i v_i vi v j v_j vj 的权重为 w i j w_{ij} wij.

在这里插入图片描述

三、图的性质

示例:
空手道俱乐部网络描述了空手道俱乐部 34 名成员的社交网络,并记录了在俱乐部外互动的成员之间的链接。

# 创建一个空手道俱乐部网络
G = nx.karate_club_graph()
# G is an undirected graph
type(G)
# 可视化图
nx.draw(G, with_labels = True)

在这里插入图片描述

1.邻接节点(neighbors)

  • 节点 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 跳远的邻接节点包含了自身)。

2.图的度(degree)

  • 节点 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)
  • 对于有向有权图:节点 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 的边的数量。
  • 平均度是一个表达网络整体性质重要的参数。对于无向图来说,平均度的计算为 d ˉ ( G ) = 1 N ∑ i = 1 N d i = 2 M N \bar{d}({G})=\frac{1}{N}\sum^{N}_{i=1}d_i=\frac{2M}{N} dˉ(G)=N1i=1Ndi=N2M
  • 度分布 P ( d ) P(d) P(d) 表示随机选择的节点的度为 d d d 的概率,平均度 d ˉ ( G ) = ∑ d = 0 ∞ d P ( d ) \bar{d}({G})=\sum_{d=0}^{\infty} dP(d) dˉ(G)=d=0dP(d)
# 网络平均度计算
def average_degree(num_edges,num_nodes):
    avg_degree = 0
    avg_degree = 2*num_edges/num_nodes
    return int(round(avg_degree))

num_edges = G.number_of_edges()
num_nodes = G.number_of_nodes()
avg_degree = average_degree(num_edges,num_nodes)
print("网络平均度是:",avg_degree)

在这里插入图片描述

3.行走(walk)和路径(path)

  • 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),其中红色数字标识了边的访问序号。
  • 在“行走”中,节点是允许重复的。
  • 路径是节点不可重复的行走.
    在这里插入图片描述

4.距离(distance)和直径(diameter)

  • 最短路径被定义为两个点之间的距离(distance)最短路径(shortest path) v s , v t ∈ V v_{s}, v_{t} \in {V} vs,vtV 是图 G = { V , E } {G}=\{{V}, {E}\} G={V,E} 上的一对节点,节点对 v s , v t ∈ V v_{s}, v_{t} \in {V} vs,vtV 之间所有路径的集合记为 p s t p_{st} pst。节点对 v s , v t v_{s}, v_{t} vs,vt 之间的最短路径 p s t s p p_{st}^{sp} pstsp p s t p_{st} pst 中长度最短的一条路径,其形式化定义为
    p s t s p = a r g m i n p ∈ P s t ∣ p ∣ p_{st}^{sp}= argmin_{p \in P_{st}}|p| pstsp=argminpPstp
    其中, p p p表示 p s t p_{st} pst 中的一条路径, ∣ p ∣ |p| p是路径 p p p的长度。
  • 直径(diameter):给定一个连通图 G = { V , E } {G}=\{{V}, {E}\} G={V,E},其直径为其所有节点对之间的最短路径的最大值,形式化定义为 d i a m e t e r ( G ) = m a x v s , v t ∈ V m i n p ∈ p s t ∣ p ∣ diameter({G})=max_{v_{s}, v_{t} \in {V}} min_{p \in p_{s t}}|p| diameter(G)=maxvs,vtVminppstp

5.子图(subgraph)和连通分量(connected component)和连通图(connected graph)

  • 子图(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} VV E ′ ∈ E {E}^{\prime} \in {E} EE 并且 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} \setminus {V}^{\prime} VV 。如果属于 V ′ {V}^{\prime} V 的任意节点对之间存在至少一条路径,但不存在一条边连接属于 V ′ {V}^{\prime} V 的节点与属于 V ∖ V ′ {V} \setminus {V}^{\prime} VV 的节点,那么图 G ′ {G}^{\prime} G 是图 G {G} G 的连通分量。
  • 连通图(connected graph):当一个图只包含一个连通分量,即其自身,那么该图是一个连通图。

6.聚类系数(Clustering Coefficient)

  • 聚类系数表示给定节点的邻居彼此链接的程度
  • 节点 i i i 的邻域互连越紧密,其局部聚类系数越高。
  • C i C_i Ci 是节点的两个邻居相互链接的概率。
  • 对于度数为 d i d_i di 的节点 i,局部聚类系数定义为
    C i = E i T i C_i=\frac{E_i}{T_i} Ci=TiEi

其中, E i E_i Ei 表示节点 i i i 的邻居实际存在的边的数量, T i T_i Ti 表示节点 i i i 的邻居可能(最多)存在的边的数量。

  • C i = 0 C_i = 0 Ci=0 如果节点 i 的邻居都没有相互链接。
  • C i = 1 C_i = 1 Ci=1 如果节点 i 的邻居形成一个全连接图,即它们都相互链接。
  • C i = 0.5 C_i = 0.5 Ci=0.5 意味着一个节点的两个邻居有 50 % 50\% 50% 的机会链接。
  • 网络的聚类系数平均聚类系数:是所有节点的集聚系数的平均值为
    C = 1 N ∑ i C i C=\frac{1}{N}\sum_i C_i C=N1iCi
def average_clustering_coefficient(G):
    avg_cluster_coef = 0
    avg_cluster_coef = nx.average_clustering(G)
    avg_cluster_coef = round(avg_cluster_coef,2)
    return avg_cluster_coef

avg_cluster_coef = average_clustering_coefficient(G)

print("空手道的聚类系数是 {}".format(avg_cluster_coef))

在这里插入图片描述

7.接近中心度(closeness centrality)

  • 在连通图中,节点的接近中心性(或接近性)是网络中中心性的度量,计算为该节点与图中所有其他节点之间的最短路径长度之和的倒数。
  • 节点越中心,它与所有其他节点越接近
  • 接近中心度的计算公式为 c ( v ) = 1 ∑ u ≠ v shortest path length between  u  and  v c(v) = \frac{1}{\sum_{u \neq v}\text{shortest path length between } u \text{ and } v} c(v)=u=vshortest path length between u and v1
def closeness_centrality(G, node=5):

    closeness = 0
    path_length_total = 0 
    for path in list(nx.single_source_shortest_path(G,node).values())[1:]:
        path_length_total += len(path)-1

    closeness = 1 / path_length_total
    closeness = round(closeness, 2)

    return closeness

node = 5
closeness = closeness_centrality(G, node=node)
print("空手道俱乐部接近中心性 {:.2f}".format(closeness))

在这里插入图片描述

四、图的连接表示

介绍邻接矩阵、关联矩阵和拉普拉斯矩阵。

1.邻接矩阵(Adjacency Matrix)

  • 给定一个图 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 的边, A i , j = 0 \mathbf{A}_{i, j}=0 Ai,j=0 表示不存在从节点 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 ∈ R N × N \mathbf{W} \in \mathbb{R}^{N \times N} WRN×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

一个无向无权图的例子(左边为图,右边为图的邻接矩阵):
在这里插入图片描述

2.关联矩阵(Incidence Matrix)

  • 给定一个图 G = { V , E } {G}=\{{V}, {E}\} G={V,E},其对应的关联矩阵被记为 M ∈ { 0 , 1 } N × M \mathbf{M} \in\{0,1\}^{N \times M} M{0,1}N×M。(抱歉这里我们用加粗的 M \mathbf{M} M 表示关联矩阵,用不加粗的 M M M 表示边的个数)
  • M i , j = 1 \mathbf{M_{i, j}}=1 Mi,j=1 表示节点 v i v_i vi 和边 e j e_j ej 相连接, M i , j = 0 \mathbf{M_{i, j}}=0 Mi,j=0 表示节点 v i v_i vi 和边 e j e_j ej 不相连接。
  • 与邻接矩阵不同,关联矩阵描述的是定点和边之间的关系。

一个无向无权图的例子(左边为图,右边为图的关联矩阵):

在这里插入图片描述

3.拉普拉斯矩阵(Laplacian Matrix)

  • 拉普拉斯矩阵(Laplacian Matrix):(也叫做 admittance matrix, Kirchhoff matrix)给定一个图 G = { V , E } {G}=\{{V}, {E}\} G={V,E},其邻接矩阵为 A A A,其拉普拉斯矩阵 L L L 定义为
    L = D − A \mathbf{L=D-A} L=DA
    其中 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))是度矩阵。更具体地,我们记拉普拉斯矩阵中每一个元素为 L i j L_{ij} Lij,那么每一个元素可以被定义为

在这里插入图片描述
它的每一行和列的加和为 0 0 0

在这里插入图片描述

  • 对称归一化的拉普拉斯矩阵,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=D21(DA)D21=ID21AD21

五、图的类型

前面根据边是否具有指向性,区分得到了有向图和无向图。接下来是根据更多不同的属性来对图进行划分。

1.图的拓扑结构

根据图的拓扑结构,规则网络(regular network)可以分为

  • 全连接网络(fully-connected network)(下图左)
  • 环形网络(ring-shape network)(下图中)
  • 星形网络(star-shape network)(下图右)
    在这里插入图片描述
    根据一些其他的不同性质,常见的图模型还有随机图(random graph)、小世界图(small world graph)和无标度图模型(scale-free graph)
    在这里插入图片描述

2.同质图和异质图

在深度学习中较常见的定义

  • 同质图(Homogeneous Graph):只有一种类型的节点和一种类型的边的图
  • 异质图(Heterogeneous Graph):存在多种类型的节点和多种类型的边的图(如下图)

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/166696a328164072b856966b20191cdb.pn

3.二分图

二分图或者二部图(Bipartite Graphs):节点分为两类,只有不同类的节点之间存在边。
在这里插入图片描述
更具体地,二分图是一个网络,其节点可以分为两个不相交的集合 U U U V V V,使得每个链接将 U U U 节点连接到 V V V 节点。换句话说,如果我们将 U U U 节点着色为绿色,将 V V V 节点着色为紫色,那么每个链接必须连接不同颜色的节点。我们可以为每个二分网络生成两个投影。如果两个 U U U 节点链接到二分表示中的相同 V V V 节点,则第一个投影通过链接连接两个 U U U 节点。如果它们连接到相同的 U U U 节点,则第二个投影通过链接连接 V V V 节点。
在这里插入图片描述


参考资料:
Datawhaledatawhale组队学习
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值