图神经网络实战(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.kler.cn/a/274840.html

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

相关文章

计算机毕业设计-基于python的旅游信息爬取以及数据分析

概要 随着计算机网络技术的发展,近年来,新的编程语言层出不穷,python语言就是近些年来最为火爆的一门语言,python语言,相对于其他高级语言而言,python有着更加便捷实用的模块以及库,具有语法简单…

【web世界探险家】HTML5 探索与实践

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ &…

【SpringBoot3+MyBatis-Plus】头条新闻项目实现CRUD登录注册

文章目录 一、头条案例介绍二、技术栈介绍三、前端搭建四、基于SpringBoot搭建项目基础架构4.1 数据库脚本执行4.2 搭建SprintBoot工程4.2.1 导入依赖:4.2.2 编写配置4.2.3 工具类准备 4.3 MybatisX逆向工程 五、后台功能开发5.1 用户模块开发5.1.1 jwt 和 token 介绍5.1.2 jwt…

webpack5零基础入门-12搭建开发服务器

1.目的 每次写完代码都需要手动输入指令才能编译代码,太麻烦了,我们希望一切自动化 2.安装相关包 npm install --save-dev webpack-dev-server 3.添加配置 在webpack.config.js中添加devServer相关配置 /**开发服务器 */devServer: {host: localhos…

Docker 从0安装 nacos集群

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

Linux文件 profile、bashrc、bash_profile区别

Linux系统中,有三种文件 出现的非常频繁,那就是 profile、bash_profile、bashrc 文件。 1、profile 作用 profile,路径:/etc/profile,用于设置系统级的环境变量和启动程序,在这个文件下配置会对所有用户…

vivado 物理优化约束、交互式物理优化

物理优化约束 Vivado Design Suite在物理优化过程中尊重DONT_TOUCH特性。它不在具有这些属性的网络或小区上执行物理优化。要加快网络选择过程中,具有DONT_TOUCH属性的网络经过预过滤,不被考虑用于物理优化。此外,还遵守Pblock分配&#xff…

嵌入式学习41-数据结构2

今天学习了链表的增删改查 (暂定!!后续再补内容) 高内聚 :一个函数只实现一个功能 …

Java学习笔记:异常处理

Java学习笔记:异常处理 什么是异常异常体系结构:Error、Exception自定义异常 ​ **2024/3/19** 什么是异常 异常体系结构:Error、Exception 自定义异常

UE5 GAS开发p30 创建UI HUD 血条

新建AuraUserWidget,AuraWidgetController,AuraHUD 首先设置AuraWidgetController.h // Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "AbilitySystemComponent.h" #in…

风丘电动汽车高压测试方案 助您高效应对车辆试验难题

针对电动汽车道路试验的要求,风丘科技携手德国IPETRONIK共同推出了电动汽车高压测试方案。电动汽车测试通常有两种测量手段:第一种是测量模拟量信号,包括电压、电流、温度和高压;第二种是使用数据记录仪或CAN卡从车辆总线读取数据…

JS+CSS3点击粒子烟花动画js特效

JSCSS3点击粒子烟花动画js特效 JSCSS3点击粒子烟花动画js特效

C++:类和对象(上篇)

目录: 一:面向对象和过程的介绍 二:类的引入 三:类的定义 四:类的访问限定符以及封装 五:类的作用域 六:类的实例化 七:类对象大小的计算 八:类成员函数的this指…

一次完整的 HTTP 请求所经历的步骤

1: DNS 解析(通过访问的域名找出其 IP 地址,递归搜索)。 2: HTTP 请求,当输入一个请求时,建立一个 Socket 连接发起 TCP的 3 次握手。如果是 HTTPS 请求,会略微有不同。 3: 客户端向服务器发…

智慧城市的发展趋势与挑战:未来展望

随着信息技术的飞速发展,智慧城市已成为现代城市发展的重要方向。智慧城市通过集成应用先进的信息通信技术,实现城市管理、服务、运行的智能化,为城市的可持续发展注入了新的活力。然而,在智慧城市的发展过程中,也面临…

Android Studio实现内容丰富的安卓外卖平台

获取源码请点击文章末尾QQ名片联系,源码不免费,尊重创作,尊重劳动 项目编号122 1.开发环境android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端: 1.注册登录 2.查看公告 3.查看外卖分类 4.购物车, 5.个人中…

当人工智能遇上“理解偏差”:一场关于天气的宇宙之旅

在这个由数据和算法驱动的时代,人工智能(AI)无疑成为了我们日常生活中的重要组成部分。从智能助手到个性化推荐系统,AI的应用范围正在不断扩大,旨在为我们提供更加便捷、高效的服务。然而,尽管AI技术取得了显著进展,仍…

docker入门(五)—— 小练习,docker安装nginx、elasticsearch

练习 docker 安装 nginx # 搜素镜像 [rootiZbp15293q8kgzhur7n6kvZ home]# docker search nginx NAME DESCRIPTION STARS OFFICIAL nginx …

python大学生健身爱好者交流网站flask-django-nodejs-php

任何系统都要遵循系统设计的基本流程,本系统也不例外,同样需要经过市场调研,需求分析,概要设计,详细设计,编码,测试这些步骤,基于python技术、django/flask框架、B/S机构、Mysql数据…

windows 多网卡情况dns解析超时问题的排查

最近遇到一个问题 多网卡,多网络环境下,dns解析总是超时。 排查之后发现是dns配置的问题,一个有线网络配置的内网dns,一个无线网络配置的公网dns 访问公网时莫名的时不时出现超时现象 初步排查是dns解析的耗时太长,…
最新文章