图神经网络实战(5)——常用图数据集

图神经网络实战(5)——常用图数据集

    • 0. 前言
    • 0. 图数据集介绍
    • 2. Cora 数据集
    • 3. Facebook Page-Page 数据集
    • 小结
    • 系列链接

0. 前言

图数据集往往比单纯的连接集合更丰富,节点和边也可以具有表示分数、颜色、单词等的特征。在输入数据中包含这些附加信息对于生成最佳嵌入至关重要。而由于节点和边的特征与表格(非图)数据集具有相同的结构,意味着神经网络等经典技术可以应用于这些数据。在本节中,我们将介绍两个常见图数据集:CoraFacebook Page-Page

0. 图数据集介绍

在图神经网络 (Graph Neural Networks, GNN) 中所使用的图数据集通常比 Zachary’s Karate Club 数据集更丰富:它们有更多的节点、更多的边,并且包含节点特征。在本节中,我们将对常用的两个数据集进行介绍,以便让我们对这些图有一个全面的了解,并了解如何用 PyTorch Geometric 处理它们:

  • Cora 数据集
  • Facebook Page-Page 数据集

2. Cora 数据集

Cora 数据集由 Sen 等人于 2008 年提出,是科学文献中最流行的节点分类数据集。它是一个由 2708 篇出版物组成的网络,其中每个连接都是一个引用。每篇出版物都被描述为一个由 1,433 个唯一单词组成的二进制向量,其中 01 分别表示没有或存在相应的单词。这种表示法在自然语言处理中也被称为二进制词袋 (bag of words),我们的目标是将每个节点分类到七个类别之一。
无论数据类型如何,可视化始终是我们了解所面临问题的重要步骤。然而,当图过大时,使用 networkxPython 可视化库将无法进行可视化,因此研究人员为图数据可视化开发了专用工具,我们将使用两个流行的工具:yEd Live 和 Gephi 进行图数据集可视化。
下图是用 yEd Live 绘制的 Cora 数据集图。可以看到橙色为论文对应的节点,绿色为论文之间的连接。一些论文之间的相互连接的非常紧密,以至于形成了论文簇,这些簇比连接不紧密的节点更容易分类。

Cora数据集

接下来,导入 Cora 数据集,并用 PyTorch Geometric 库分析其主要特征,PyTorch Geometric 库有一个专门的类,用于下载数据集并返回相关的数据结构。PyTorch Geometric 是深度学习框架 PyTorch 的扩展库,用于简化图神经网络的实现。PyTorch Geometric 的安装与其它 Python 第三方库一样,只需在 shell 中使用 pip 命令即可:

pip installl torch_geometric

(1)PyTorch Geometric 中导入 Planetoid 类:

import torch
from torch_geometric.datasets import Planetoid

(2) 使用 Planetoid 类下载数据集:

dataset = Planetoid(root=".", name="Cora")

(3) Cora 只有一个图,将其存储在 data 变量中:

data = dataset[0]

(4) 打印数据集的相关信息:

print(f'Dataset: {dataset}')
print('---------------')
print(f'Number of graphs: {len(dataset)}')
print(f'Number of nodes: {data.x.shape[0]}')
print(f'Number of features: {dataset.num_features}')
print(f'Number of classes: {dataset.num_classes}')

(5) 输出结果如下所示:

Dataset: Cora()
---------------
Number of graphs: 1
Number of nodes: 2708
Number of features: 1433
Number of classes: 7

(6) 通过 PyTorch Geometric 的专用函数,还可以获得更多详细信息:

# Print information about the graph
print(f'\nGraph:')
print('------')
print(f'Edges are directed: {data.is_directed()}')
print(f'Graph has isolated nodes: {data.has_isolated_nodes()}')
print(f'Graph has loops: {data.has_self_loops()}')

(7) 输出结果如下所示:

Graph:
------
Edges are directed: False
Graph has isolated nodes: False
Graph has loops: False

第一个输出结果输出了节点数、特征和类别的信息,第二个输出则提供了关于图本身的更多信息:边是无向的,每个节点都有邻居,而且图不存在自循环。我们也可以使用 PyTorch Geometricutils 函数测试其他属性。
了解了 Cora 数据集后,我们继续介绍一个更能代表真实世界社交网络规模的数据集,Facebook Page-Page 数据集。

3. Facebook Page-Page 数据集

该数据集由 Rozemberczki 等人于 2019 年提出,它是在 201711 月使用 Facebook Graph API 创建的。这个数据集包含 22470 个节点,其中每个节点都代表一个 Facebook 页面。当页面之间存在互赞行为时,它们就会被连接起来,节点特征( 128 维向量)根据这些页面所有者撰写的文字描述创建。我们的目标是将每个节点分为四种类别之一:oliticianscompaniestelevision showsgovernmental organizations
Facebook Page-Page 数据集与 Cora 数据集类似,是一个具有节点分类任务的社交网络。但与 Cora 相比有如下区别:

  • 节点数量更多 (Cora2,708 个节点,而 Facebook Page-Page 包含 22,470 个)
  • 节点特征的维度较小 (Cora 节点特征维度为 1,433,而 Facebook Page-Page128)
  • 目标是将每个节点分为 4 个类别,而不是 7 个类别(类别较少,更容易分类)

