圖網絡進行鏈接預測(gnn for link prediction)


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM