Skip to content

pygda-team/pygda

Repository files navigation

PyPI version Documentation Status License: MIT contributions welcome

PyGDA is a Python library for Graph Domain Adaptation built upon PyTorch and PyG to easily train graph domain adaptation models in a sklearn style. PyGDA includes 15+ graph domain adaptation models. See examples with PyGDA below!

Graph Domain Adaptation Using PyGDA with 5 Lines of Code

from pygda.models import A2GNN

# choose a graph domain adaptation model
model = A2GNN(in_dim=num_features, hid_dim=args.nhid, num_classes=num_classes, device=args.device)

# train the model
model.fit(source_data, target_data)

# evaluate the performance
logits, labels = model.predict(target_data)

PyGDA is featured for:

  • Consistent APIs and comprehensive documentation.
  • Cover 15+ graph domain adaptation models.
  • Scalable architecture that efficiently handles large graph datasets through mini-batching and sampling techniques.
  • Seamlessly integrated data processing with PyG, ensuring full compatibility with PyG data structures.

Installation

Note: PyGDA depends on PyTorch, PyG, PyTorch Sparse and Pytorch Scatter. PyGDA does not automatically install these libraries for you. Please install them separately in order to run PyGDA successfully.

Required Dependencies:

  • torch>=1.13.1
  • torch_geometric>=2.4.0
  • torch_sparse>=0.6.15
  • torch_scatter>=2.1.0
  • python3
  • scipy
  • sklearn
  • numpy
  • cvxpy
  • tqdm

Installing with pip:

pip install pygda

or

Installation for local development:

git clone https://github.com/pygda-team/pygda
cd pygda
pip install -e .

Quick Start

Step 1: Load Data

from pygda.datasets import CitationDataset

source_dataset = CitationDataset(path, args.source)
target_dataset = CitationDataset(path, args.target)

Step 2: Build Model

from pygda.models import A2GNN

model = A2GNN(in_dim=num_features, hid_dim=args.nhid, num_classes=num_classes, device=args.device)

Step 3: Fit Model

model.fit(source_data, target_data)

Step 4: Evaluation

from pygda.metrics import eval_micro_f1, eval_macro_f1

logits, labels = model.predict(target_data)
preds = logits.argmax(dim=1)
mi_f1 = eval_micro_f1(labels, preds)
ma_f1 = eval_macro_f1(labels, preds)

Create your own GDA model

In addition to the easy application of existing GDA models, PyGDA makes it simple to implement custom models.

  • the customed model should inherit BaseGDA class.
  • implement your fit(), forward_model(), and predict() functions.

Reference

ID Paper Method Venue
1 DANE: Domain Adaptive Network Embedding DANE IJCAI 2019
2 Adversarial Deep Network Embedding for Cross-network Node Classification ACDNE AAAI 2020
3 Unsupervised Domain Adaptive Graph Convolutional Networks UDAGCN WWW 2020
4 Adversarial Separation Network for Cross-Network Node Classification ASN CIKM 2021
5 Graph Transfer Learning via Adversarial Domain Adaptation with Graph Convolution AdaGCN TKDE 2022
6 Non-IID Transfer Learning on Graphs GRADE AAAI 2023
7 Graph Domain Adaptation via Theory-Grounded Spectral Regularization SpecReg ICLR 2023
8 Structural Re-weighting Improves Graph Domain Adaptation StruRW ICML 2023
9 Improving Graph Domain Adaptation with Network Hierarchy JHGDA CIKM 2023
10 Bridged-GNN: Knowledge Bridge Learning for Effective Knowledge Transfer KBL CIKM 2023
11 Domain-adaptive Message Passing Graph Neural Network DMGNN NN 2023
12 Correntropy-Induced Wasserstein GCN: Learning Graph Embedding via Domain Adaptation CWGCN TIP 2023
13 SA-GDA: Spectral Augmentation for Graph Domain Adaptation SAGDA MM 2023
14 Graph Domain Adaptation: A Generative View DGDA TKDD 2024
15 Rethinking Propagation for Unsupervised Graph Domain Adaptation A2GNN AAAI 2024
16 Pairwise Alignment Improves Graph Domain Adaptation PairAlign ICML 2024