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

news2024/11/25 4:21:51

诸神缄默不语-个人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.coloradmin.cn/o/770729.html

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

相关文章

AtcoderABC247场

A - Move RightA - Move Right 题目大意 要求判断在一行4个方块上的人进行向右移动后,是否每个方块上都有人。初始状态下,给定一个由0和1组成的长度为4的字符串S,其中1表示对应方块上有人,0表示没有人。每个人同时向右移动一格&a…

Java控制台+activiti+springboot+mybatis实现账务报销工作流程

Java控制台activitispringbootmybatis实现账务报销工作流程 一、系统介绍二、功能展示1.代码展示2.员工报销3.账务审批4.总经理审批 三、代码展示四、获取源码 一、系统介绍 系统主要功能: 员工:填写报销单 账务审批:报销金额小于1000账务经…

智能电表数据采集器

智能电表数据采集器是一种用于采集智能电表数据的设备,它可以将智能电表的数据传输到远程服务器上,以便进行数据分析和监控。智能电表数据采集器的主要功能是采集智能电表的实时数据,并将其发送到远程服务器上,从而实现对智能电表…

能源监测系统:实时监控+数据可视化

能源监测系统是应用物联网技术,对水、电、气、热等能源进行实时监测的系统,能够对各种设备数据进行智能化标准化的管理,从而建立起统一的管理优化平台,是积极响应国家节能降耗政策的典型模范,也是企业建设节能型工厂的…

【C++】-stack和queue的具体使用以及模拟实现(dqeue的介绍+容器适配器的介绍)

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …

MySQL第六章、JDBC编程

目录 一、数据库编程的必备条件 二、Java的数据库编程:JDBC 三、JDBC工作原理 四、JDBC使用 4.1JDBC开发案例 一、数据库编程的必备条件 编程语言,如Java,C、C、Python等数据库,如Oracle,MySQL,SQL S…

uniapp 正常显示editor富文本编辑器的内容

如果不添加editor的样式文件&#xff0c;空格、图片都会显示不正常&#xff0c;需要按照官方文档提示&#xff0c;第一添加样式&#xff0c;第二&#xff0c;设置对应的显示方式。 一、下载editor样式 二、我使用的是rich-text组件&#xff0c;来显示html字符串 <template&…

数据可视化——根据提供的数据,将数据经过处理后以折线图的形式展现

文章目录 前言处理数据获取数据筛选数据将JSON数据转换为Python数据筛选出横坐标数据和纵坐标数据 根据处理后的数据绘制折线图整体代码展示 前言 前面我们学习了如何使用 pyecharts 模块绘制简单的折线图&#xff0c;那么今天我将为大家分享&#xff0c;如何根据提供的数据将…

掘金量化—Python SDK文档—4.数据结构

目录 Python SDK文档 4.数据结构 4.1数据类 Tick - Tick 对象 报价quote - (dict 类型) Bar - Bar 对象 L2Order - Level2 逐笔委托 L2Transaction - Level2 逐笔成交 4.2交易类 Account - 账户对象 Order - 委托对象 ExecRpt - 回报对象 Cash - 资金对象 Position - 持仓对象…

ylb-接口5产品详情

总览&#xff1a; 1、service处理&#xff08;根据产品id &#xff0c;查询产品信息&#xff09; 在api模块下service包&#xff0c;ProductService接口添加新方法&#xff08;根据产品id &#xff0c;查询产品信息queryById(Integer id)&#xff09;&#xff1a; package …

微服务——技术栈+概念+远程调用案例

目录 微服务技术栈 认识微服务 微服务架构演变 总结 微服务技术对比 SpringCloud springcloud和springboot的对应版本 ​编辑 服务拆分 注意事项 入门案例 远程调用 步骤一 :注册ResTemplate 步骤二&#xff1a;修改service层代码 微服务技术栈 将一个大的项目拆分出…

GUI-Menu菜单实例(颜色+线型菜单)

运行代码&#xff1a; //GUI-Menu菜单实例&#xff08;颜色线型菜单&#xff09; #include"std_lib_facilities.h" #include"GUI/Simple_window.h" #include"GUI/GUI.h" #include"GUI/Graph.h" #include"GUI/Point.h"struc…

2.4G天线(一)

一、概念 1.1、波: 波是指振动的传播。 将某一物理量的扰动或振动在空间逐点传递时形成的运动称为波&#xff0c;波动是物质运动的重要形式。 1.2、电磁波&#xff1a; 电磁波是能量的一种&#xff0c;属于一种波。是由同相振荡且互相垂直的电场与磁场在空间…

pico添加devmem2读写内存模块

devmem2读写内存 自定义msh命令devmem2验证msh命令devmem2读CPUID读写全局变量 devmem2模块可实现对设备寄存器的读写操作。在RT-Thread的命令行组件Fish中添加devmem2模块&#xff0c;用户可在终端输入devmem2相关命令&#xff0c;FinSH根据输入对指定寄存器进行读写&#xff…

springboot整合feign实现RPC调用,并通过Hystrix实现服务降级

目录 一、服务提供者 二、服务消费者 三、测试效果 四、开启Hystrix实现服务降级 feign/openfeign和dubbo是常用的微服务RPC框架&#xff0c;由于feigin内部已经集成ribbon&#xff0c;自带了负载均衡的功能&#xff0c;当有多个同名的服务注册到注册中心时&#xff0c;会根…

Pycharm安装dlib

目录 一、下载dilb 二、使用pip安装dlib库(亲测有效) 三、使用Pycharm安装(未使用) 一、下载dilb 官方网址:德利卜 皮皮 (pypi.org) 二、使用pip安装dlib库(亲测有效) 将下载好的whl文件放入工程文件中 接下来使用Python自带的pip进行安装 1.winR2.输入cmd&#xff0c;回车…

vue3+vite+ts+vant 开发浙里办H5应用流程和注意事项

vue3vitets 开发浙里办H5应用流程和注意事项 最近有个项目是要开发到浙里办的一个H5项目,记录一些问题; 浙里办irs系统内node版本和npm版本如下建议切到他们的版本再进行开发这样问题少一点 1.因为浙里办有自己的irs系统 需要吧前端整体的代码传上去 除了 打包后的dist 和 no…

Vue实现阻止浏览器记住密码功能的三种方法

通常浏览器会主动识别密码表单&#xff0c;在你登录成功之后提示保存密码 &#xff0c; 密码保存到浏览器的 密码管理器中 ( 如下是谷歌浏览器 ) 这种行为是浏览器的行为 &#xff0c;这种操作也是为了方便用户的使用 现在的一个需求是要阻止这个保存密码的弹窗提示 登录页账…

【AutoGluon_01】安装与示例

文章目录 一、安装二、示例一 AutoGluon预测目标数据1、导入数据2、训练3、预测4、评估5、小结 三、示例二 AutoGluon多模态预测&#xff08;Multimodal Prediction&#xff09;1、导入数据2、训练3、预测4、评估 四、示例三 AutoGluon进行时间序列预测1、导入数据2、训练3、预…

适配器模式-不兼容结构的协调

去英语国家旅游时&#xff0c;我们只会说中文&#xff0c;为了与当地人交流&#xff0c;我们需要购买个翻译器&#xff0c;将中文翻译成英文&#xff0c;而这运用了适配器模式。 1 概述 适配器模式&#xff08;Adapter Pattern&#xff09;&#xff0c;将一个接口转换成客户喜…