图采样、随机游走、subgraph的实现

诸神缄默不语-个人CSDN博文目录

本博文主要关注如何用代码实现图采样、随机游走、subgraph(为什么这些东西放在一起写,我感觉还蛮直觉的)。
随机游走和subgraph我之前都写过不少博文了,可以参考↑
这个主要是我前年还在干GNN时候接到过一个做数据集的项目,所以需要实现这些小功能。不过后来我不干那个项目了,也不干GNN了……然后这是我最近突然翻出来我当年写的有道云笔记,所以总结整理一下发出来分享技术。

关于subgraph还可以参考维基百科:Induced subgraph - Wikipedia

文章目录

  • 1. 图采样
  • 2. 随机游走
  • 3. subgraph

1. 图采样

随机游走算是一种图采样的方式吧,所以放到一块写。

  1. 主要参考这个项目(用NetworkX实现的):Ashish7129/Graph_Sampling: Graph Sampling is a python package containing various approaches which samples the original graph according to different sample sizes.
    1. sampling by exploration(用随机游走或者traversal实现采样)
      1. Simple Random Walk Sampling (SRW)(node2vec差不多就是这个意思)
        在这里插入图片描述
        随机选择一个起始节点,随机游走直至达到指定长度
        这个的实现方式:每走一步,抽样这个邻居节点,及这两个节点之间产生的边。考虑到图的连通性,如果每T次迭代新增的节点数少于growth_size,就换一个起始节点重新开始
      2. Random Walk Sampling with Fly Back Probability (RWF):RWR版本
      3. Induced Subgraph Random Walk Sampling (ISRW):SWR找出随机游走产生的节点序列后返回node-induced subgraph
        用NetworkX内置的subgraph函数实现的
      4. Snowball Sampling (SB) (这个缩写我很难评)
        每次抽样k个节点的BFS:随机抽k个节点作为第一stage,每次抽这一stage的每个节点的k个邻居(如果邻居小于k个,就抽所有邻居)形成下一stage的节点。
        (stage就是epoch,我忘了我当时学BFS的时候用的是哪个版本的教程了反正用的就是这个术语,力扣或者DPV吧反正)
      5. ForestFire Sampling (FF):随机抽取一个节点烧了(加入采样图),点燃外向边,被点燃的边的另一头的节点有一定概率被烧(加入采样图)。没得烧了就换个随机节点。
        (这个函数感觉原项目中实现得不够有随机性,是选择了一个节点的前random.randint个邻居。但是我记得NetworkX的邻居排列好像是不随机的,所以这个代码可能不够有随机性)
      6. Metropolis Hastings Random Walk Sampling (MHRW):首先选一个节点(度数不能是0)作为种子 v v v,然后定义proposal function Q ( v ) = k v Q(v)=k_v Q(v)=kv,在 v v v的邻居中随机选一个 w w w、并生成一个随机数 ρ ∈ U ( 0 , 1 ) \rho\in U(0,1) ρU(0,1),如果 ρ ≤ Q ( v ) / Q ( w ) \rho ≤ Q(v)/Q(w) ρQ(v)/Q(w),就将新节点加入采样,否则就停留在 v v v
        在这里插入图片描述
        感觉是加上一点概率采样、鼓励度数小的节点被抽样到的随机游走采样。
      7. Induced Metropolis Hastings Random Walk Sampling (Induced-MHRW):MHRW,但是用MHRW的节点生成的induced subgraph
    2. Edge Sampling
      1. Total Induction Edge Sampling (TIES)1:就直接从原图中随机抽边,然后生成edge-induced subgraph,然后再用这些节点生成node-induced subgraph
  2. 终止条件:达到最大迭代数、达到最大节点/边数(或节点/边在原节点/边中所占的数量比例)
  3. 参考相关采样算法进行补充:
    1. 随机点采样(Random Node, RN)
      在这里插入图片描述
    2. 随机边采样(Random Edge, RE)在这里插入图片描述
    3. 双网络图采样(Bi-graph Random Walk, BRW):针对有向图,在种子节点上先在出度和入度之间二选一,然后再在选中方向上随机选择一个节点
      在这里插入图片描述
  4. 其他抽样方法(我都还没看,哈哈)
    1. GraphSAINT
      官方GitHub项目:https://github.com/GraphSAINT/GraphSAINT(我看这个项目里也实现了好几种sampler)
    2. Sampling from Large Graphs
    3. Network Sampling via Edge-based Node Selection with Graph Induction
    4. Sampling methods for efficient training of graph convolutional networks: A survey
      (这个大概应该指的是类似GraphSAGE那种……就也算是采样边)
    5. PinSage
      可以参考博文:PinSage:GCN在商业推荐系统首次成功应用

2. 随机游走

