图神经网络实战(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.xdnf.cn/news/1474215.html

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

相关文章

Open3D 计算点云的粗糙度

目录 一、概述 二、代码实现 2.1 方法一 2.2方法二 三、实现效果 3.1原始点云 3.2计算后的点云 一、概述 点粗糙度(Point Roughness)是点云数据处理中一个重要的几何特征,它描述了一个点附近表面的平滑程度或不规则程度。计算点粗糙度…

硬件开发笔记(二十四):贴片电容的类别、封装介绍,AD21导入贴片电容、原理图和封装库3D模型

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140241817 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

【手写数据库内核组件】01 解析树的结构,不同类型的数据结构组多层的链表树,抽象类型统一引用格式

不同类型的链表 ​专栏内容: postgresql使用入门基础手写数据库toadb并发编程 个人主页:我的主页 管理社区:开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 文章目录 不同类型…

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

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.概述 在去中心化控制及多任务环境中,多智能体合作问题因原始感官观察、高昂…

1、spring5.2.x源码解读之下载源码和编译

1、下载源码 1.1、git下载源码 git地址:https://gitcode.net/mirrors/spring-projects/spring-framework.git 1.2、源码导入idea 源码下载地址:https://gitcode.net/mirrors/spring-projects/spring-framework/-/archive/5.2.x/spring-framework-5.2…

LeetCode题练习与总结:直线上最多的点数--149

一、题目描述 给你一个数组 points ,其中 points[i] [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。 示例 1: 输入:points [[1,1],[2,2],[3,3]] 输出:3示例 2: 输入:points [[1,…

Golang | Leetcode Golang题解之第220题存在重复元素III

题目: 题解: func getID(x, w int) int {if x > 0 {return x / w}return (x1)/w - 1 }func containsNearbyAlmostDuplicate(nums []int, k, t int) bool {mp : map[int]int{}for i, x : range nums {id : getID(x, t1)if _, has : mp[id]; has {retu…

安卓备忘录App开发

安卓备忘录APP开发,文章末尾有源码和apk安装包 目标用户: 普通安卓手机用户,需要一个简单易用的备忘录App来记录和管理日常事务。 主要功能: 用户注册: 用户可以创建一个账号,输入用户名和密码。 用户登录: 用户可以通过用户名和密码登录到应用。 用户信息存储: 用户名和…

算法010:无重复字符的最长子串

无重复字符的最长子串. - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/longest-substring-without-repeating-characters/ 使用的算法:滑动窗口 在这个…

Qt/C++音视频开发78-获取本地摄像头支持的分辨率/帧率/格式等信息/mjpeg/yuyv/h264

一、前言 上一篇文章讲到用ffmpeg命令方式执行打印到日志输出,可以拿到本地摄像头设备信息,顺藤摸瓜,发现可以通过执行 ffmpeg -f dshow -list_options true -i video“Webcam” 命令获取指定摄像头设备的分辨率帧率格式等信息,会…

飞书 API 2-4:如何使用 API 将数据写入数据表

一、引入 上一篇创建好数据表之后,接下来就是写入数据和对数据的处理。 本文主要探讨数据的插入、更新和删除操作。所有的操作都是基于上一篇(飞书 API 2-4)创建的数据表进行操作。上面最终的数据表只有 2 个字段:序号和邮箱。序…

FairJob:促进在线广告系统公平性研究

在人工智能(AI)与人类动态的交汇处,既存在机遇也存在挑战,特别是在人工智能领域。尽管取得了进步,但根植于历史不平等中的持续偏见仍然渗透在我们的数据驱动系统中,这些偏见不仅延续了不公平现象&#xff0…

生成式AI的短板在于“Token”的存在

生成式AI模型处理文本的方式与人类不同。理解它们基于“token”的内部环境,可能有助于解释一些奇怪行为和固有局限性。 从小型设备上的Gemma到OpenAI领先行业的GPT-4o,大多数模型都是基于一种称为Transformer的架构。由于Transformer在将文本与其他类型…

git把本地分支的提交到自己的远程分支,然后合并特定远程分支

1、首先,把本地更改的代码放到暂存区:git add . 2、把暂存区的代码进行提交:可以直接在控制台提交也可以使用代码git commit -m "进行的操作的注释" 提交前: 提交后: 3、使用git pull拉取代码(这…

(南京观海微电子)——MOS管原理及应用区别

MOS管: 全称为金属氧化物半导体场效应管(Metal Oxide Semiconductor Field Effect Transistor),也被称为MOSFET(Metal-Oxide-Semiconductor Field-Effect Transistor)。它是一种半导体器件,常用…

图论·Day01

P3371 P4779 P3371 【模板】单源最短路径(弱化版) 注意的点: 边有重复,选择最小边!对于SPFA算法容易出现重大BUG,没有负权值的边时不要使用!!! 70分代码 朴素板dijsk…

【pytorch20】多分类问题

网络结构以及示例 该网络的输出不是一层或两层的,而是一个十层的代表有十分类 新建三个线性层,每个线性层都有w和b的tensor 首先输入维度是784,第一个维度是ch_out,第二个维度才是ch_in(由于后面要转置),没有经过softmax函数和…

Fast R-CNN(论文阅读)

论文名:Fast R-CNN 论文作者:Ross Girshick 期刊/会议名:ICCV 2015 发表时间:2015-9 ​论文地址:https://arxiv.org/pdf/1504.08083 源码:https://github.com/rbgirshick/fast-rcnn 摘要 这篇论文提出了一…

基于java+springboot+vue实现的校园外卖服务系统(文末源码+Lw)292

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,外卖信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广…

Stream流真的很好,但答应我别用toMap()

你可能会想,toList 和 toSet 都这么便捷顺手了,当又怎么能少得了 toMap() 呢。 答应我,一定打消你的这个想法,否则这将成为你噩梦的开端。 让我们先准备一个用户实体类。 Data AllArgsConstructor public class User { priv…