Official implementation of "The structure-preserving spectral graph neural network for dual kinase inhibitors and synergy scoring in gastric cancer"
π Published in npj Digital Medicine, Volume 9, Article 1 (2025) | Paper
Yang ZhangΒΉ, Chunhong YuanΒ², Longgang WangΒ³, Yujia ChenΒΉ, Yanpeng XingΒΉ, Yuanlin SunΒ³
ΒΉ Department of Gastrocolorectal Surgery, The First Hospital of Jilin University, Changchun, China
Β² Faculty of Control Systems and Robotics, ITMO University, St. Petersburg, Russia
Β³ Department of Gastrointestinal Surgery, Shandong Cancer Hospital and Institute, Jinan, China
DuoKinaseNet is a dual-task spectral graph neural network for predicting drug-target interactions (DTI) targeting HER2 and FGFR2b kinases in gastric cancer, with synergy scoring for rational combination design.
- HER2: AUC-ROC 0.903 (AUPR 0.891) on unseen protein benchmark
- FGFR2b: AUC-ROC 0.895 (AUPR 0.883) on unseen protein benchmark
- Outperforms state-of-the-art methods including 3D-aware models (SP-DTI)
- Enables rational polypharmacology design to overcome therapeutic resistance
Structure-Preserving Spectral Expansion (SPSE) addresses the locality bias of conventional GNNs:
- Spectral Feature Expansion: Augments node features with Laplacian eigenvectors for global geometric awareness
- Diffusion-Distance Biased Attention: Guides message passing using graph diffusion distances
- Spectral Smoothness Regularization: Encourages embeddings to align with graph manifold structure
- MolProtEncoder: Dual-view Transformer encoders with cross-attention fusion
- HetGraphAggregator: Relation-aware GAT with spectral and geodesic distance weighting
- ContrastMetaLearner: Graph co-contrastive learning and few-shot meta-learning
- RobustPredHead: Calibrated DTI prediction with safety-aware synergy scoring
- Python >= 3.8 (3.10+ recommended)
- PyTorch >= 2.0
- CUDA >= 11.0 (optional, for GPU acceleration)
- 16GB+ RAM
# Clone repository
git clone https://github.com/YourUsername/DuoKinaseNet.git
cd DuoKinaseNet
# Create conda environment
conda create -n duokinase python=3.10
conda activate duokinase
# Install PyTorch (example for CUDA 11.8)
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
# Install DuoKinaseNet
pip install -e .
# Or install with ML dependencies
pip install -e ".[ml]"We use DrugBank v5.1.13:
- 18,491 drug entries
- 23,934 drug-target associations
- 5,138 unique protein targets
- Targets: HER2 (UniProt P04626), FGFR2b (UniProt P21802)
-
Download DrugBank XML:
- Register at https://go.drugbank.com (free academic license)
- Download
full database.xml
-
Parse XML to JSONL:
# Parse DrugBank XML
duokinase-parse --max-records 1000 # Use --max-records for testing
# Or specify custom path
duokinase-parse --config config.yamlOutput: artifacts/drugbank.parsed.jsonl
- Build Heterogeneous Graph:
# Construct graph with Drugs, Proteins, Pathways nodes
duokinase-build-graphOutput: artifacts/graph_stats.json
Train DuoKinaseNet with default settings:
# Basic training
duokinase-train --config config.yaml
# Custom configuration
duokinase-train --config custom_config.yaml --gpu 0Configuration Example (config.yaml):
training:
batch_size: 64
max_epochs: 100
learning_rate: 1e-4
device: "cuda"
spectral:
num_eigen: 128
diffusion_time: 1.0
model:
hidden_dim: 512
num_gnn_layers: 6
num_heads: 8
dropout: 0.1# Evaluate on unseen protein split
python evaluate.py \
--checkpoint checkpoints/best_model.pth \
--split unseen_protein
# Evaluate on custom test set
python evaluate.py \
--checkpoint checkpoints/best_model.pth \
--test_file data/custom_test.csv# Single drug-target prediction
python predict.py \
--checkpoint checkpoints/best_model.pth \
--drug_smiles "CC(C)Cc1ccc(cc1)[C@@H](C)C(=O)O" \
--protein_seq "MKVLWAALLVTFLAGCQAKVE..."
# Batch prediction
python predict.py \
--checkpoint checkpoints/best_model.pth \
--input data/pairs.csv \
--output results/predictions.csvRun targeted screening for synergistic drug combinations:
# Screen top 50 combinations
duokinase-screen --top 50
# Screen with custom safety threshold
duokinase-screen --top 100 --safety-threshold 0.8Output (artifacts/HER2_FGFR2b_pairs.tsv):
drug_H: HER2-targeting candidatedrug_F: FGFR2b-targeting candidatescore: Final synergy scorepsi: Safety penalty (CYP conflicts, QT prolongation, etc.)bliss: Bliss independence proxyp_HER2,p_FGFR2b: Calibrated single-agent probabilities
DuoKinaseNet/
βββ duokinase/
β βββ models/
β β βββ encoders.py # DrugEncoder, ProteinEncoder, CrossViewFusion
β β βββ aggregator.py # HetGraphAggregator with SPSE
β β βββ heads.py # PredictionHead, ContrastiveHead
β βββ graph/
β β βββ build.py # Graph construction
β β βββ spectral.py # Spectral operators
β β βββ synergy.py # Synergy scoring logic
β βββ training/
β β βββ loop.py # Trainer with meta-learning
β β βββ losses.py # Loss functions
β βββ core/
β β βββ config.py # Configuration management
β β βββ safety.py # Safety penalty calculation
β βββ data/
β βββ preprocess.py # Data preprocessing
βββ scripts/
β βββ train.py # Training script
β βββ evaluate.py # Evaluation script
β βββ predict.py # Prediction script
βββ configs/
β βββ default.yaml # Default configuration
βββ tests/
β βββ test_model.py # Unit tests
βββ config.yaml # Main configuration file
βββ requirements.txt # Dependencies
βββ setup.py # Package setup
βββ README.md # This file
Run a quick test on subset of data:
duokinase-smokepytest tests/ -v| Model | HER2 AUC-ROC | FGFR2b AUC-ROC | Avg. AUC |
|---|---|---|---|
| SVM | 0.743 | 0.729 | 0.736 |
| Random Forest | 0.768 | 0.751 | 0.760 |
| XGBoost | 0.791 | 0.778 | 0.785 |
| DeepDTA | 0.812 | 0.798 | 0.805 |
| DeepConv-DTI | 0.829 | 0.814 | 0.822 |
| GraphDTA | 0.845 | 0.831 | 0.838 |
| MolTrans | 0.856 | 0.843 | 0.850 |
| DrugBAN | 0.864 | 0.849 | 0.857 |
| SP-DTI | 0.873 | 0.861 | 0.867 |
| DuoKinaseNet | 0.903 | 0.895 | 0.899 |
| Component Removed | HER2 | FGFR2b | Avg. |
|---|---|---|---|
| Complete SPSE | -7.65% | -7.65% | -7.65% |
| Diffusion Distance | -4.78% | -4.78% | -4.78% |
| Spectral Features | -2.17% | -2.17% | -2.17% |
| Cross-Attention Fusion | -3.45% | -3.45% | -3.45% |
| Contrastive Learning | -5.84% | -5.84% | -5.84% |
If you use this code in your research, please cite our paper:
@article{zhang2026duokinasenet,
title={The structure-preserving spectral graph neural network for dual kinase inhibitors and synergy scoring in gastric cancer},
author={Zhang, Yang and Yuan, Chunhong and Wang, Longgang and Chen, Yujia and Xing, Yanpeng and Sun, Yuanlin},
journal={npj Digital Medicine},
volume={9},
number={1},
pages={1},
year={2026},
publisher={Nature Publishing Group},
doi={10.1038/s41746-025-02240-7}
}This project is licensed under the MIT License - see the LICENSE file for details.
For questions, collaborations, or issues:
- Chunhong Yuan: 521031@niuitmo.ru
- Yang Zhang: yangzhang@jlu.edu.cn
GitHub Issues: Please report bugs or request features via GitHub Issues
This work was supported by:
- Scientific and Technological Development Program of Jilin Province (Grant No. YDZJ202201ZYTS133)
- Jilin Province Department of Education (Grant No. JJKH20221074KJ)
- Natural Science Foundation of Shandong Province (Grant No. ZR2025QC1746)
Special thanks to the DrugBank team for maintaining the comprehensive drug database.
- Paper: https://doi.org/10.1038/s41746-025-02240-7
- DrugBank: https://go.drugbank.com
- PyTorch Geometric: https://pytorch-geometric.readthedocs.io
Last Updated: January 2026