Cora
数据集由 Sen
等人于 2008
年提出,是科学文献中最流行的节点分类数据集。它是一个由 2708
篇出版物组成的网络,其中每个连接都是一个引用。每篇出版物都被描述为一个由 1,433
个唯一单词组成的二进制向量,其中 0
和 1
分别表示没有或存在相应的单词。这种表示法在自然语言处理中也被称为二进制词袋 (bag of words
),我们的目标是将每个节点分类到七个类别之一。
无论数据类型如何,可视化始终是我们了解所面临问题的重要步骤。然而,当图过大时,使用 networkx
等 Python
可视化库将无法进行可视化,因此研究人员为图数据可视化开发了专用工具,我们将使用两个流行的工具:yEd Live 和 Gephi 进行图数据集可视化。
下图是用 yEd Live
绘制的 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 Geometric
的 utils
函数测试其他属性。
了解了 Cora
数据集后,我们继续介绍一个更能代表真实世界社交网络规模的数据集,Facebook Page-Page
数据集。