GNN常用数据集之Cora数据集

在学习图神经网络 GNN 之前,必然要了解一些GNN的常用数据集,这篇博客主要以Cora数据集为例介绍GNN的数据集格式与读取方式,并以一个项目实例进行说明。
GNN常用数据集:https://linqs.soe.ucsc.edu/data
在这里插入图片描述

1. Cora数据集介绍

Cora数据集下载地址:https://linqs-data.soe.ucsc.edu/public/lbc/cora.tgz
以下内容均是对Cora数据集文件夹中README文件的翻译与解读,为避免误导读者,现作此说明,若有误请告知更正,感谢各位大牛不吝指教!

1.1 数据集概括

Cora数据集由机器学习论文组成。 这些论文分为以下七个类别之一:

  • 基于案例
  • 遗传算法
  • 神经网络
  • 概率方法
  • 强化学习
  • 规则学习
  • 理论

这些论文的选择方式是,在最终语料库中,每篇论文引用或被至少一篇其他论文引用。整个语料库中有 2708篇 论文。

在词干堵塞和去除词尾后,只剩下 1433个 唯一的单词。文档频率小于10的所有单词都被删除。

1.2 数据集文件说明

该数据集由 cora.cites 与 cora.content 两个文件组成。

1.2.1 cora.content

The .content file contains descriptions of the papers in the following format:
        <paper_id> <word_attributes>+ <class_label>

The first entry in each line contains the unique string ID of the paper followed by binary values indicating whether each word in the vocabulary is present (indicated by 1) or absent (indicated by 0) in the paper. Finally, the last entry in the line contains the class label of the paper.

.content文件包含以下格式的论文描述:<paper_id> <word_attributes>+ <class_label>

每行(其实就是图的一个节点)的第一个字段是论文的唯一字符串标识,后跟 1433 个字段(取值为二进制值),表示1433个词汇中的每个单词在文章中是存在(由1表示)还是不存在(由0表示)。最后,该行的最后一个字段表示论文的类别标签(7个)。因此该数据的特征应该有 1433 个维度,另外加上第一个字段 idx,最后一个字段 label, 一共有 1433 + 2 个维度。
在这里插入图片描述

1.2.2 cora.cites

The .cites file contains the citation graph of the corpus. Each line describes a link in the following format:
        < ID of cited paper >     < ID of citing paper>

Each line contains two paper IDs. The first entry is the ID of the paper being cited and the second ID stands for the paper which contains the citation. The direction of the link is from right to left. If a line is represented by “paper1 paper2” then the link is “paper2->paper1”.

.cites文件包含语料库的引用关系‘图’。
每行(其实就是图的一条边)用以下格式描述一个引用关系:<被引论文编号> <引论文编号>

每行包含两个paper id。第一个字段是被引用论文的标识,第二个字段代表引用的论文。引用关系的方向是从右向左。如果一行由“论文1 论文2”表示,则“论文2 引用 论文1”,即链接是“论文2 - >论文1”。可以通过论文之间的链接(引用)关系建立邻接矩阵adj
在这里插入图片描述

2. Python对数据进行处理

2.1 读取文件

import pandas as pd
import numpy as np

raw_data = pd.read_csv('cora.content', sep='\t', header=None)
print("content shape: ", raw_data.shape)

raw_data_cites = pd.read_csv('cora.cites', sep='\t', header=None)
print("cites shape: ", raw_data_cites.shape)

读取两个1.2节中的两个文件,并查看数据维度。
在这里插入图片描述
可以发现,content文件数据一共有2708条记录(即图有2708个节点),每条记录有 1435 个维度,其中 1433 个维度是记录的 feature(即1433个词汇) 。cites文件数据一共有5429条记录(即图有5429条边),每条记录包括引用与被引用 paper id。

2.2 提取特征向量与标签

import pandas as pd

raw_data = pd.read_csv('cora.content', sep='\t', header=None)
print("content shape: ", raw_data.shape)

features = raw_data.iloc[:,1:-1]
print("features shape: ", features.shape)

# one-hot encoding
labels = pd.get_dummies(raw_data[1434])
print("\n----head(3) one-hot label----")
print(labels.head(3))

在这里插入图片描述

2.3 构建邻接矩阵

import pandas as pd
import numpy as np

raw_data = pd.read_csv('cora.content', sep='\t', header=None)
num_nodes = raw_data.shape[0]

# 将节点重新编号为[0, 2707]
new_id = list(raw_data.index)
id = list(raw_data[0])
c = zip(id, new_id)
map = dict(c)

raw_data_cites = pd.read_csv('cora.cites', sep='\t', header=None)

# 根据节点个数定义矩阵维度
matrix = np.zeros((num_nodes,num_nodes))

# 根据边构建矩阵
for i ,j in zip(raw_data_cites[0],raw_data_cites[1]):
    x = map[i] ; y = map[j]
    matrix[x][y] = matrix[y][x] = 1   # 无向图:有引用关系的样本点之间取1

