图神经网络实战(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链接预测算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/780002.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SCI一区级 | Matlab实现BO-Transformer-BiLSTM时间序列预测

SCI一区级 | Matlab实现BO-Transformer-BiLSTM时间序列预测 目录 SCI一区级 | Matlab实现BO-Transformer-BiLSTM时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.【SCI一区级】Matlab实现BO-Transformer-BiLSTM时间序列预测,贝叶斯优化Transfor…

C++_STL---list

list的相关介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 list的底层是带头双向循环链表结构,链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。…

WAIC | 上海人形机器人创新中心 | 最新演讲 | 详细整理

前言 笔者看了7月4号的人形机器人与具身智能发展论坛的直播,并在7月5日到了上海WAIC展会现场参观。这次大会的举办很有意义,听并看了各家的最新成果,拍了很多照片视频,部分演讲也录屏了在重复观看学习 稍后会相继整理创立穹彻智…

[c++] 可变参数模版

前言 可变参数模板是C11及之后才开始使用,学校的老古董编译器不一定能用 相信大家在刚入门c/c时都接触过printf函数 int printf ( const char * format, ... ); printf用于将数据格式化输出到屏幕上,它的参数非常有意思,可以支持任意数量,任意类型的多参数.而如果我们想实现类…

【Java探索之旅】继承概念_语法_父类的成员访问

文章目录 📑前言一、继承1.1 继承的概念1.2 继承语法1.3 继承发生后 二、父类的访问2.1 父类成员变量访问2.2 父类成员方法访问 🌤️全篇总结 📑前言 在面向对象编程中,继承是一种重要的概念,它允许我们创建一个类&…

[go-zero] 简单微服务调用

文章目录 1.注意事项2.服务划分及创建2.1 用户微服务2.2 订单微服务 3.启动服务3.1 etcd 服务启动3.2 微服务启动3.3 测试访问 1.注意事项 go-zero微服务的注册中心默认使用的是Etcd。 本小节将以一个订单服务调用用户服务来简单演示一下,其实订单服务是api服务&a…

VSCode设置好看清晰的字体!中文用鸿蒙,英文用Jetbrains Mono

一、中文字体——HarmonyOS Sans SC 1、下载字体 官网地址:https://developer.huawei.com/consumer/cn/design/resource/ 直接下载:https://communityfile-drcn.op.dbankcloud.cn/FileServer/getFile/cmtyPub/011/111/111/0000000000011111111.20230517…

昇思25天学习打卡营第18天 | K近邻算法实现红酒聚类

1、实验目的 了解KNN的基本概念;了解如何使用MindSpore进行KNN实验。 2、K近邻算法原理介绍 K近邻算法(K-Nearest-Neighbor, KNN)是一种用于分类和回归的非参数统计方法,最初由 Cover和Hart于1968年提出(Cover等人,1967)&#…

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…

ctfshow web sql注入 web242--web249

web242 into outfile 的使用 SELECT ... INTO OUTFILE file_name[CHARACTER SET charset_name][export_options]export_options:[{FIELDS | COLUMNS}[TERMINATED BY string]//分隔符[[OPTIONALLY] ENCLOSED BY char][ESCAPED BY char]][LINES[STARTING BY string][TERMINATED…

【三级等保】等保整体建设方案(Word原件)

建设要点目录: 1、系统定级与安全域 2、实施方案设计 3、安全防护体系建设规划 软件全文档,全方案获取方式:本文末个人名片直接获取。

数据结构——二叉树相关题目

1.寻找二叉树中数值为x的节点 //寻找二叉树中数值为x的节点 BTNode* TreeFind(BTNode* root, BTDataType x)//传过来二叉树的地址和根的地址,以及需要查找的数据 {if (root Null){return Null;}//首先需要先判断这个树是否为空,如果为空直接返回空if (…

基于python的数据分解-趋势-季节性-波动变化

系列文章目录 前言 时间序列数据的分解,一般分为趋势项,季节变化项和随机波动项。可以基于加法或者乘法模型。季节变化呈现出周期变化,因此也叫季节效应(周期)。 一、数据分解步骤 (1)估计时间序列的长期…

拓扑排序,PageRank(markov),实对称矩阵等

拓扑排序 多件事情有先后顺序,如何判断哪个先哪个后 拓扑排序算法: 1.读入图时,需要记录每个顶点的入度,以及相邻的所有顶点 2.将入度为0的顶点入队(先进先出) 3.取出队首元素a,&#xf…

rocketmq-console可视化界面功能说明

rocketmq-console可视化界面功能说明 登录界面OPS(运维)Dashboard(驾驶舱)Cluster(集群)Topic(主题)Consumer(消费者)Producer(生产者)Message(消息)MessageTrace(消息轨迹) rocketmq-console是rocketmq的一款可视化工具,提供了mq的使用详情等功能。 本章针对于rock…

基于springboot+vue+uniapp的高校宿舍信息管理系统小程序

开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…

springboot + mybatis 多数据源切换

参考的b站博主写的 配置文件: spring:datasource:db1:jdbc-url: jdbc:mysql://localhost:3306/interview_database?useUnicodetrue&characterEncodingutf-8&useSSLfalseusername: rootpassword: 12345driver-class-name: com.mysql.cj.jdbc.Driverdb2:jdbc-url: jdbc…

rancher管理多个集群

一、rancher部署 单独部署到一台机器上,及独立于k8s集群之外: 删除所有yum源,重新建yum源: # 建centos7.9的yum源 # cat CentOS-Base.repo # CentOS-Base.repo # # The mirror system uses the connecting IP address of the …

花所Flower非小号排名20名下载花所Flower

1、Flower花所介绍 Flower花所是一家新兴的数字货币交易平台,致力于为全球用户提供安全、便捷的交易体验。平台以其强大的技术支持和丰富的交易产品闻名,为用户提供多样化的数字资产交易服务,涵盖了主流和新兴数字货币的交易需求。 2. Flowe…

wordpress企业网站模板免费下载

大气上档次的wordpress企业模板,可以直接免费下载,连注册都不需要,网盘就可以直接下载,是不是嘎嘎给力呢 演示 https://www.jianzhanpress.com/?p5857 下载 链接: https://pan.baidu.com/s/1et7uMYd6--NJEWx-srMG1Q 提取码:…