圖神經網絡實戰(16)——經典圖生成算法

圖神經網絡實戰(16)——經典圖生成算法

    • 0. 前言
    • 1. 圖生成技術
    • 2. Erd?s–Rényi模型
    • 3. 小世界模型
    • 小結
    • 系列鏈接

0. 前言

圖生成算法是指用于創建模擬圖或網絡結構的算法,這些算法可以根據特定的規則和概率分布生成具有特定屬性的圖,用于模擬各種復雜系統,如社交網絡、生物網絡、交通網絡等。傳統圖生成技術已有數十年歷史,并可用作各種應用的基準,但這些技術在生成的圖類型上存在限制。這些方法大多數都專注于輸出特定的拓撲結構,因此不能簡單地模仿給定網絡。在本節中,我們將介紹兩種經典圖生成技術:Erd?s–Rényi 模型和小世界 (small-world) 模型。

1. 圖生成技術

圖生成是生成新圖的技術,并且希望所生成的圖具有真實世界中圖的性質。作為一個研究領域,它為了解圖如何工作和演化提供了新思路。它還可以直接應用于數據增強、異常檢測、藥物發現等領域。我們可以將圖生成分為兩種類型:一種是模仿給定圖生成具有類似性質的逼真圖數據 (例如,數據增強),另一種是目標導向圖生成,即創建優化特定指標的圖(例如,分子生成)。

2. Erd?s–Rényi模型

Erd?s–Rényi 模型是最簡單、最流行的隨機圖 (random graph model) 模型,由匈牙利數學家 Paul Erd?sAlfréd Rényi1959 年提出,該模型有兩個變體: G ( n , p ) G(n, p) G(n,p) G ( n , M ) G(n, M) G(n,M)
G ( n , p ) G(n, p) G(n,p) 模型中:給定節點數量和節點連接的概率,嘗試隨機地將每個節點與其他節點連接起來,以創建最終的圖。這意味著存在 C 2 n C_2^n C2n? 種可能的連接。另一種理解概率 p p p 的方式是將其視為改變網絡密度的參數。使用 networkx 庫可以直接實現 G ( n , p ) G(n, p) G(n,p) 模型。

(1) 導入 networkx 庫:

import networkx as nx
import matplotlib.pyplot as plt

(2) 使用 nx.erdos_renyi_graph() 函數生成一個有 10 個節點 (n = 10)、邊創建概率為 0.5 (p = 0.5) 的圖 G G G

G = nx.erdos_renyi_graph(10, 0.5)

(3) 使用 nx.circular_layout() 函數為生成的節點布局 pos,也可以使用其他布局,但這種布局便于比較不同的 p 值:

pos = nx.circular_layout(G) 

(4) 使用 nx.draw()pos 布局繪制圖 G G G

nx.draw(G, pos=pos)
plt.show()

請添加圖片描述

0.10.9 的概率重復以上過程:

G = nx.erdos_renyi_graph(10, 0.1)
pos = nx.circular_layout(G) 
nx.draw(G, pos=pos)
plt.axis('off')
plt.show()G = nx.erdos_renyi_graph(10, 0.9)
pos = nx.circular_layout(G) 
nx.draw(G, pos=pos)
plt.axis('off')
plt.show()

生成圖

可以看到,當 p p p 值較低時,存在許多孤立節點,而當 p p p 值較高時,圖中的節點具有高度互聯性。
G ( n , M ) G(n,M) G(nM) 模型中,從所有具有 n n n 個節點和 M M M 條邊的圖中隨機選擇一個圖。例如,如果 n = 3 n = 3 n=3 M = 2 M = 2 M=2,則有三個可能的圖,如下圖所示, G ( n , M ) G(n, M) G(n,M) 模型將隨機選擇其中一個圖。這是解決同一問題的不同方法,但通常不如 G ( n , p ) G(n, p) G(n,p) 模型流行,因為一般情況下它更難以分析:

生成圖

也可以使用 nx.gnm_random_graph() 函數在 Python 中實現 G ( n , M ) G(n, M) G(n,M) 模型:

G = nx.gnm_random_graph(3, 2)
pos = nx.circular_layout(G) 
nx.draw(G, pos=pos)
plt.axis('off')
plt.show()

生成圖

G ( n , p ) G(n, p) G(n,p) 模型假設鏈接是獨立的,即它們不會相互干擾。然而,對于現實世界中的大多數圖而言,這一假設并不成立。

3. 小世界模型

小世界 (small-world) 模型于 1998 年由 Duncan WattsSteven Strogatz 提出,旨在模仿生物和社交網絡的行為。其主要思想是,現實世界的網絡并非完全隨機(如 Erd?s–Rényi 模型),但也并非完全規則(如網格),通常拓撲結構介于兩者之間,因此我們可以使用系數對其進行插值。小世界模型生成的圖兼具以下特點:

  • 路徑短:網絡中任意兩個節點之間的平均距離相對較小,這使得信息很容易在整個網絡中快速傳播
  • 聚類系數高: 網絡中的節點往往彼此緊密相連,形成密集的節點集群

許多算法都具有小世界特性。接下來,我們將介紹最初的 Watts-Strogatz 模型,可以通過以下步驟實現:

  1. 初始化一個有 n n n 個節點的圖
  2. 每個節點與其 k k k 個最近的鄰居相連(如果 k k k 為奇數,則與 k ? 1 k - 1 k?1 個鄰居相連)
  3. 節點 i i i j j j 之間的每個鏈接在 i i i k k k ( k k k 為另一個隨機節點)之間重新連接的概率為 p p p

Python 中,可以通過調用 nx.watts_strogatz_graph() 函數實現:

G = nx.watts_strogatz_graph(10, 4, 0.5)
pos = nx.circular_layout(G) 
nx.draw(G, pos=pos)
plt.axis('off')
plt.show()

生成圖

Erd?s–Rényi 模型一樣,可以用不同的概率 p p p 重復相同的過程:

生成圖

可以看到,當 p = 0 p = 0 p=0 時,圖是完全規則的。相反,當 p = 1 p = 1 p=1 時,由于每個鏈接都被重新連接,所以圖完全是隨機的。通過具有中心節點和局部聚類的平衡圖來在這兩個極端之間獲得一個圖。
然而,Watts-Strogatz 模型并不能產生真實的節點度分布。它還需要固定數量的節點,這意味著它不能用于網絡的增長。

小結

本節中,介紹了經典的圖生成算法,包括 Erd?s-Rényi 模型和小世界模型。Erd?s-Rényi 模型是最早的隨機圖模型之一,它根據一定的連接概率在節點之間添加邊,從而創建一個隨機圖。小世界模型通過重連邊的方式在規則網絡上引入隨機性,從而模擬了許多真實世界網絡的“小世界”特性,即短路徑長度和高聚類系數。并使用 networkx 實現了這兩種模型以生成圖數據。

系列鏈接

圖神經網絡實戰(1)——圖神經網絡(Graph Neural Networks, GNN)基礎
圖神經網絡實戰(2)——圖論基礎
圖神經網絡實戰(3)——基于DeepWalk創建節點表示
圖神經網絡實戰(4)——基于Node2Vec改進嵌入質量
圖神經網絡實戰(5)——常用圖數據集
圖神經網絡實戰(6)——使用PyTorch構建圖神經網絡
圖神經網絡實戰(7)——圖卷積網絡(Graph Convolutional Network, GCN)詳解與實現
圖神經網絡實戰(8)——圖注意力網絡(Graph Attention Networks, GAT)
圖神經網絡實戰(9)——GraphSAGE詳解與實現
圖神經網絡實戰(10)——歸納學習
圖神經網絡實戰(11)——Weisfeiler-Leman測試
圖神經網絡實戰(12)——圖同構網絡(Graph Isomorphism Network, GIN)
圖神經網絡實戰(13)——經典鏈接預測算法
圖神經網絡實戰(14)——基于節點嵌入預測鏈接
圖神經網絡實戰(15)——SEAL鏈接預測算法

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/41187.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41187.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41187.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度解析:如何利用Python高效挖掘SQLite潛力

Python與SQLite共舞:構建高效輕量級數據庫應用實戰 Python,作為一門優雅且強大的編程語言,搭配輕巧靈活的SQLite數據庫,無疑為我們提供了揮灑創意的完美畫布。今天,咱們就通過一個鮮活的案例,一起探索如何…

leetcode77組合——經典回溯算法

本文主要講解組合的要點與細節,以及回溯算法的解題步驟,按照步驟思考更方便理解 c和java代碼如下,末尾 給定兩個整數 n 和 k,返回范圍 [1, n] 中所有可能的 k 個數的組合。 你可以按 任何順序 返回答案。 具體要點: …

將大型語言模型模塊化打造協作智能體

B UILDING C OOPERATIVE E MBODIED A GENTS MODULARLY WITH L ARGE L ANGUAGE M ODELS 論文鏈接: https://arxiv.org/abs/2307.02485https://arxiv.org/abs/2307.02485 1.概述 在去中心化控制及多任務環境中,多智能體合作問題因原始感官觀察、高昂…

【機器學習】機器學習重塑廣告營銷:精準觸達,高效轉化的未來之路

📝個人主頁🌹:Eternity._ 🌹🌹期待您的關注 🌹🌹 ?目錄 📒1. 引言📙2. 機器學習基礎與廣告營銷的結合🧩機器學習在廣告營銷中的核心應用領域🌹用…

【React】React18 Hooks 之 useReducer

目錄 useReducer案例1:useReducer不帶初始化函數案例2:useReducer帶初始化函數注意事項1:dispatch函數不會改變正在運行的代碼的狀態注意事項2:獲取dispatch函數觸發后 JavaScript 變量的值注意事項3:觸發了reducer&am…

webrtc sfu性能壓測

1. 前言 不少網友最近私信我,咨詢webrtc sfu服務端性能問題,SRS開源服務能支持多少路webrtc流,mediasoup單房間能支持多少個人,推流能接入多少路,拉流能拉取多少路?720p能支持多少路,360p能支持…