torch_cluster的random_walk(返回节点序列) https://github.com/rusty1s/pytorch_cluster/blob/86f2e4a0f6bff4ad966787e0e3902f8bcdfa64a0/README.md#randomwalk-sampling
这个返回值是有重复的。可以看看别的随机游走采样的实现方式里面如何处理重复节点的

3. subgraph

  1. node-induced subgraph(已知节点索引)
    如果已知邻接矩阵,没什么好说的,直接切片就行
    如果已知edge_index,参考PyG的subgraph函数(https://pytorch-geometric.readthedocs.io/en/latest/_modules/torch_geometric/utils/subgraph.html)的实现方式
    NetworkX内置subgraph函数
  2. edge-induced subgraph(已知edge_index的话也很直觉)
  3. k-hop subgraph
    PyG的实现:https://pytorch-geometric.readthedocs.io/en/latest/modules/utils.html#torch_geometric.utils.k_hop_subgraph

  1. Graph_Sampling官方给的参考文献是这篇:Network Sampling via Edge-based Node Selection with Graph Induction ↩︎

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

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

相关文章

Hugging Face开源库accelerate详解

官网:https://huggingface.co/docs/accelerate/package_reference/accelerator Accelerate使用步骤 初始化accelerate对象accelerator Accelerator()调用prepare方法对model、dataloader、optimizer、lr_schedluer进行预处理删除掉代码中关于gpu的操作&#xff0…

Windows11 C盘瘦身

1.符号链接 将大文件夹移动到其他盘,创建成符号链接 2.修改Android Studio路径设置 1.SDK路径 2.Gradle路径 3.模拟器路径 设置环境变量 ANDROID_SDK_HOME

五、DQL-1.概述

一、DQL介绍 Data Query Language 数据查询语言 用来查询数据库中表的记录。 查询关键字:SELECT 二、语法

每日一题2023.7.19|ACM模式

文章目录 C的输入方式介绍cin>>cin.get(字符变量名)cin.get(数组名,接收字符数目)cin.get()cin.getline() getline()gets()getchar() AB问题|AB问题||AB问题|||ABⅣAB问题ⅤAB问题Ⅵ C的输入方式介绍 参考博客 cin>> 最基本,最常用的字符或者数字的输…

Ceph 分布式存储之部署

一.Ceph 存储基础 1、单机存储设备 DAS(直接附加存储,是直接接到计算机的主板总线上去的存储) IDE、SATA、SCSI、SAS、USB 接口的磁盘 所谓接口就是一种存储设备驱动下的磁盘设备,提供块级别的存储 NAS(网络附加存储…

ES系列--文档处理

一、文档冲突 当我们使用 index API 更新文档 ,可以一次性读取原始文档,做我们的修改,然后重 新索引 整个文档 。 最近的索引请求将获胜:无论最后哪一个文档被索引,都将被唯一存 储在 Elasticsearch 中。如果其他人同时…

云计算名词-IaaS,PaaS,SaaS

在学习分布式的过程中,知道了PaaS这个词儿,但是不知道是什么意思。从网上查询了之后,做了简单的了解。这里简单记录一下,方面之后的查阅。 IAAS(Infrastructure-as-a-Service)基础设施即服务 网上的定义是…

13matlab数据分析多项式的求值(matlab程序)

1.简述 统计分析常用函数 求最大值 max 和 sum 积 prod 平均值:mean 累加和:cumsum 标准差:std 方差:var 相关系数:corrcoef 排序:sort 四则运算 1.多项式的加减运算就是所对应的系数向量的加减运算&#…

Oracle 的视图

Oracle 的视图 源数据: -- Create table create table STU_INFO (id NUMBER not null,name VARCHAR2(8),score NUMBER(4,1),class VARCHAR2(2) ) tablespace STUDENTpctfree 10initrans 1maxtrans 255storage(initial 64Knext 1Mminextents 1maxextents unlim…

【4】Vite+Vue3左右容器中相同属性的元素内容自动对齐

在当今前端开发的领域里,快速、高效的项目构建工具以及使用最新技术栈是非常关键的。ViteVue3 组合为一体的项目实战示例专栏将带领你深入了解和掌握这一最新的前端开发工具和框架。 作为下一代前端构建工具,Vite 在开发中的启动速度和热重载方面具有突…

2023年下半年软考高项考试时间及安排

信息系统项目管理师一般情况下分别于上半年5月份和下半年11月份考试,2023年信息系统项目管理师上半年考试时间为2023年5月27日,下半年考试时间为2023年11月4日。 信息系统项目管理师考试报名时间: 下半年8月左右开始,各地区时间不…

接口测试 Fiddler 保存会话 (请求)

目录 前言: 为什么要保存请求? 保存单个请求 打开保存的请求文件 乱码的解决方法 保存所有请求 自动保存请求的猜想 自动保存已实现 前言: 在进行接口测试时,Fiddler是一个非常有用的工具,它可以帮助您捕获和…