下图是使用 Gephi 对数据集进行的可视化的效果。为了提高性能,我们忽略了连接数少的节点。其余节点的大小取决于它们的连接数,而它们的颜色则表示它们所属的类别。

Facebook Page-Page

可以按照与 Cora 相同的方法导入 Facebook Page-Page 数据集。

(1)PyTorch Geometric 中导入 FacebookPagePage 类:

from torch_geometric.datasets import FacebookPagePage

(2) 使用 FacebookPagePage 类下载数据集:

dataset = FacebookPagePage(root=".", name="FacebookPagePage")

(3) 将图存储在 data 变量中:

data = dataset[0]

(4) 打印数据集的相关信息:

print(f'Dataset: {dataset}')
print('-----------------------')
print(f'Number of graphs: {len(dataset)}')
print(f'Number of nodes: {data.x.shape[0]}')
print(f'Number of features: {dataset.num_features}')
print(f'Number of classes: {dataset.num_classes}')

输出结果如下所示:

Dataset: FacebookPagePage()
-----------------------
Number of graphs: 1
Number of nodes: 22470
Number of features: 128
Number of classes: 4

(5) 通过 PyTorch Geometric 的专用函数,获得更多详细信息:

print(f'\nGraph:')
print('------')
print(f'Edges are directed: {data.is_directed()}')
print(f'Graph has isolated nodes: {data.has_isolated_nodes()}')
print(f'Graph has loops: {data.has_self_loops()}')

输出结果如下所示:

Graph:
------
Edges are directed: False
Graph has isolated nodes: False
Graph has loops: True

代码 (4) 中的输出结果确认了我们在数据集描述中看到的节点和类别的数量,(5) 中的输出结果表明这个图中有自循环——某些页面连接到它们自身。

(6)Cora 不同,Facebook Page-Page 默认情况下没有训练、评估和测试掩码,我们可以使用 range() 函数创建掩码:

data.train_mask = range(18000)
data.val_mask = range(18001, 20000)
data.test_mask = range(20001, 22470)

(7) PyTorch Geometric 还提供了一个转换函数,可以在加载数据集时计算随机掩码:

import torch_geometric.transforms as T

小结

CoraFacebook Page-Page 是图神经网络领域中经常使用的两个基准图数据集,通常用来比较不同模型的性能。在本节中,介绍了如何使用 PyTorch Geometric 库提供的数据集类加载 CoraFacebook Page-Page 数据集,并探索了两个数据集的主要特征。

系列链接

图神经网络实战(1)——图神经网络(Graph Neural Networks, GNN)基础
图神经网络实战(2)——图论基础
图神经网络实战(3)——基于DeepWalk创建节点表示
图神经网络实战(4)——基于Node2Vec改进嵌入质量

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

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

相关文章

Golang 开发实战day04 - Standard Library

Golang 开发实战day04 - Standard Library 接下来开始我们第四天学习,Go语言标准库提供了丰富的功能,可以帮助开发者快速完成各种任务。 golang就像其他语言一样,附带了一些非常轻量级的函数和特性,都是开箱即用的,这里…

Linux 管道

目录 一、认识管道 二、匿名管道 pipe函数 用法: pipefd: 匿名管道通信: 三、命名管道 概念: 创建: 特性: 用途: 四、命名管道和匿名管道的区别 命名: 持久性:…

改进YOLOv8注意力系列六:结合SEAttention轻量通道注意力、ShuffleAttention重排特征注意力模块、SimAM无参数化注意力

改进YOLOv8注意力系列五:结合ParNetAttention注意力、高效的金字塔切分注意力模块PSA、跨领域基于多层感知器(MLP)S2Attention注意力 代码SEAttention轻量通道注意力ShuffleAttention重排特征注意力模块SimAM无参数化注意力加入方法各种yaml加入结构本文提供了改进 YOLOv8注…

【PyQt】17-日历控件

文章目录 前言一、代码二、运行结果总结 前言 固定格式的表述 日期的获取 一、代码 #Author :susocool #Creattime:2024/3/19 #FileName:40-日历控件 #Description: 日历控件的展示 import sys from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQ…

【云呐】医院固定资产管理系统有哪些

科学技术的进步已经渗透到各个领域,医疗行业也是如此。伴随着医疗信息化的实施,医院固定资产管理系统的应用日益广泛。那医院固定资产管理系统的作用是什么呢?  医院固定资产管理系统的核心功能是高效管理医院的固定资产。这包括对整个过程…

解决jenkins运行磁盘满的问题

参考:https://blog.csdn.net/ouyang_peng/article/details/79225993 分配磁盘空间相关操作: https://cloud.tencent.com/developer/article/2230624 登录jenkins相对应的服务或容器中查看磁盘情况: df -h在102挂载服务器上看到是这两个文件…

