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:

Key Innovation:

  • Decouples feature transformation from propagation

  • Uses personalized PageRank for efficient propagation

  • More robust to oversmoothing than standard GCNs

Summary#

Classes:

MLPPredictor

Multi-layer perceptron for feature transformation (Predict step).

Functions:

generate_appnp_embedding

Generate node embeddings using APPNP.

normalize_adjacency

Normalize adjacency matrix for APPNP propagation.

personalized_pagerank_propagation

Apply personalized PageRank propagation to features.

run_appnp

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 steps

  • use_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: Module

Multi-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 dimension

  • hidden_dim (int) – Hidden layer dimension

  • output_dim (int) – Output embedding dimension

  • n_layers (int) – Number of layers

  • dropout (float) – Dropout rate

forward(x)[source]#

Forward pass through MLP.

Parameters:

x – Input features [N, input_dim]

Returns:

Transformed features [N, output_dim]

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 graph

  • embedding_dim (int) – Output embedding dimension

  • hidden_dim (int) – Hidden layer dimension for MLP

  • n_layers (int) – Number of MLP layers

  • alpha (float) – Teleport probability for PageRank (typically 0.1-0.2)

  • K (int) – Number of propagation steps (typically 10)

  • dropout (float) – Dropout rate

  • lr (float) – Learning rate

  • weight_decay (float) – L2 regularization

  • epochs (int) – Number of training epochs

  • use_features (bool) – Whether to use provided features

  • features (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