图论与图学习基础教程#
引言#
图(Graph)是一种表示实体及其关系的强大数据结构,广泛应用于社交网络、分子结构分析、推荐系统等领域。本教程将介绍图论基础知识、图的表示方法、常见类型及图学习任务,帮助读者构建对图数据的系统性理解。
一、预习资料#
-
图论基础
- 核心概念:节点(Node/Vertex)、边(Edge)、邻接矩阵(Adjacency Matrix)。
- 推荐阅读:GeeksforGeeks Graph Theory(重点阅读图的定义与基本操作)。
- 目标:理解 “节点表示实体,边表示关系” 的核心思想。
-
机器学习基础
- 关键知识点:监督学习(带标签训练)、非监督学习(无标签聚类)、半监督学习(部分标签)。
- 推荐工具:Scikit-learn Documentation(熟悉分类与聚类算法)。
- 目标:掌握如何将机器学习方法应用于结构化数据。
二、图的表示方法#
1. 邻接矩阵(Adjacency Matrix)#
- 定义:用方阵 (A) 表示节点间的连接关系。若节点 ( i ) 与 ( j ) 之间有边,则 ( A [i][j] = 1 )(无权图)或边的权重(加权图)。
- 示例:
# 3个节点的无向图(节点0-1、1-2相连) Adjacency Matrix = [ [0, 1, 0], [1, 0, 1], [0, 1, 0] ]
- 特点:
- 优点:快速判断两节点是否相连(时间复杂度 (O (1) ))。
- 缺点:空间复杂度 (O (N^2) ),不适用于稀疏图(边数远小于 ( N^2 ) 的图)。
2. 邻接列表(Adjacency List)#
- 定义:用列表存储每个节点的邻居。例如,节点 (i) 的邻居存储为列表 ( [j, k, ...] )。
- 示例:
# 同上3个节点图的邻接列表 Adjacency List = { 0: [1], 1: [0, 2], 2: [1] }
- 特点:
- 优点:空间复杂度 (O (N + E) ),适合稀疏图。
- 缺点:查询两节点是否相连需遍历列表(时间复杂度 (O (d) ),( d ) 为节点度数)。
三、图的类型#
1. 有向图 vs 无向图#
类型 | 边的方向 | 示例场景 |
---|---|---|
无向图 | 边无方向(双向) | 社交网络中的好友关系 |
有向图 | 边有方向(单向) | 网页超链接、微博关注关系 |
- 邻接矩阵区别:无向图的邻接矩阵是对称的,有向图不一定对称。
2. 加权图 vs 非加权图#
类型 | 边是否带权重 | 示例场景 |
---|---|---|
非加权图 | 边权重相同(通常为 1) | 论文合作网络(合作关系存在与否) |
加权图 | 边有权重(如距离、概率) | 交通网络(道路长度)、推荐系统(用户相似度) |
四、常见图学习任务#
1. 节点分类(Node Classification)#
- 目标:预测图中节点的类别标签。
- 示例:
- 社交网络中预测用户的兴趣领域(标签:科技、体育等)。
- 引用网络中预测论文的研究主题。
- 方法:利用图神经网络(GNN)聚合邻居信息(如 GCN、GraphSAGE)。
2. 链接预测(Link Prediction)#
- 目标:预测节点间是否存在缺失的边。
- 示例:
- 推荐系统中预测用户可能购买的商品(用户 - 商品边)。
- 社交平台推荐 “可能认识的人”。
- 方法:计算节点对的相似度(如 DeepWalk、Node2Vec)。
3. 图分类(Graph Classification)#
- 目标:预测整个图的类别。
- 示例:
- 化学分子图中判断分子是否具有毒性。
- 代码流程图分类(如检测恶意软件)。
- 方法:全局池化(Global Pooling)后接全连接层(如 Graph Kernels、GIN)。
五、结语#
掌握图论基础与图的表示方法是进行图学习的前提。后续可结合具体算法(如 PageRank、GNN)深入实践。建议使用工具如 NetworkX(图操作)和 PyTorch Geometric(图神经网络)进行代码实战。
下一步学习建议:
- 实践邻接矩阵与邻接列表的相互转换(如用 Python 字典实现邻接列表)。
- 在 Kaggle 上尝试图分类任务(如TUDatasets)。