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

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 LiveGephi 进行图数据集可视化。
下图是用 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改进嵌入质量

  • 68
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 92
    评论
人工智能项目资料-基于Tensorflow,以MINST为数据集训练手写数字识别模型,并调用打开摄像头的API,对拍摄到的片中的一个或多个数字进行识别 【探索人工智能的宝藏之地】 无论您是计算机相关专业的在校学生、老师,还是企业界的探索者,这个项目都是为您量身打造的。无论您是初入此领域的小白,还是寻求更高层次进阶的资深人士,这里都有您需要的宝藏。不仅如此,它还可以作为毕设项目、课程设计、作业、甚至项目初期的立项演示。 【人工智能的深度探索】 人工智能——模拟人类智能的技术和理论,使其在计算机上展现出类似人类的思考、判断、决策、学习和交流能力。这不仅是一门技术,更是一种前沿的科学探索。 【实战项目与源码分享】 我们深入探讨了深度学习的基本原理、神经网络的应用、自然语言处理、语言模型、文本分类、信息检索等领域。更有深度学习、机器学习、自然语言处理和计算机视觉的实战项目源码,助您从理论走向实践,如果您已有一定基础,您可以基于这些源码进行修改和扩展,实现更多功能。 【期待与您同行】 我们真诚地邀请您下载并使用这些资源,与我们一起在人工智能的海洋中航行。同时,我们也期待与您的沟通交流,共同学习,共同进步。让我们在这个充满挑战和机遇的领域中共同探索未来!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 92
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盼小辉丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值