qbiocode.apps.quvine.baselines.appnp module#
APPNP: Approximate Personalized Propagation of Neural Predictions
Implementation of APPNP (Predict then Propagate) for node embedding generation. APPNP combines neural network predictions with personalized PageRank propagation.
Reference:
Klicpera et al. (2019). Predict then Propagate: Graph Neural Networks meet Personalized PageRank https://arxiv.org/abs/1810.05997
Original implementation: gasteigerjo/ppnp
Key Innovation:
Decouples feature transformation from propagation
Uses personalized PageRank for efficient propagation
More robust to oversmoothing than standard GCNs
Summary#
Classes:
Multi-layer perceptron for feature transformation (Predict step). |
Functions:
Generate node embeddings using APPNP. |
|
Normalize adjacency matrix for APPNP propagation. |
|
Apply personalized PageRank propagation to features. |
|
Run APPNP and return embeddings aligned to nodes. |
Reference#
- normalize_adjacency(adj, add_self_loops=True)[source]#
Normalize adjacency matrix for APPNP propagation.
- Computes: D^(-1/2) @ (A + I) @ D^(-1/2) if add_self_loops=True
D^(-1/2) @ A @ D^(-1/2) otherwise
- Parameters:
adj (
spmatrix) – Adjacency matrix (sparse)add_self_loops (
bool) – Whether to add self-loops
- Return type:
spmatrix- Returns:
Normalized adjacency matrix
- personalized_pagerank_propagation(features, adj_normalized, alpha=0.1, K=10, use_sparse=True)[source]#
Apply personalized PageRank propagation to features.
Computes: Z = (1-alpha) * sum_{k=0}^{K-1} alpha^k * A^k @ X
This is the power iteration approximation of: Z = (1-alpha) * (I - alpha*A)^(-1) @ X
- Parameters:
features (
ndarray) – Input features [N, d]adj_normalized (
Union[spmatrix,ndarray]) – Normalized adjacency matrix [N, N]alpha (
float) – Teleport probability (1-alpha is restart probability)K (
int) – Number of propagation stepsuse_sparse (
bool) – Whether to use sparse matrix operations
- Return type:
ndarray- Returns:
Propagated features [N, d]
- class MLPPredictor(input_dim, hidden_dim, output_dim, n_layers=2, dropout=0.5)[source]#
Bases:
ModuleMulti-layer perceptron for feature transformation (Predict step).
- __init__(input_dim, hidden_dim, output_dim, n_layers=2, dropout=0.5)[source]#
Initialize MLP predictor.
- Parameters:
input_dim (
int) – Input feature dimensionhidden_dim (
int) – Hidden layer dimensionoutput_dim (
int) – Output embedding dimensionn_layers (
int) – Number of layersdropout (
float) – Dropout rate
- generate_appnp_embedding(G, embedding_dim=128, hidden_dim=64, n_layers=2, alpha=0.1, K=10, dropout=0.5, lr=0.01, weight_decay=0.0005, epochs=200, use_features=False, features=None, random_state=42, device='cpu')[source]#
Generate node embeddings using APPNP.
Workflow: 1. Initialize random features (or use provided features) 2. Train MLP to transform features (Predict step) 3. Apply personalized PageRank propagation (Propagate step) 4. Return final embeddings
- Parameters:
G (
Graph) – NetworkX graphembedding_dim (
int) – Output embedding dimensionhidden_dim (
int) – Hidden layer dimension for MLPn_layers (
int) – Number of MLP layersalpha (
float) – Teleport probability for PageRank (typically 0.1-0.2)K (
int) – Number of propagation steps (typically 10)dropout (
float) – Dropout ratelr (
float) – Learning rateweight_decay (
float) – L2 regularizationepochs (
int) – Number of training epochsuse_features (
bool) – Whether to use provided featuresfeatures (
Optional[ndarray]) – Node features [N, d] (optional)random_state (
int) – Random seed
- Return type:
ndarray- Returns:
Node embeddings [N, embedding_dim]
- Raises:
ImportError – If PyTorch is not installed
- run_appnp(graph, nodes, dimensions=64, hidden_dim=64, n_layers=2, alpha=0.1, K=10, dropout=0.5, lr=0.01, weight_decay=0.0005, epochs=200, seed=None, device='cpu')[source]#
Run APPNP and return embeddings aligned to nodes.
This is a wrapper function compatible with the existing baseline interface.
- Parameters:
graph (networkx.Graph) – Input graph
nodes (List[node]) – Canonical node ordering
dimensions (int) – Embedding dimension
hidden_dim (int) – Hidden layer dimension
n_layers (int) – Number of MLP layers
alpha (float) – Teleport probability (0.1-0.2 recommended)
K (int) – Number of propagation steps
dropout (float) – Dropout rate
lr (float) – Learning rate
weight_decay (float) – L2 regularization
epochs (int) – Training epochs
seed (int, optional) – Random seed
- Returns:
Node embeddings [N, dimensions]
- Return type:
np.ndarray