GNN图神经网络入门 - Task1
1. 基础知识
-
定义:图(G)定义为(V,E) ,记为G=(V,E) 。其中: V是顶点(Vertex)的非空有限集合,记为V(G);E是无序集V&V的一个子集,记为E(G) 。
i.类别型的标签(label)
ii.数值型的(numeric)属性(attribute) -
图的种类
1)有向图&无向图 - 边是否有方向
2)非加权图&加权图(有权图&无权图)- 边是否有权重
3)连通图(connected graph)与非连通图 -
i.连通图 - 只包含一个连通分量(即其自身)的(无向)图
ii.强连通/弱连通 - 有向图
iii.连通分量(connected component)
4)二部图(Bipartite Graphs)/二分图- 把一个图的顶点划分为两个不相交子集 ,使得每一条边都分别连接两个集合中的顶点。
5)同质图(Homogeneous Graph)&异质图(Heterogeneous Graph) -
邻接矩阵 - 无向图的邻接矩阵是对称的。
-
图的属性:
1)节点的度(degree)- 边的权重和;出度(out degree)/入度(in degree)
2)邻接节点(neighbors)- 邻接节点/k跳远的邻接节点(neighbors with k-hop)
3)行走(walk)- 指从图上一点到另外一点所经过的可以重合的点和不会重合的边的集合,是非空交替序列(不能算作是特殊的图)。
i.轨迹(trail) - walk没有重合的边,但有可能有重复的点。
ii.路径(path) - walk中每条线,每个点都各不相同。是结点不可重复的“行走”。
iii.最短路径(shortest path)
iv.直径(diameter) - 连通图所有结点对之间的最短路径的最小值 -
子图(subgraph)
-
拉普拉斯矩阵(Laplacian Matrix)
-
对称归一化的拉普拉斯矩阵(Symmetric normalized Laplacian)
2.机器学习任务
- 节点预测(预测节点的类别或某类属性的取值):潜在客户分类、消费能力预测
- 边预测(预测两个节点间是否存在链接):知识图谱补全(Knowledge graph completion)、好友推荐、商品推荐
- 图的预测(对不同的图进行分类或预测图的属性):分子属性预测
- 节点聚类(检测节点是否形成一个社区):社交圈检测
3.图数据神经网络难点
- 适用于不同度的节点;
- 节点表征的计算与邻接节点的排序无关;
- 不但能够根据节点信息、邻接节点的信息和边的信息计算节点表征,还能根据图拓扑结构计算节点表征。
4.PyTorch Geometric (PyG)
Installation of of PyTorch Geometric
pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-${TORCH}+${CUDA}.html
pip install torch-sparse -f https://pytorch-geometric.com/whl/torch-${TORCH}+${CUDA}.html
pip install torch-cluster -f https://pytorch-geometric.com/whl/torch-${TORCH}+${CUDA}.html
pip install torch-spline-conv -f https://pytorch-geometric.com/whl/torch-${TORCH}+${CUDA}.html
pip install torch-geometric
5.练习
通过继承Data类实现一个类,专门用于表示“机构-作者-论文”的网络。
该网络包含“机构“、”作者“和”论文”三类节点,以及“作者-机构“和“作者-论文“两类边。
对要实现的类的要求:
1)用不同的属性存储不同节点的属性;
2)用不同的属性存储不同的边;
3)逐一实现获取不同节点数量的方法。
类定义
import torch
from torch_geometric.data import Data
class myOap(Data):
def __init__(self, x=None):
r"""
Args:
x (List): 列表[机构,作者,论文]
"""
self.x = x
r"""
类型: