图神经网络实战(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 k1 个邻居相连)
  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.mzph.cn/web/41187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将大型语言模型模块化打造协作智能体

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…

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…

Node.js-path 模块

path 模块 path 模块提供了 操作路径 的功能,如下是几个较为常用的几个 API: 代码实例: const path require(path);//获取路径分隔符 console.log(path.sep);//拼接绝对路径 console.log(path.resolve(__dirname, test));//解析路径 let pa…

vulhub-activemq(CVE-2016-3088)

在 Apache ActiveMQ 5.12.x~5.13.x 版本中,默认关闭了 fileserver 这个应用(不过,可以在conf/jetty.xml 中开启);在 5.14.0 版本后,彻底删除了 fileserver 应用。【所以在渗透测试过程中要确定好 ActiveMQ …

数据结构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 …

【反悔贪心 反悔堆】1642. 可以到达的最远建筑

本文涉及知识点 反悔贪心 反悔堆 LeetCode1642. 可以到达的最远建筑 给你一个整数数组 heights ,表示建筑物的高度。另有一些砖块 bricks 和梯子 ladders 。 你从建筑物 0 开始旅程,不断向后面的建筑物移动,期间可能会用到砖块或梯子。 当…

MATLAB 2024b 更新了些什么?

MATLAB 2024b版本已经推出了预览版,本期介绍一些MATLAB部分的主要的更新内容。 帮助浏览器被移除 在此前的版本,当我们从MATLAB中访问帮助文档时,默认会通过MATLAB的帮助浏览器(Help browser)。 2024b版本开始&…

【Unity数据交互】如何Unity中读取Ecxel中的数据

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 专栏交流🧧&…

医院挂号系统小程序的设计

管理员账户功能包括:系统首页,个人中心,患者管理,医生管理,专家信息管理,科室管理,预约信息管理,系统管理 微信端账号功能包括:系统首页,专家信息&#xff0…

数据结构算法-排序(一)-冒泡排序

什么是冒泡排序 冒泡排序:在原数组中通过相邻两项元素的比较,交换而完成的排序算法。 算法核心 数组中相邻两项比较、交换。 算法复杂度 时间复杂度 实现一次排序找到最大值需要遍历 n-1次(n为数组长度) 需要这样的排序 n-1次。 需要 (n-1) * (n-1) —…

【Linux进阶】文件系统7——文件系统简单操作

1.磁盘与目录的容量 现在我们知道磁盘的整体数据是在超级区块中,但是每个文件的容量则在inode 当中记载。 那在命令行模式下面该如何显示这几个数据?下面就让我们来谈一谈这两个命令: df:列出文件系统的整体磁盘使用量&#xf…

Poker Game, Run Fast

Poker Game, Run Fast 扑克&#xff1a;跑得快 分门别类&#xff1a; 单张从小到大默认 A < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < 10 < J < Q < K 跑得快&#xff1a;单张从小到大 3 < 4 < 5 < 6 < 7 < 8 < 9 < 10 &…

javaweb个人主页设计(html+css+js)

目录 1 前言和要求 1.1 前言 1.2 设计要求 2 预览 2.1 主页页面 2.2 个人简介 2.3 个人爱好 2.4 个人成绩有代码&#xff0c;但是图片已省略&#xff0c;可以根据自己情况添加 2.5 收藏夹 3 代码实现 3.1 主页 3.2 个人简介 3.3 个人爱好 3.4 个人成绩&#xff…

求职成功率的算法,与葫芦娃救爷爷的算法,有哪些相同与不同

1 本节概述 通过在B站百刷葫芦娃这部儿时剧&#xff0c;我觉得可以从中梳理出一些算法&#xff0c;甚至可以用于求职这个场景。所以&#xff0c;大家可以随便问我葫芦娃的一些剧情和感悟&#xff0c;我都可以做一些回答。 2 葫芦娃救爷爷有哪些算法可言&#xff1f; 我们知道…