# 查看邻接矩阵的元素
print(matrix)

3. 项目实战

  1. https://github.com/kimiyoung/planetoid
    下一篇博客会对这个项目进行讲解。
  2. https://github.com/tkipf/gcn
  3. https://github.com/Diego999/pyGAT/blob/master/utils.py
  4. https://www.jianshu.com/p/47425c02d779
  • 51
    点赞
  • 230
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
### 回答1: GCN(Graph Convolutional Network)是一种用于图结构数据的深度学习模型,而Cora数据集是一个常用的用于研究GCN模型性能的基准数据集Cora数据集是由论文《Revisiting Semi-Supervised Learning with Graph Embeddings》中提出的,用于研究半监督学习与图嵌入方法。它包含了一个引文网络,其中节点代表了学术论文,边表示两篇论文之间的引用关系。数据集中的每篇论文都有一个包含1433个特征的特征向量,这些特征向量是通过将每篇论文的标题和摘要转化为词向量、计算TF-IDF得到的。 在Cora数据集中,论文被分为7个不同的类别(如机器学习、神经网络、数据库等)。数据集总共包含2708个节点(论文),其中有140个节点(论文)带有类别标签,其余节点没有标签。因此,Cora数据集被广泛用于基于图结构的半监督学习问题的研究中。 GCN模型可以用于Cora数据集的半监督学习任务。模型接受Cora数据集的邻接矩阵和特征矩阵作为输入。通过对邻接矩阵进行卷积操作,并结合特征矩阵,GCN模型能够通过学习节点之间的关系以及节点的特征信息来预测未标记节点的标签。 研究者可以使用Cora数据集来验证自己所提出的GCN模型在半监督学习任务上的性能。当然,Cora数据集也可以用于其他与引文网络相关的研究,如节点分类、链路预测等。 总而言之,Cora数据集为研究者提供了一个用于验证GCN模型性能以及进行其他引文网络相关研究的标准数据集,通过该数据集可以促进图神经网络领域的发展。 ### 回答2: GCN(Graph Convolutional Network)是一种用于图数据学习的深度学习模型,可以学习节点的表示和图的关系。Cora数据集是一个常用的图数据集,用于评估和比较不同的图学习算法。 Cora数据集包含一个包含2708个科学论文的引文网络。这些论文分为7个类别,其中每个类别对应着一个研究领域。引文网络的节点表示论文,边表示论文间的引用关系。论文的特征向量是词频的One-Hot编码,而边缘是无向的。 在使用GCN对Cora数据集进行训练时,首先需要将图结构转换为邻接矩阵的表示。邻接矩阵中的每个元素代表两个节点之间的连接情况。随后,需要为每个节点生成初试的特征向量表示。GCN模型通过多层的图卷积操作来学习节点表示。 在训练过程中,GCN会通过前向传播和反向传播来更新权重,使得模型能够尽可能地准确地预测每个节点的类别。通过迭代训练,GCN模型可以逐渐提升对节点表示和图结构关系的学习能力。 在使用Cora数据集进行训练时,我们可以评估模型在节点分类任务上的性能。即给定一个节点,预测其所属的类别。通常,我们可以将数据集划分为训练集、验证集和测试集,并使用验证集来调整超参数,通过测试集来评估模型的泛化能力。 总之,GCN模型是一种用于图数据学习的强大工具,在Cora数据集上的应用可以帮助我们更好地理解和分析引文网络中的关系。 ### 回答3: GCN(Graph Convolutional Network)是一种用于图数据的深度学习模型,而Cora数据集则是用于GNN模型训练和评估的常用数据集之一。 Cora数据集是由Jon Kleinberg设计和发布的,用于文本分类任务。该数据集包含了从一系列研究论文中提取出的2708个文档的特征。这些文档分为7个类别,即机器学习、数据库、人类智能、设计与分析、系统、理论和数据结构。同时,这些文档之间的引用关系被用作图结构,通过边来表示不同文档之间的引用关系。这个图表示了论文之间的知识传播和交互。 在GCN中,每个节点代表一个文档,而边代表了文档之间的引用关系。对于Cora数据集而言,每个节点都有一个特征向量,包含了关于论文的内容信息。GCN模型通过使用图卷积神经网络的聚合操作来从邻居节点中汇聚信息,并将这些信息进行特征提取和表示学习。 训练一个GCN模型需要将Cora数据集划分为训练集、验证集和测试集。通常,将140个样本用作训练集,500个样本用作验证集,剩余的2068个样本用作测试集。在训练过程中,GCN模型将根据训练集上的标签信息进行参数反向传播和优化,以减小预测标签与真实标签之间的差距。 通过训练GCN模型,并使用Cora数据集进行评估,我们可以评估GCN模型在文本分类任务中的性能。通过计算模型在测试集上的准确率或其他性能指标,我们可以了解其在准确地预测不同文档的类别方面的能力。在实际应用中,GCN模型和Cora数据集可以被用于许多图数据相关的任务,如社交网络分析、推荐系统等。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值