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},
}
