A Directed Weighted Graph Neural Network with Tensor Fusion for Multi-Omics Cancer Subtype Classification
This repository provides the implementation of TF-DWGNet, a Graph Neural Network framework that integrates tree-based directed weighted graph construction with tensor fusion for multi-omics cancer subtype classification. The paper is published by NAR Genomics and Bioinformatics (2026).
TF-DWGNet captures:
- Intra-omics dependencies via directed weighted graphs constructed from XGBoost
- Cross-omics interactions via tensor fusion
The original datasets are obtained from:
The processed multi-omics datasets used in this study (BRCA, UCEC, and KIPAN) are provided in the Data/ folder.
Each dataset contains:
- Combined feature matrix (omics data) with corresponding class labels (Y) for each omics, named as
DataName_meth_expr_Y.csv,DataName_mRNA_expr_Y.csv, andDataName_miRNA_expr_Y.csv - Corresponding feature names for each omics, named as
DataName_meth_featurename.csv,DataName_mRNA_featurename.csv, andDataName_miRNA_featurename.csv
The main Python script is: TF-DWGNet_main.py
- Python 3.7+
- TensorFlow 1.x or TensorFlow 2.x in
tensorflow.compat.v1mode - NumPy
- scikit-learn
- XGBoost
- SciPy
- matplotlib
This code uses tensorflow.compat.v1 and tf.disable_v2_behavior() for TensorFlow 1-style execution.
A conda environment file environment_TF-DWGNet.yml is provided for reproducibility:
conda env create -f environment_TF-DWGNet.yml
conda activate TF-DWGNetThe code can run on both CPU and GPU.
To run TF-DWGNet on the provided KIPAN dataset:
python TF-DWGNet_main.py "Data/KIPAN/KIPAN_meth_expr_Y.csv" "Data/KIPAN/KIPAN_mRNA_expr_Y.csv" "Data/KIPAN/KIPAN_miRNA_expr_Y.csv" "XGB"
The script will print:
- Input summary (data paths, random seed, split ratio)
- Training progress (loss and accuracy)
- Final test performance (Accuracy, F1-weighted, F1-macro)
- Graph construction summary (number of nodes, edges, sparsity)
- Omics importance scores
- Saved feature importance files
Example output:
========== Input Summary ==========
Input Files:
Omics 1: Data/KIPAN/KIPAN_meth_expr_Y.csv
Omics 2: Data/KIPAN/KIPAN_mRNA_expr_Y.csv
Omics 3: Data/KIPAN/KIPAN_miRNA_expr_Y.csv
Graph Construction Method: XGB
Random Seed: 20
Split Ratio: train/validation/test = 60/20/20
========== Training Progress (Every 10 Epochs) ==========
Epoch: 1, Train Loss: 11.037, Validation Loss: 10.762, Train Accuracy: 0.381, Validation Accuracy: 0.387
Epoch: 11, Train Loss: 9.957, Validation Loss: 9.626, Train Accuracy: 0.468, Validation Accuracy: 0.465
Epoch: 21, Train Loss: 9.006, Validation Loss: 8.688, Train Accuracy: 0.560, Validation Accuracy: 0.556
Epoch: 31, Train Loss: 8.223, Validation Loss: 7.872, Train Accuracy: 0.605, Validation Accuracy: 0.641
Epoch: 41, Train Loss: 7.393, Validation Loss: 7.196, Train Accuracy: 0.634, Validation Accuracy: 0.634
...
(Intermediate epochs omitted for brevity)
...
Epoch: 951, Train Loss: 0.202, Validation Loss: 0.722, Train Accuracy: 1.000, Validation Accuracy: 0.951
Epoch: 961, Train Loss: 0.205, Validation Loss: 0.713, Train Accuracy: 1.000, Validation Accuracy: 0.958
Epoch: 971, Train Loss: 0.189, Validation Loss: 0.707, Train Accuracy: 1.000, Validation Accuracy: 0.958
Epoch: 981, Train Loss: 0.189, Validation Loss: 0.687, Train Accuracy: 1.000, Validation Accuracy: 0.951
Epoch: 991, Train Loss: 0.176, Validation Loss: 0.683, Train Accuracy: 1.000, Validation Accuracy: 0.958
========== Final Test Performance ==========
Test Loss: 1.964
Test Accuracy: 0.958
Test F1-weighted: 0.958
Test F1-macro: 0.958
========== Data Summary ==========
Sample Size (n): 707
Feature Dimensions (p): Omics 1 = 2000, Omics 2 = 2000, Omics 3 = 472
Selected Feature Dimensions (p*): Omics 1 = 331, Omics 2 = 263, Omics 3 = 160
========== Graph Construction Summary ==========
Number of Trees (M): 100
Edges for Omics 1: 793 including self-loops (462 excluding self-loops)
Edges for Omics 2: 608 including self-loops (345 excluding self-loops)
Edges for Omics 3: 485 including self-loops (325 excluding self-loops)
========== Omics Importance ==========
Relative Importance of Omics 1: 0.529
Relative Importance of Omics 2: 0.340
Relative Importance of Omics 3: 0.131
Total: 1.000
========== Feature Importance Output ==========
Feature importance scores for Omics 1 saved to: KIPAN_meth_expr_Y_IF_Omics1.csv
Feature importance scores for Omics 2 saved to: KIPAN_mRNA_expr_Y_IF_Omics2.csv
Feature importance scores for Omics 3 saved to: KIPAN_miRNA_expr_Y_IF_Omics3.csv
This example demonstrates a complete end-to-end run of TF-DWGNet.
All experiments are conducted using fixed random seeds and predefined data splits (train/validation/test = 60/20/20) to ensure reproducibility. Minor variations in performance metrics may still occur due to inherent randomness in optimization and hardware differences.
The reported values in the manuscript correspond to the experimental protocol described in the paper, with results averaged over multiple independent runs (e.g., 20 runs), each conducted with a fixed random seed, with different seeds across runs.
If using the TF-DWGNet methodology or code in your research, please cite:
Yang, T., & Chen, Z. (2026). TF-DWGNet: A directed weighted graph neural network with tensor fusion for multi-omics cancer subtype classification. NAR Genomics and Bioinformatics, 8(2), lqag054. https://doi.org/10.1093/nargab/lqag054
Tiantian Yang
tyang@uidaho.edu