项目概述
本节我们通过一个完整的例子来理解如何通过GCN来实现对节点的分类。我们使用的是Cora数据集,该数据集由2708篇论文,及它们之间的引用关系构成的5429条边组成。这些论文被根据主题划分为7类,分别是神经网络、强化学习、规则学习、概率方法、遗传算法、理论研究、案例相关。每篇论文的特征是通过词袋模型得到的,维度为1433,每一维表示一个词,1表示该词在这篇文章中出现过,0表示未出现。
首先我们定义类CoraData来对数据进行预处理,主要包括下载数据、规范化数据并进行缓存以备重复使用。最终得到的数据形式包括如下几个部分:
- x:节点特征,维度为2708×1433;
- y:节点对应的标签,包括7个类别;
- adjacency:邻接矩阵,维度为2708 ×2708,类型为scipy.sparse.coo_matrix;
- train_mask、 val_mask、test_mask:与节点数相同的掩码,用于划分训练集、验证集、测试集。如代码清单5-1所示。
本小块为代码解释:引用自 https://blog.csdn.net/helei001/article/details/52692128from collections import namedtuple
Python中存储系列数据,比较常见的数据类型有list,除此之外,还有tuple数据类型。相比与list,tuple中的元素不可修改,在映射中可以当键使用。
tuple元组的item只能通过index访问,collections模块的namedtuple子类不仅可以使用item的index访问item,还可以通过item的name进行访问。可以将namedtuple理解为c中的struct结构,其首先将各个item命名,然后对每个item赋予数据。
coordinate = namedtuple('Coordinate', ['x', 'y'])
co = coordinate(10,20)
print co.x,co.y
print co[0],co[1]
co = coordinate._make([100,200])
print co.x,co.y
co = co._replace(x = 30)
print co.x,co.y
results:
10 20
10 20
100 200
30 200