图与推荐[3] - Link Predict

 
【图与推荐】往期回顾:

 

本文介绍:图与推荐[3] - Link Predict


从以下几个方面介绍:
(1)Geometry 的 loader.dataset 介绍
(2)链接预测样本集构造
(3)代码实现 链接预测 (不实现也希望能够将框架写出来)

 


1.1 Pytorch Geometric

参考链接:图神经网络 PyTorch Geometric 入门教程

PyTorch Geometric Library (简称 PyG) 是一个基于 PyTorch 的图神经网络库,地址是:https://github.com/rusty1s/pytorch_geometric。它包含了很多 GNN 相关论文中的方法实现和常用数据集,并且提供了简单易用的接口来生成图,因此对于复现论文来说也是相当方便。用法大多数和 PyTorch 很相近,因此熟悉 PyTorch 的同学使用这个库可以很快上手。

torch_geometric.data.Data
节点和节点之间的边构成了图。所以在 PyG 中,如果你要构建图,那么需要两个要素:节点和边。PyG 提供了torch_geometric.data.Data (下面简称Data) 用于构建图,包括 5 个属性,每一个属性都不是必须的,可以为空。

  • x: 用于存储每个节点的特征,形状是[num_nodes, num_node_features]。
  • edge_index: 用于存储节点之间的边,形状是 [2, num_edges]。
  • pos: 存储节点的坐标,形状是[num_nodes, num_dimensions]。
  • y: 存储样本标签。如果是每个节点都有标签,那么形状是[num_nodes, *];如果是整张图只有一个标签,那么形状是[1, *]。
  • edge_attr: 存储边的特征。形状是[num_edges, num_edge_features]。

在这里插入图片描述

[node_attr] 存储到 node 节点的embedding 表示
[edge_index] 用于 node 的稀疏存储
[edge_attr] 用于存储边的特征向量

import torch
from torch_geometric.data import Data

edge_index=torch.tensor(
    [[0,0,0,1,2,2,3,3],
    [1,2,3,0,0,3,0,2]],dtype=torch.long
)
node_attr=torch.tensor(
    [[-1,1,2],[1,1,1],[0,1,2],[3,1,2]]
)

edge_attr=torch.tensor(
    [[0,0,0],[0,1,2],[0,3,3],[0,0,0],[0,0,2],[0,2,3],[0,3,3],[0,2,3]]
)

data=Data(x=node_attr,edge_index=edge_index,edge_attr=edge_attr)
print(data)
# Data(edge_attr=[8, 3], edge_index=[2, 8], x=[4, 3])

 
 

Dataset 与 DataLoader
PyG 的 Dataset继承自torch.utils.data.Dataset.

(1) Dataset
尽管 PyG 已经包含许多有用的数据集,我们也可以通过继承torch_geometric.data.Dataset使用自己的数据集。提供 2 种不同的Dataset:

  • InMemoryDataset:使用这个Dataset会一次性把数据全部加载到内存中。
  • Dataset: 使用这个Dataset每次加载一个数据到内存中,比较常用。

参考:使用Pytorch Geometric建立自己的数据集

(2) DataLoader
通过torch_geometric.data.DataLoader可以方便地使用 mini-batch。

train_loader = DataLoader(train_graphs, batch_size=args.batch_size, shuffle=True)
val_loader = DataLoader(val_graphs, batch_size=args.batch_size, shuffle=True)
test_loader = DataLoader(test_graphs, batch_size=args.batch_size, shuffle=False)

train_graphs、val_graphs、test_graphs的形成如下面代码所示,先定义一个列表,然后通过minus_edge()或者plus_edge() 得到一个 torch_geometric.data.Data 格式的数据样本,并且append到这个列表中。

...
train_graphs = []
val_graphs = []
test_graphs = []

# train_graph
for i in range(data.train_pos.size(1)):
    train_graphs.append(minus_edge(data_observed, 1, data.train_pos[:, i], args))

for i in range(data.train_neg.size(1)):
    train_graphs.append(plus_edge(data_observed, 0, data.train_neg[:, i], args))

下面来看看train_loader的样式:
在这里插入图片描述

 
 

1.2 Link Predition 样本集构造

1.3 Pytorch 实现

链接预测方法:

  • 通过节点标签对相关拓扑信息进行编码。

  • 通过建立子图分类处理链接预测。

    GCN 两阶段预测:

    • (1) 首先是设计一个仅依赖于定义链接的两个节点的评分函数。
    • (2) 围绕结点链接提取子图,并通过(子)图分类解决链接预测(Zhang & Chen,2017)。
      在这两种情况下,节点表示要么以无监督方式学习(Kipf & Welling, 2016b; Mavromatis & Karypis, 2020),要么由与链接分类器联合训练的 GNN 计算(Zhang & Chen, 2018; Zhang et al., 2020 )
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值