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

这篇具有很好参考价值的文章主要介绍了图采样、随机游走、subgraph的实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

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差不多就是这个意思)
        图采样、随机游走、subgraph的实现,人工智能学习笔记,GNN,图神经网络,图采样,随机游走,random walk,RW,subgraph
        随机选择一个起始节点,随机游走直至达到指定长度
        这个的实现方式:每走一步,抽样这个邻居节点,及这两个节点之间产生的边。考虑到图的连通性,如果每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
        图采样、随机游走、subgraph的实现,人工智能学习笔记,GNN,图神经网络,图采样,随机游走,random walk,RW,subgraph
        感觉是加上一点概率采样、鼓励度数小的节点被抽样到的随机游走采样。
      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)
      图采样、随机游走、subgraph的实现,人工智能学习笔记,GNN,图神经网络,图采样,随机游走,random walk,RW,subgraph
    2. 随机边采样(Random Edge, RE)图采样、随机游走、subgraph的实现,人工智能学习笔记,GNN,图神经网络,图采样,随机游走,random walk,RW,subgraph
    3. 双网络图采样(Bi-graph Random Walk, BRW):针对有向图,在种子节点上先在出度和入度之间二选一,然后再在选中方向上随机选择一个节点
      图采样、随机游走、subgraph的实现,人工智能学习笔记,GNN,图神经网络,图采样,随机游走,random walk,RW,subgraph
  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 ↩︎文章来源地址https://www.toymoban.com/news/detail-582911.html

到了这里,关于图采样、随机游走、subgraph的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【人工智能的数学基础】随机变量的变量替换定理(Change of Variable Theorem)‘

    Change of Variable Theorem. 若随机变量 X ∈ R X in Bbb{R}

    2024年02月16日
    浏览(40)
  • 人工智能论文通用创新点(一)——ACMIX 卷积与注意力融合、GCnet(全局特征融合)、Coordinate_attention、SPD(可替换下采样)

    论文地址:https://arxiv.org/pdf/2111.14556.pdf         为了实现卷积与注意力的融合,我们让特征图经过两个路径,一个路径经过卷积,另外一个路径经过Transformer,但是,现在有一个问题,卷积路径比较快,Transformer比较慢。因此,我们让Q,K,V通过1*1的卷积得到,同时使用窗口注意

    2024年02月10日
    浏览(49)
  • 人工智能技能的融合:实现强人工智能的高效解决方案

    人工智能(Artificial Intelligence, AI)是一门研究如何让计算机模拟人类智能的科学。人工智能的目标是让计算机能够理解自然语言、进行逻辑推理、学习自主决策、理解情感等。随着数据量的增加、计算能力的提升以及算法的创新,人工智能技术的发展取得了显著的进展。 强人工

    2024年02月21日
    浏览(76)
  • 【人工智能】AGI 通用人工智能基础概念、实现原理、挑战和发展前景

    Artificial intelligence prompt completion by dalle mini, https://github.com/borisdayma/dalle-mini 随着计算机技术、机器学习和神经网络等技术的发展,人工智能(Artificial Intelligence, AI)已经成为当今计算机科学和工程领域的热门话题之一。 强人工智能(Strong AI)或通用人工智能(英语:Artificia

    2024年02月09日
    浏览(64)
  • 实现业务智能:大数据与人工智能的融合

    随着数据的快速增长,大数据技术已经成为企业和组织中不可或缺的一部分。大数据技术可以帮助企业更好地理解其客户、优化其业务流程,提高效率,降低成本。然而,大数据技术的发展并不是一成不变的。随着人工智能(AI)技术的发展,大数据技术和人工智能技术的融合成

    2024年02月21日
    浏览(51)
  • 人工智能语音合成:实现更加智能的语音合成

    作者:禅与计算机程序设计艺术 作为一名人工智能专家,软件架构师和程序员,我今天将探讨如何实现更加智能的语音合成,以及人工智能语音合成技术的一些原理和方法。 引言 1.1. 背景介绍 随着人工智能技术的飞速发展,语音合成技术已经成为了人工智能领域中的一项重

    2024年02月07日
    浏览(65)
  • 人工智能与机器人:实现智能化的未来

    人工智能(Artificial Intelligence, AI)和机器人技术(Robotics)是当今最热门的技术领域之一,它们正在驱动我们进入一个智能化的未来。人工智能是指一种使计算机能够像人类一样思考、学习和理解自然语言的技术。机器人则是一种自主行动的物体,它可以接收数据、执行任务

    2024年01月23日
    浏览(84)
  • 基于虚拟现实的游戏中的人工智能:如何使用Python和Pygame实现人工智能

    作者:禅与计算机程序设计艺术 《基于虚拟现实的游戏中的人工智能:如何使用Python和Pygame实现人工智能》 1.1. 背景介绍 随着虚拟现实 (VR) 和增强现实 (AR) 技术的发展,游戏行业也在不断进步。在这个虚拟世界中,玩家可以扮演不同的角色,探索各种奇妙的世界,体验沉浸

    2024年02月11日
    浏览(60)
  • 人工智能——“kmeans实现图片分割”(Python实现)

    (2)边缘分割:对图像边缘进行检测,即检测图像中灰度值发生跳变的地方,则为一片 区域的边缘。 (3)直方图法:对图像的颜色建立直方图,而直方图的波峰波谷能够表示一块区域的颜 色值的范围,来达到分割的目的。 (4)特定理论:基于 聚类分析 、小波变换等理论完成图像

    2024年04月17日
    浏览(39)
  • 人工智能与人类智能的融合:实现超越人类的学习速度

    人工智能(Artificial Intelligence, AI)是一门研究如何让计算机模拟人类智能行为的学科。人工智能的目标是让计算机能够理解自然语言、进行推理、学习和自主决策,以及识别图像和声音等。随着计算能力的提高和数据量的增加,人工智能技术的发展越来越快。 在过去的几十年里

    2024年02月20日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包