适用于图神经网络GNN/GCN/GAT的cora数据集预处理代码
cora数据集预处理
cora数据集介绍
Cora数据集由机器学习论文组成,是近年来图深度学习常使用的数据集。在数据集中,论文分为以下七类之一:
- 基于案例
- 遗传算法
- 神经网络
- 概率方法
- 强化学习
- 规则学习
- 理论
Cora数据集包含2708篇论文,开源的数据集下载后包含两个文件:.content和.cites
.content文件包含以下格式的论文描述:
<paper_id> <word_attributes>+ <class_label>
每行的第一个条目是论文的唯一字符串标识,后跟二进制值,表示词汇中的每个单词在文章中是存在(由1表示)还是不存在(由0表示)。该行的最后一个条目是论文的类别标签。因此数据集的feature的维度是2708 × 1433。第一行为idx ,最后一行为label。
.cites文件包含语料库的引用’图’。每行以以下格式描述一个链接:
<被引论文编号> <引论文编号>
每行包含两个论文id。第一个条目是被引用论文的标识,第二个标识代表是引用的论文。链接的方向是从右向左。如果一行由“论文1 论文2”表示,则链接是“论文2 —>论文1”。可以通过论文之间的索引关系建立邻接矩阵adj。
数据集下载地址:https://linqs.soe.ucsc.edu/data
预处理代码
虽然图深度学习中数据预处理很重要,但它不应该成为浪费我们过多时间的步骤,专注于模型算法的研究才更为主要。本小白为了跑自己的数据,在网上查了很多方法,但网上都是经过处理好的’x’, ‘y’, ‘tx’, ‘ty’, ‘allx’, ‘ally’, 'graph’对象,GAT的源码也是沿用GCN的预处理过程,对上述已经预处理过的数据继续处理,没有给出如何从原始数据进行处理的具体过程。
如果想要构建自己的数据集去跑模型,不是很方便。而且上述预处理数据使用pickle模块进行存储(ind.cora.x、ind.cora.y、ind.cora.allx等),存储成.pkl文件,手动打开全都乱码,还得使用python读一下,也不是很方便。
这里借鉴了GAT/GCN数据预处理的一些过程,给出了从原始数据集到可送入模型训练的对象的代码,仅供需要的同学们参考。主要思路就是,构建输入模型需要的邻接矩阵、特征、标签、mask(如果用到的话)。
import scipy.sparse as sp # 稀疏矩阵库
import numpy as np
def load_data(path="data/cora/", dataset="cora"):
"""Load citation network dataset (cora only for now)"""
print('Loading {} dataset...'.format(dataset))
idx_features_labels = np.genfromtxt("{}{}.content".format(path, dataset), dtype=np.dtype(str))
features = sp.csr_m