Cora数据集是一个用于文献学术论文分类的常用数据集,主要用于机器学习和自然语言处理研究。以下是一些关于Cora数据集的详细介绍:
-
数据结构: Cora数据集包含了一个文献网络,其中节点表示论文,边表示引用关系。论文节点还包括标题、作者、摘要和出版年份等信息。每篇论文都被标记为一个或多个类别,如人工智能、数据库、数据挖掘等。
-
节点信息: 每个节点(论文)包含以下信息:
- 论文ID(Paper ID): 唯一标识每篇论文的ID。
- 词袋模型表示(Bag-of-Words): 论文标题和摘要的词袋模型,表示文本信息。
- 标签信息(Labels): 每篇论文的类别标签。
-
边信息: 边表示论文之间的引用关系,构成了一个引用网络。这种网络结构允许研究者在分类任务中考虑文献之间的引用关系。
-
类别: 论文根据其主题领域被分为不同的类别。这些类别通常是预定义的,反映了论文的研究方向。
-
数据处理: 在使用Cora数据集时,通常需要进行一些预处理工作,例如文本的标记化(Tokenization)、词袋模型的构建、图网络的表示等。研究者可以选择将文本信息和引用网络结合起来,以便在模型训练中充分利用这两方面的信息。
-
应用: Cora数据集广泛用于研究文本分类、图神经网络(Graph Neural Networks,GNNs)等领域。研究者可以利用该数据集开发算法,探索如何更好地利用文本信息和引用网络结构来进行论文分类。
from torch_geometric.datasets import Planetoid
# 加载Cora数据集
dataset = Planetoid(root='./data/Cora', name='Cora')
# 获取数据集中图的数量
num_graphs = len(dataset)
# 遍历获取所有图的数据
for i in range(num_graphs):
data_i = dataset[i]
print(f"Graph {i+1} information:")
print(data_i)
print("----------------------------------------------------------------------")
# 获取第一个图的数据
data = dataset[0]
# 打印图的基本信息
print("Number of nodes:", data.num_nodes)
print("Number of edges:", data.num_edges)
# 获取节点信息
print("\nNode Features:")
print(data.x.shape)
# 获取类别标签
print("\nNode Labels:")
print(data.y.shape)
print(data.y)
# 打印一些具体的节点的类别标签
print(data.y[10]) # 获取第11个节点的类别标签
print(data.y[20]) # 获取第21个节点的类别标签
# 获取边信息
print("\nEdge Information:")
print(data.edge_index)
print(data.edge_index.shape)
# 获取第一列和第一行的所有元素
first_row = data.edge_index[0, :]
first_column = data.edge_index[1, :]
# 打印第一列和第一行的元素
print("First row of edge_index:", first_row)
print("First column of edge_index:", first_column)
# 获取训练/验证/测试节点的掩码
print("\nTrain Mask:")
print(data.train_mask.shape)
print("\nValidation Mask:")
print(data.val_mask.shape)
print("\nTest Mask:")
print(data.test_mask.shape)
Graph 1 information:
Data(x=[2708, 1433], edge_index=[2, 10556], y=[2708], train_mask=[2708], val_mask=[2708], test_mask=[2708])
----------------------------------------------------------------------
Number of nodes: 2708
Number of edges: 10556
Node Features:
torch.Size([2708, 1433])
Node Labels:
torch.Size([2708])
tensor([3, 4, 4, ..., 3, 3, 3])
tensor(0)
tensor(5)
Edge Information:
tensor([[ 633, 1862, 2582, ..., 598, 1473, 2706],
[ 0, 0, 0, ..., 2707, 2707, 2707]])
torch.Size([2, 10556])
First row of edge_index: tensor([ 633, 1862, 2582, ..., 598, 1473, 2706])
First column of edge_index: tensor([ 0, 0, 0, ..., 2707, 2707, 2707])
Train Mask:
torch.Size([2708])
Validation Mask:
torch.Size([2708])
Test Mask:
torch.Size([2708])
这是对 Cora 数据集的一个简要概述
-
x
(Node Features):x
是一个形状为[2708, 1433]
的矩阵,表示图中的节点特征。每一行对应图中的一个节点,而每一列对应节点的一个特征。
-
edge_index
(Edge Information):edge_index
是一个形状为[2, 10556]
的矩阵,表示图的边信息。每一列包含两个元素,分别是边的起始节点和结束节点的索引。在这个例子中,图有 10556 条边。
-
y
(Node Labels):y
是一个形状为[2708]
的向量,表示每个节点的类别标签。在 Cora 数据集中,每个节点代表一篇学术论文,标签是论文所属的学科类别。
-
train_mask
,val_mask
,test_mask
(Train/Validation/Test Masks):- 这些是形状为
[2708]
的二进制向量,用于指示哪些节点属于训练集、验证集和测试集。对应位置上的元素为1
表示该节点属于相应的集合,而为0
则表示不属于。这是为了在训练、验证和测试阶段使用不同的节点子集。
- 这些是形状为