0Pricing
Learn AI with Python · Lezione

Predizione dei link e classificazione dei grafi

Task di predizione degli archi, negative sampling, pooling a livello di grafo, GINConv per la classificazione dei grafi

Predizione dei link e classificazione dei grafi è una lezione Learn AI with Python gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Learn AI with Python, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Learn AI with Python include 4 lezioni in totale.

Due nuovi compiti sui grafi

Oltre a classificare i nodi, le GNN gestiscono:

  • Link prediction: esisterà un arco tra due nodi? (suggerimenti di amicizia, interazioni tra farmaci)
  • Classificazione dei grafi: assegnare un'etichetta a un intero grafo (questa molecola è tossica?)

Configurazione della link prediction

Nella link prediction calcoliamo innanzitutto gli embedding dei nodi con una GNN, quindi assegniamo un punteggio alle coppie candidate di nodi. Un punteggio alto indica che il modello ritiene che tra i due nodi debba esistere un arco.

Assegnare un punteggio a un arco

Un punteggio comune per un arco è il prodotto scalare dei due embedding dei nodi: score = dot(h_u, h_v). Embedding simili producono un prodotto scalare alto e indicano un collegamento probabile.

h = gnn(data.x, data.edge_index)        # node embeddings
score = (h[u] * h[v]).sum(dim=-1)        # dot product per pair

Campionamento negativo

Il grafo elenca solo gli archi esistenti (positivi). Per addestrare un classificatore servono anche le coppie prive di arco. Il campionamento negativo seleziona casualmente coppie di nodi non collegati come esempi negativi, bilanciando il set di addestramento.

from torch_geometric.utils import negative_sampling

neg_edge_index = negative_sampling(
    edge_index=data.edge_index,
    num_nodes=data.num_nodes,
    num_neg_samples=data.edge_index.size(1),
)

BCEWithLogitsLoss

La link prediction è binaria (arco o nessun arco). Assegniamo un punteggio alle coppie positive e negative, assegniamo loro le etichette 1 e 0 e addestriamo il modello con BCEWithLogitsLoss, che combina una sigmoide con la cross-entropy binaria in modo numericamente stabile.

import torch

pos = (h[pos_u] * h[pos_v]).sum(-1)
neg = (h[neg_u] * h[neg_v]).sum(-1)
scores = torch.cat([pos, neg])
labels = torch.cat([torch.ones_like(pos), torch.zeros_like(neg)])
loss = torch.nn.functional.binary_cross_entropy_with_logits(scores, labels)

Passare alla classificazione dei grafi

Per la classificazione dei grafi ci serve un unico vettore per ogni grafo, non uno per ogni nodo. Dopo che i livelli GNN hanno prodotto gli embedding dei nodi, li aggreghiamo in una rappresentazione a livello di grafo.

global_mean_pool

global_mean_pool calcola la media di tutti gli embedding dei nodi di un grafo per produrre un vettore di dimensione fissa, indipendentemente dalle dimensioni del grafo. Un indice batch indica a quali grafi appartengono i nodi quando più grafi vengono raggruppati in un unico batch.

from torch_geometric.nn import global_mean_pool

h = gnn(x, edge_index)               # [num_nodes, dim]
hg = global_mean_pool(h, batch)       # [num_graphs, dim]
logits = classifier(hg)

Perché il pooling è importante

Il pooling rende il modello invariante all'ordine dei nodi e alle dimensioni del grafo: due grafi isomorfi producono lo stesso vettore aggregato. Il mean pooling è semplice; il sum pooling e il max pooling sono alternative con sensibilità diverse.

GINConv

GINConv (Graph Isomorphism Network) è una convoluzione più espressiva. Utilizza un MLP e un'aggregazione per somma, progettati specificamente per massimizzare il potere discriminante del message passing nelle attività a livello di grafo.

from torch_geometric.nn import GINConv
import torch

mlp = torch.nn.Sequential(
    torch.nn.Linear(in_dim, hid),
    torch.nn.ReLU(),
    torch.nn.Linear(hid, hid),
)
conv = GINConv(mlp)

Il legame con Weisfeiler-Leman

GIN è progettato per essere potente quanto il test di Weisfeiler-Leman (WL), un algoritmo classico per distinguere i grafi non isomorfi. Molte GNN più semplici non riescono a distinguere determinati grafi; GIN sì, entro i limiti del test WL, risultando così efficace per la classificazione dei grafi.

Scelta dello strumento giusto

Abbini l'architettura all'attività:

  • Predizione dei link: embedding GNN + scoring con prodotto scalare + negative sampling + loss BCE
  • Classificazione dei grafi: convoluzioni espressive come GINConv + pooling globale + classificatore

Verifica rapida

Metta alla prova le Sue conoscenze.

Riepilogo

Ha appreso la predizione dei link e la classificazione dei grafi:

  • Score dell'arco = dot(h_u, h_v), con addestramento tramite negative sampling e BCEWithLogitsLoss
  • global_mean_pool trasforma gli embedding dei nodi in un vettore a livello di grafo
  • GINConv è altamente espressiva e raggiunge le capacità del test di Weisfeiler-Leman

Domande Frequenti

La lezione «Predizione dei link e classificazione dei grafi» è gratuita?

Sì — il testo completo di «Predizione dei link e classificazione dei grafi» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Learn AI with Python, passa a CoddyKit PRO. Il corso Learn AI with Python include 4 lezioni in totale.

Cosa imparerò in «Predizione dei link e classificazione dei grafi»?

Task di predizione degli archi, negative sampling, pooling a livello di grafo, GINConv per la classificazione dei grafi Eserciti Learn AI with Python con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Learn AI with Python?

Non è richiesta alcuna esperienza precedente. Learn AI with Python su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Predizione dei link e classificazione dei grafi»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Learn AI with Python?

Sì. Ogni lezione Learn AI with Python include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Teoria dei grafi per il machine learning
  2. Graph Convolutional Network (GCN)
  3. Classificazione dei nodi con le GNN
  4. Predizione dei link e classificazione dei grafi
← Torna a Learn AI with Python