pytorch_geometric如何使用图神经网络预测节点之间的关系?

数据挖掘 pytorch-几何
2021-10-03 16:26:13

假设我有一个部分连通图,它代表许多不相关社区的成员。我想预测同一社区成员之间可能的友谊:在 0 到 10 之间的滑动范围内,他们彼此喜欢的程度如何?我有他们的一些特点,不管他们是基督徒,还是喜欢运动,还有一些地理特征,他们之间的距离。

联系可能是他们是否是社交媒体平台上的朋友。在网络中,它们不一定与边相连。

我正在pytorch_geometric为每个社区构建一个图表,并在社交媒体平台上为连接添加边。每个方向都有一条边,因此该图是双向的。然后我创建Data()实例。

Data(x=x, edge_index=edge_index)

x具有节点特征的数组在哪里?edge_index

x = array([[ 0,  4,  6,  0,  0,  1],
   [ 1,  4,  6,  0,  0,  1],
   [ 2,  4,  6,  0,  0,  1],
   [ 3,  4,  6,  0,  1,  0],
   [ 4,  4,  6,  0,  1,  0],
   ...])

edge_index = [[0, 1],
 [0, 9],
 [0, 10],
 [0, 11],
 [1, 2],
 [1, 7],
 [1, 12],
 [2, 3],
 [2, 6],
 [2, 13],
 [3, 4],
 ...]

不确定从这里开始训练和预测关系的最佳途径是什么。这种情况下一般用什么?文档中提到了几个选项:EdgeConv、DynamicEdgeConv、GCNCon。我不确定首先要尝试什么。有什么可以解决这类问题的吗,还是我必须设置自己的MessagePassing课程?

Data()接受y在节点上训练的参数。我可以实际使用pytorch_geometric这种问题还是我必须回去pytorch

1个回答

似乎在 pytorch 几何中执行此操作的最简单方法是使用自动编码器模型。在示例文件夹中有一个autoencoder.py演示了它的使用。它的要点是它接收一个单一的图,并尝试从它学习的编码潜在空间中预测节点之间的链接(参见 recon_loss)。该示例是一个大图,出于我的目的,我有多个图,这意味着每个图都将它们的边缘分开并单独训练。