圖論與圖學習基礎教程#
引言#
圖(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)。