Spring Boot集成olingo快速入門demo

1.什么是olingo? Apache Olingo 是個 Java 庫,用來實現 Open Data Protocol (OData)。 Apache Olingo 包括服務客戶端和 OData 服務器方面。 Open Data Protocol (開放數據協議,OData) 是用來查詢和更新數據的一種W…

【吊打面試官系列-MyBatis面試題】MyBatis 實現一對多有幾種方式,怎么操作的?

大家好,我是鋒哥。今天分享關于 【MyBatis 實現一對多有幾種方式,怎么操作的?】面試題,希望對大家有幫助; MyBatis 實現一對多有幾種方式,怎么操作的? 有聯合查詢和嵌套查詢。聯合查詢是幾個表聯合查詢,只查詢一次,通過…

觀察矩陣(View Matrix)、投影矩陣(Projection Matrix)、視口矩陣(Window Matrix)及VPM矩陣及它們之間的關系

V表示攝像機的觀察矩陣(View Matrix),它的作用是把對象從世界坐標系變換到攝像機坐標系。因此,對于世界坐標系下的坐標值worldCoord(x0, y0, z0),如果希望使用觀察矩陣VM將其變換為攝像機坐標系下的坐標值localCoord(x…

【滲透入門】HTTP請求包

文章目錄 前言HTTP GET請求包HTTP POST請求包Content-Type 前言 HTTP(HyperText Transfer Protocol)請求包,是Web通信的基礎。HTTP請求包格式主要由以下幾部分組成: 請求行:包含了請求方法(GET、POST、PUT…

32單片機,C語言與匯編聯合編譯的幾種方式

適用編譯器:Keil5 方式一: 單獨創建一個.s匯編文件,在匯編文件內對函數進行EXPORT聲明 r0寄存器是函數傳入的第一個參數,r1寄存器是函數傳入的第二個參數,以次類推。參數最多不確定是到r4為止,還是到r12…

Node.js-path 模塊

path 模塊 path 模塊提供了 操作路徑 的功能,如下是幾個較為常用的幾個 API: 代碼實例: const path require(path);//獲取路徑分隔符 console.log(path.sep);//拼接絕對路徑 console.log(path.resolve(__dirname, test));//解析路徑 let pa…

Robust Regression

最小二乘回歸受數據中的離群點的影響較大,穩健回歸通過降低離群點的影響緩解此問題。M估計法是穩健回歸的重要方法之一,M 估計法的目標函數為: m i n ∑ ρ ( ? i ) m i n ∑ ρ ( y i ? β ^ ? X i ) min\sum\rho(\epsilon_i) min\sum\…

vulhub-activemq(CVE-2016-3088)

在 Apache ActiveMQ 5.12.x~5.13.x 版本中,默認關閉了 fileserver 這個應用(不過,可以在conf/jetty.xml 中開啟);在 5.14.0 版本后,徹底刪除了 fileserver 應用。【所以在滲透測試過程中要確定好 ActiveMQ …

word 使用手冊

word 文檔中如何將下行的指定文字退格到上行中 就像是這樣的 編號:111 密碼:222 編號:123 密碼:321 編號:124 密碼:331 變成 編號:111密碼:222 編號:123密碼&#xff1…

數據結構1:C++實現變長數組

數組作為線性表的一種,具有內存連續這一特點,可以通過下標訪問元素,并且下標訪問的時間復雜的是O(1),在數組的末尾插入和刪除元素的時間復雜度同樣是O(1),我們使用C實現一個簡單的邊長數組。 數據結構定義 class Arr…

華為OD機試 - 來自異國的客人(Java 2024 D卷 100分)

華為OD機試 2024D卷題庫瘋狂收錄中,刷題點這里 專欄導讀 本專欄收錄于《華為OD機試(JAVA)真題(D卷C卷A卷B卷)》。 刷的越多,抽中的概率越大,每一題都有詳細的答題思路、詳細的代碼注釋、樣例測…

新手教學系列——前后端分離API優化版

在之前的文章《Vue 前后端分離開發:懶人必備的API SDK》中,我介紹了通過Object對象自動生成API的方法。然而,之前的代碼存在一些冗余之處。今天,我將分享一個改進版本,幫助你更高效地管理API。 改進版API SDK 首先,讓我們來看一下改進后的代碼: import request from …

深入理解 KVO

在 iOS 中,KVO(Key-Value Observing)是一個強大的觀察機制,它的底層實現相對復雜。KVO 利用 Objective-C 的動態特性,為對象的屬性提供觀察能力。 KVO 的底層實現 1. 動態子類化 當一個對象的屬性被添加觀察者時&am…

6、Redis系統-數據結構-01-String

Redis 數據結構簡介 前言 Redis 是一個高性能的內存數據庫,其關鍵在于其數據結構的設計。Redis 數據結構是指底層實現 Redis 鍵值對中值的數據類型的方式。它包括了以下幾種主要對象: String(字符串)對象:最基本的數…