Contents
While developing the VARIANT-GNN project, I frequently encountered this question: "We already know neural networks, what does the graph add?" This post answers that question.
The Difference Between Classical Data and Graph Data#
Think of classical machine learning models. You have a table: each row is a sample, each column is a feature. The model sees these rows independently.
But some data is inherently interconnected:
- Social networks (who is friends with whom?)
- Molecular structures (bonds between atoms)
- Genomic interactions (which gene affects which protein?)
In this kind of data, relationship information is as important as sample information. Graph structure captures exactly this.
What Is a Graph?#
A graph consists of two components:
- Nodes: Entities (gene, atom, user)
- Edges: Relationships (bond, interaction, friendship)
Each node has features (feature vector). GNNs iteratively combine these features with neighbors.
The Message Passing Mechanism#
The core principle of GNNs: each node receives messages from its neighbors, aggregates these messages, and updates its own representation. This repeats over several rounds (layers).
h_v^(k) = UPDATE(h_v^(k-1), AGG({h_u^(k-1) : u ∈ N(v)}))After enough rounds, each node has learned a representation of its local structure.
Why GNN in Genomic Data?#
Each genetic variant in ClinVar is not isolated. It's connected to other variants in the same gene, related genes, and protein interaction networks. You can't fit these connections into a table — but you can fit them into a graph.
In VARIANT-GNN, we used PyTorch Geometric. Each variant is a node, biological relationships are edges. The model learns this structure to predict pathogenicity.
When Should You Use GNN?#
GNN is the right choice if:
- The relationships (edges) in your data carry information
- The output of one sample depends on its neighbors
- The data is naturally structured as a network/graph
For tabular data, XGBoost or classical DNN usually gives better results — GNNs are not needed there.