关于自己Nginx的使用(ant design pro 部署)

一 原因 工作需要部署 ant design pro 框架开发的前端程序,并且需要有用到代理。就选择了nginx部署。 二 使用nginx部署 ant design pro 框架程序 1. 前端项目打包 (1)打包命令:npm run build 或者 yarn bulid &#…

淘宝店铺如何从1688一键铺货?官方授权API接口,可满足多样化上货需求

那么新手卖家如何将1688的源头厂货一键铺货到淘宝店铺呢?下面我教大家几招: 1、通过淘宝复制一键复制上货 淘宝API接口采集 taobao.item_get 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretStr…

PVE中 非集群环境中迁移LXC到另一台主机

需求:要将PVE 中LXC 容器迁移到 另一台不同网段的PVE中(诸如模板机之类); 思路:源主机上备份LXC,在新主机上还原LXC 主机; 步骤: 1. 在源主机 备份LXC 根据自身的需求选择压缩方式…

【工具】vscode终端打不开

问题 1The terminal process failed to launch: A native exception occurred during launch (forkpty(3) failed.). 参考方案 下面参考链接是针对windows系统上vscode 出现的相同问题的解答 参考链接:https://blog.csdn.net/weixin_40921421/article/details/122…

强强联合!亚信科技、用友网络共同助力西南某国企集团数智化升级

近日,亚信科技(中国)有限公司(简称“亚信科技”)与用友网络科技股份有限公司(简称“用友网络”)携手推出的“U8CAntDB联合产品”正式落地西南某国企集团,助力该集团搭建统一的财务管…

Linux Deepin系统安装x11vnc+cpolar实现Windows系统电脑远程其桌面

文章目录 1. 安装x11vnc2. 本地远程连接测试3. Deepin安装Cpolar4. 配置公网远程地址5. 公网远程连接Deepin桌面6. 固定连接公网地址7. 固定公网地址连接测试 x11vnc是一种在Linux系统中实现远程桌面控制的工具,它的原理是通过X Window系统的协议来实现远程桌面的展…

MySQL中replace into详解、批量更新、不存在插入存在则更新、replace into的坑

文章目录 一、replace into原理二、replace into的三种形式三、replace into 使用案例3.1、replace into values3.1.1、只有主键且主键冲突3.1.2、有主键有唯一索引且主键冲突3.1.3、有主键有唯一索引且唯一索引冲突(有坑)3.1.4、有主键有唯一索引且与一条主键冲突与另一条唯一…

开发Android Launcher的技术难点

开发Android Launcher可能会面临一些技术难点,以下是开发Android Launcher可能面临的一些技术难点,解决这些难点需要开发团队具备扎实的Android开发经验和技术水平,同时需要不断地进行优化和改进。北京木奇移动技术有限公司,专业的…

Redis缓存穿透的几种解决方案

目录 缓存穿透原理: 缓存穿透一般有几种解决方案: 1.缓存空值 2.使用锁 3.布隆过滤器 优缺点 布隆过滤器误判理解 布隆过滤器的简单使用流程 4.组合方案 那么当我们高并发的访问短链接或者人为的去穿透的时候呢? 最近做项目遇到了缓…

淘宝API接口开发系列——淘宝详情数据采集

淘宝详情数据采集涉及多种技术和方法,下面列举几种常见的方式: 请求示例,API接口接入Anzexi58 爬虫技术:使用编程语言(如Python)编写网络爬虫程序,通过模拟浏览器行为访问淘宝网站,…

atoi函数及模拟实现

✅博客主页:爆打维c-CSDN博客​​​​​​ 🐾 🔹分享c语言知识及代码 文章目录 一、atoi函数的简要介绍 1.函数原型 二、atoi函数的使用示例 💠正数示例: 💠负数示例: 💠带有符号示例&am…

【C语言步行梯】C语言实现扫雷游戏(含详细分析)

🎯每日努力一点点,技术进步看得见 🏠专栏介绍:【C语言步行梯】专栏用于介绍C语言相关内容,每篇文章将通过图片代码片段网络相关题目的方式编写,欢迎订阅~~ 文章目录 需求分析具体实现主函数体菜单实现游戏实…

Docker 从0安装 nacos集群

前提条件 Docker支持一下的CentOs版本 Centos7(64-bit),系统内核版本为 3.10 以上Centos6.5(64-bit) 或者更高版本,系统内核版本为 2.6.32-431 或者更高版本 安装步骤 使用 yum 安装(CentOS 7下) 通过 uname -r 命令查看你当…

MFC界面美化第四篇----自绘list列表(重绘列表)

1.前言 最近发现读者对我的mfc美化的专栏比较感兴趣,因此在这里进行续写,这里我会计划写几个连续的篇章,包括对MFC按钮的美化,菜单栏的美化,标题栏的美化,list列表的美化,直到最后形成一个完整…