gnn for link prediction(gnn4lp)
项目地址:https://github.com/jiangnanboy/gnn4lp
利用图神经网络进行链接预测(link prediction)。
Guide
Intro
本项目是对此前项目gcn_for_prediction_of_protein_interactions 的改动,使其应用于链接预测(link prediction),可以应用于两种数据集:a.带节点特征;b.不带节点特征。
a.带节点特征数据集如【data/cora】
b.不带节点特征数据集如【data/yeast】
Model
模型
模型主要使用图神经网络,如gae、vgae等
-
1.GCNModelVAE(src/vgae):图卷积自编码和变分图卷积自编码(config中可配置使用自编码或变分自编码),利用gae/vgae作为编码器,InnerProductDecoder作解码器。 Variational Graph Auto-Encoders 。
-
2.GCNModelARGA(src/arga):对抗正则化图自编码,利用gae/vgae作为生成器;一个三层前馈网络作判别器。 Adversarially Regularized Graph Autoencoder for Graph Embedding 。
-
3.GATModelVAE(src/graph_att_gae):基于图注意力的图卷积自编码和变分图卷积自编码(config中可配置使用自编码或变分自编码),利用gae/vgae作为编码器,InnerProductDecoder作解码器。这是我在以上【1】方法的基础上加入了一层图注意力层,关于图注意力可见【Reference】中的【GRAPH ATTENTION NETWORKS】。
-
4.GATModelGAN(src/graph_att_gan):基于图注意力的对抗正则化图自编码,利用gae/vgae作为生成器;一个三层前馈网络作判别器,这是我在以上【2】方法的基础上加入了一层图注意力层,关于图注意力可见【Reference】中的【GRAPH ATTENTION NETWORKS】。
-
5.NHGATModelVAE(src/graph_nheads_att_gae):基于图多头注意力的图卷积自编码和变分图卷积自编码(config中可配置使用自编码或变分自编码),利用gae/vgae作为编码器,InnerProductDecoder作解码器。此方法是在【3】方法的基础上将图注意力层改为多头注意力层。
-
6.NHGATModelGAN(src/graph_nheads_att_gan):基于图多头注意力的对抗正则化图自编码,利用gae/vgae作为生成器;一个三层前馈网络作判别器,此方法在【4】方法的基础上将图注意力层改为多头注意力层。
Usage
-
相关参数的配置config见每个模型文件夹中的config.cfg文件,训练和预测时会加载此文件。
-
训练及预测
1.model comparison
(1).不带节点特征数据集【data/yeast】
GCNModelVAE GCNModelARGA GATModelVAE GATModelGAN NHGATModelVAE NHGATModelVAE epochs 20 20 20 20 20 20 precision 0.8708 0.8700 0.8629 0.8715 0.8672 0.8680 roc_score 0.8814 0.8798 0.8758 0.8826 0.8770 0.8767 (2).带节点特征数据集【data/cora】
GCNModelVAE GCNModelARGA GATModelVAE GATModelGAN NHGATModelVAE NHGATModelVAE epochs 200 200 200 200 200 200 precision 0.7451 0.8544 0.8509 0.8392 0.8078 0.8156 roc_score 0.7404 0.8437 0.8686 0.8312 0.8278 0.8240 2.usage
(1).train
是否带节点特征可通过每个model文件夹中的【config.cfg】进行配置,如下:
config中有以下三个参数
node_cites_path = cora.cites # 节点间的引用数据 node_features_path = cora.content # 节点特征数据 with_feats = True # 是否带节点特征。True, node_features_path不为None;False, node_features_path为None
# train代码通用格式: from src.graph_nheads_att_gan.train import Train train = Train() train.train_model('config.cfg')
(2).predict
# predict代码通用格式: from src.graph_nheads_att_gan.predict import Predict predict = Predict() predict.load_model_adj('config_cfg') # 会返回原始的图邻接矩阵和经过模型编码后的hidden embedding经过内积解码的邻接矩阵,可以对这两个矩阵进行比对,得出link prediction. adj_orig, adj_rec = predict.predict()
Dataset
#####a. yeast dataset,【data/yeast】 数据来自酵母蛋白质相互作用yeast 。 数据集的格式如下,具体可见data。
YLR418C YOL145C
YOL145C YLR418C
YLR418C YOR123C
YOR123C YLR418C
...... ......
#####b. cora dataset,【data/cora】 数据来自Machine Learning Paper的数据集cora 。 数据集的格式如下,具体可见data 。
cora.cites:
35 1033
35 103482
35 103515
35 1050679
...... ......
cora.content:
31336 0 ... 1 0 0 0 0 0 0 Neural_Networks
1061127 0 ... 0 0 0 0 0 0 0 Rule_Learning
1106406 0 ... 0 0 0 0 0 0 0 Reinforcement_Learning
13195 0 ... 0 0 0 0 0 0 0 Reinforcement_Learning
...
Install
- 安装:pip install GNN4LP
- 下载源码:
git clone https://github.com/jiangnanboy/gnn4lp.git
cd gnn4lp
python setup.py install
通过以上两种方法的任何一种完成安装都可以。如果不想安装,可以下载github源码包
Cite
如果你在研究中使用了GNN4LP,请按如下格式引用:
@software{GNN4LP,
author = {Shi Yan},
title = {GNN4LP: gnn for link prediction},
year = {2021},
url = {https://github.com/jiangnanboy/gnn4lp},
}