图神经网络实战(16)——经典图生成算法

news2024/10/6 3:38:00

图神经网络实战(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.coloradmin.cn/o/1904250.html

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

相关文章

华为OSPF配置DR和BDR与指定DR

基础配置 <Huawei>sys #进入配置模式 Enter system view, return user view with CtrlZ. [Huawei]un in en #关闭报文弹窗 Info: Information center is disabled. [Huawei]sys R1 #设备名更改为R1 [R1]int g0/0/0 …

Vue3中的Composables组合式函数,Vue3实现minxins

Vue3中的Composables是什么 Vue3中的Composables 简单理解其实就是类React Hooks式的组合式函数封装方法。 Vue官方称为Composables 组合式函数。 1.抽离复用逻辑时 Vue2写法 &#xff08;1&#xff09;Vue2 中的mixins混入器写法缺点 (Vue3 optionsApi写法同理) 新建minxins…

硅纪元视角 | 中国电信“星辰大模型·软件工厂”,两分钟完成应用开发,效率飞跃!

在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展&#xff0c;捕捉行业动态&#xff1b;提供深入的新闻解读&#xff0c;助您洞悉技术背后的逻辑&#xff1b;汇聚行业专家的见解&#xff0c;…

动手学深度学习(Pytorch版)代码实践 -循环神经网络- 56门控循环单元(`GRU`)

56门控循环单元&#xff08;GRU&#xff09; 我们讨论了如何在循环神经网络中计算梯度&#xff0c; 以及矩阵连续乘积可以导致梯度消失或梯度爆炸的问题。 下面我们简单思考一下这种梯度异常在实践中的意义&#xff1a; 我们可能会遇到这样的情况&#xff1a;早期观测值对预测…

Windows电脑下载、安装VS Code的方法

本文介绍Visual Studio Code&#xff08;VS Code&#xff09;软件在Windows操作系统电脑中的下载、安装、运行方法。 Visual Studio Code&#xff08;简称VS Code&#xff09;是一款由微软开发的免费、开源的源代码编辑器&#xff0c;支持跨平台使用&#xff0c;可在Windows、m…

C++ 模版进阶

目录 前言 1. 非类型模版参数 1.1 概念与讲解 1.2 array容器 2. 模版的特化 2.1 概念 2.2 函数模版特化 2.3 类模版特化 2.3.1 全特化 2.3.2 偏特化 3.模版的编译分离 3.1 什么是分离编译 3.2 模版的分离编译 3.3 解决方法 4. 模版总结 总结 前言 本篇文章主要…

在mac下 Vue2和Vue3并存 全局Vue2环境创建Vue3新项目(Vue cli2和Vue cli4)

全局安装vue2 npm install vue-cli -g自行在任意位置创建一个文件夹vue3&#xff0c;局部安装vue3,注意不要带-g npm install vue/cli安装完成后&#xff0c;进入目录&#xff0c;修改vue为vue3 找到vue3/node-moudles/.bin/vue&#xff0c;把vue改成vue3。 对环境变量进行配置…

【6】图像分类部署

【6】图像分类部署 文章目录 前言一、将pytorch模型转为ONNX二、本地终端部署2.1. ONNX Runtime部署2.2. pytorch模型部署&#xff08;补充&#xff09; 三、使用flask的web网页部署四、微信小程序部署五、使用pyqt界面化部署总结 前言 包括将训练好的模型部署在本地终端、web…

在Linux操作系统中去修复/etc/fstab文件引起的系统故障。

如果/etcfstab文件中发生错误&#xff0c;有可能导致系统无法正常启动。 比如&#xff1a;系统里的一块磁盘被删除&#xff0c;但是/etc/fstab中关于这块磁盘的信息依然被保存在文件/etc/fstab中。 主要看倒数后两行&#xff0c;系统提示&#xff0c;敲ctrlD或者是直接输入密码…

LeetCode 744, 49, 207

目录 744. 寻找比目标字母大的最小字母题目链接标签思路代码 49. 字母异位词分组题目链接标签思路代码 207. 课程表题目链接标签思路代码 744. 寻找比目标字母大的最小字母 题目链接 744. 寻找比目标字母大的最小字母 标签 数组 二分查找 思路 本题比 基础二分查找 难的一…

redhat7.x 升级openssh至openssh-9.8p1

1.环境准备&#xff1a; OS系统&#xff1a;redhat 7.4 2.备份配置文件&#xff1a; cp -rf /etc/ssh /etc/ssh.bak cp -rf /usr/bin/openssl /usr/bin/openssl.bak cp -rf /etc/pam.d /etc/pam.d.bak cp -rf /usr/lib/systemd/system /usr/lib/systemd/system.bak 3.安装…

阿里云存储应用

如何做好权限控制 小浩在梳理门户网站静态资源时&#xff0c;发现有些资源是仅内部员工可访问&#xff0c;有些资源是特定的注册客户可访问&#xff0c;还有些资源是匿名客户也可以访问。针对不同场景、不同用户&#xff0c;小浩该如何规划企业门户网站静态资源的权限控制呢&a…

解析商场智能导视系统背后的科技:AR导航与大数据如何助力商业运营

在布局复杂的大型商场中&#xff0c;顾客常常面临寻找特定店铺的挑战。商场的规模庞大&#xff0c;店铺众多&#xff0c;使得顾客在享受购物乐趣的同时&#xff0c;也不得不面对寻路的难题。维小帮商场智能导航导视系统的电子地图、AR导航营销能为顾客提供更加便捷的购物体验。…

Linux—网络设置

目录 一、ifconfig——查看网络配置 1、查看网络接口信息 1.1、查看所有网络接口 1.2、查看具体的网络接口 2、修改网络配置 3、添加网络接口 4、禁用/激活网卡 二、hostname——查看主机名称 1、查看主机名称 2、临时修改主机名称 3、永久修改主机名称 4、查看本…

2023年了,还在手动px转rem吗?

px-to-rem 使用amfe-flexible和postcss-pxtorem在webpack中配置px转rem npm i amfe-flexible -Snpm i postcss-pxtorem -D在main.js中 import flexible from amfe-flexible Vue.use(flexible);index.html中 <meta name"viewport" content"widthdevice-w…

用 Echarts 画折线图

https://andi.cn/page/621503.html

Floyd判圈算法——环形链表(C++)

Floyd判圈算法(Floyd Cycle Detection Algorithm)&#xff0c;又称龟兔赛跑算法(Tortoise and Hare Algorithm)&#xff0c;是一个可以在有限状态机、迭代函数或者链表上判断是否存在环&#xff0c;求出该环的起点与长度的算法。 …

Java语言程序设计篇一

Java语言概述 Java语言起源编程语言最新排名名字起源Java语言发展历程Java语言的特点Java虚拟机垃圾回收Java语言规范Java技术简介Java程序的结构Java程序注意事项&#xff1a;注释编程风格练习 Java语言起源 1990年Sun公司提出一项绿色计划。1992年语言开发成功最初取名为Oak…

vue3使用方式汇总

1、引入iconfont阿里图库图标&#xff1a; 1.1 进入阿里图标网站&#xff1a; iconfont阿里&#xff1a;https://www.iconfont.cn/ 1.2 添加图标&#xff1a; 1.3 下载代码&#xff1a; 1.4 在vue3中配置代码&#xff1a; 将其代码复制到src/assets/fonts/目录下&#xff1…

大众点评2024年全球必吃榜清单

大众点评2024年全球必吃榜清单共2797家&#xff0c;奇怪的是官方并没有发布详细清单&#xff0c;只发布了新闻通稿介绍大概情况。这里做一些整理。 按城市分布情况&#xff0c;数量如下 上海 144 北京 137 成都 96 重庆 93 广州 81 深圳 79 武汉 69 苏州 67 杭州 61 …