图数据集之cora数据集介绍 --- 适用于GCN任务
生活随笔
收集整理的這篇文章主要介紹了
图数据集之cora数据集介绍 --- 适用于GCN任务
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
一 cora數據集- 內容介紹
cora數據集- 下載地址
https://linqs-data.soe.ucsc.edu/public/lbc/cora.tgz
樣本特征,標簽,鄰接矩陣
- 該數據集共2708個樣本點,每個樣本點都是一篇科學論文,所有樣本點被分為8個類別,類別分別是1)基于案例;2)遺傳算法;3)神經網絡;4)概率方法;5)強化學習;6)規則學習;7)理論
- 每篇論文都由一個1433維的詞向量表示,所以,每個樣本點具有1433個特征。詞向量的每個元素都對應一個詞,且該元素只有0或1兩個取值。取0表示該元素對應的詞不在論文中,取1表示在論文中。所有的詞來源于一個具有1433個詞的字典。
- 每篇論文都至少引用了一篇其他論文,或者被其他論文引用,也就是樣本點之間存在聯系,沒有任何一個樣本點與其他樣本點完全沒聯系。如果將樣本點看做圖中的點,則這是一個連通的圖,不存在孤立點。
二 文件格式
- 下載的壓縮包中有三個文件,分別是cora.cites,cora.content,README。
- README是對數據集的介紹;cora.content是所有論文的獨自的信息;cora.cites是論文之間的引用記錄。
cora.content
共有2708行,每一行代表一個樣本點,即一篇論文。如下所示,每一行由三部分組成,
- 分別是論文的編號,如31336;
- 論文的詞向量,一個有1433位的二進制, 表示1433個詞匯中的每個單詞在文章中是存在(由1表示)還是不存在(由0表示)
- 論文的類別,如Neural_Networks。
因此該數據的特征應該有 1433 個維度,另外加上第一個字段 idx,最后一個字段 label, 一共有 1433 + 2 個維度。
31336 0 0..... 0 0 0 0 0 0 0 0 0 0 0 0 Neural_Networks 1061127 0 0..... 0 0 0 0 0 0 0 0 0 0 0 0 Rule_Learning 1106406 0 0..... 0 0 0 0 0 0 0 0 0 0 0 Reinforcement_Learningcora.cites
- 共5429行, 每一行有兩個論文編號,表示第一個編號的論文先寫,第二個編號的論文引用第一個編號的論文。如下所示:
- 如果將論文看做圖中的點,那么這5429行便是點之間的5429條邊。
?
三 用Python處理
用python導入數據,并分離樣本特征,標簽,創建鄰接矩陣
import numpy as np import scipy.sparse as sp import torchimport pandas as pd import numpy as np# 導入數據:分隔符為空格 raw_data = pd.read_csv('../data/cora/cora.content', sep='\t', header=None) num = raw_data.shape[0] # 樣本點數2708# 將論文的編號轉[0,2707] a = list(raw_data.index) b = list(raw_data[0]) c = zip(b, a) map = dict(c)# 將詞向量提取為特征,第二行到倒數第二行 features = raw_data.iloc[:, 1:-1] # 檢查特征:共1433個特征,2708個樣本點 print(features.shape)labels = pd.get_dummies(raw_data[1434]) print(labels.head(3))raw_data_cites = pd.read_csv('../data/cora/cora.cites', sep='\t', header=None)# 創建一個規模和鄰接矩陣一樣大小的矩陣 matrix = np.zeros((num, num)) # 創建鄰接矩陣 for i, j in zip(raw_data_cites[0], raw_data_cites[1]):x = map[i]y = map[j] # 替換論文編號為[0,2707]matrix[x][y] = matrix[y][x] = 1 # 有引用關系的樣本點之間取1 # 查看鄰接矩陣的元素和(按每列匯總) print(sum(matrix))?
?
import numpy as np import scipy.sparse as sp import torchdef encode_onehot(labels):classes = set(labels)classes_dict = {c: np.identity(len(classes))[i, :] for i, c inenumerate(classes)}labels_onehot = np.array(list(map(classes_dict.get, labels)),dtype=np.int32)return labels_onehotdef normalize(mx):"""Row-normalize sparse matrix"""rowsum = np.array(mx.sum(1))r_inv = np.power(rowsum, -1).flatten()r_inv[np.isinf(r_inv)] = 0.r_mat_inv = sp.diags(r_inv)mx = r_mat_inv.dot(mx)return mxdef normalize_adj(adjacency):degree = np.array(adjacency.sum(1))d_hat = sp.diags(np.power(degree, -0.5).flatten())adj_norm = d_hat.dot(adjacency).dot(d_hat).tocoo()return adj_normdef normalize_features(features):return features / features.sum(1)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_matrix(idx_features_labels[:, 1:-1], dtype=np.float32)labels = encode_onehot(idx_features_labels[:, -1])# build graphidx = np.array(idx_features_labels[:, 0], dtype=np.int32)idx_map = {j: i for i, j in enumerate(idx)}edges_unordered = np.genfromtxt("{}{}.cites".format(path, dataset),dtype=np.int32)edges = np.array(list(map(idx_map.get, edges_unordered.flatten())),dtype=np.int32).reshape(edges_unordered.shape)adj = sp.coo_matrix((np.ones(edges.shape[0]), (edges[:, 0], edges[:, 1])),shape=(labels.shape[0], labels.shape[0]),dtype=np.float32)# build symmetric adjacency matrixadj = adj + adj.T.multiply(adj.T > adj) - adj.multiply(adj.T > adj)features = normalize_features(features)adj = normalize_adj(adj + sp.eye(adj.shape[0]))idx_train = range(140)idx_val = range(200, 500)idx_test = range(500, 1500)features = torch.FloatTensor(np.array(features))labels = torch.LongTensor(np.where(labels)[1])adj = torch.FloatTensor(np.array(adj.todense()))idx_train = torch.LongTensor(idx_train)idx_val = torch.LongTensor(idx_val)idx_test = torch.LongTensor(idx_test)return adj, features, labels, idx_train, idx_val, idx_test# Load data adj, features, labels, idx_train, idx_val, idx_test = load_data()?
總結
以上是生活随笔為你收集整理的图数据集之cora数据集介绍 --- 适用于GCN任务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android6.0 开发中怎么实现一个
- 下一篇: 海外美国vps适合哪些网站使用