Predicción de enlaces y clasificación de grafos
Tarea de predicción de aristas, muestreo negativo, pooling a nivel de grafo y GINConv para clasificación de grafos.
Predicción de enlaces y clasificación de grafos es una lección gratuita de Learn AI with Python en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Learn AI with Python, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Learn AI with Python incluye 4 lecciones en total.
Dos tareas nuevas con grafos
Además de clasificar nodos, las GNN pueden realizar:
- Predicción de enlaces: ¿existirá una arista entre dos nodos? (sugerencias de amistad, interacciones entre fármacos)
- Clasificación de grafos: asignar una etiqueta a un grafo completo (¿es tóxica esta molécula?)
Configuración de la predicción de enlaces
En la predicción de enlaces, primero calculamos las representaciones vectoriales de los nodos con una GNN y después puntuamos pares de nodos candidatos. Una puntuación alta significa que el modelo considera que debería existir una arista entre ellos.
Puntuación de una arista
Una puntuación habitual para una arista es el producto escalar de las dos representaciones vectoriales de los nodos: score = dot(h_u, h_v). Las representaciones vectoriales similares producen un producto escalar alto, lo que predice un enlace probable.
h = gnn(data.x, data.edge_index) # node embeddings
score = (h[u] * h[v]).sum(dim=-1) # dot product per pairMuestreo negativo
El grafo solo enumera las aristas existentes (positivas). Para entrenar un clasificador también necesitamos pares sin arista. El muestreo negativo selecciona aleatoriamente pares de nodos que no están conectados como ejemplos negativos, equilibrando el conjunto de entrenamiento.
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 predicción de enlaces es binaria (hay arista o no la hay). Asignamos una puntuación a los pares positivos y negativos, les asignamos las etiquetas 1 y 0, y entrenamos con BCEWithLogitsLoss, que combina una sigmoide con la entropía cruzada binaria de forma numéricamente estable.
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)Cambio a la clasificación de grafos
Para la clasificación de grafos necesitamos un único vector por grafo, no uno por nodo. Después de que las capas GNN produzcan las representaciones vectoriales de los nodos, las agrupamos mediante pooling en una única representación a nivel de grafo.
global_mean_pool
global_mean_pool calcula el promedio de todas las representaciones vectoriales de los nodos de un grafo para producir un único vector de tamaño fijo, independientemente del tamaño del grafo. Un índice batch indica qué nodos pertenecen a cada grafo cuando se procesan varios grafos en un mismo lote.
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)Por qué es importante el pooling
El pooling hace que el modelo sea invariante al orden de los nodos y al tamaño del grafo: dos grafos isomorfos producen el mismo vector agrupado. El pooling mediante la media es sencillo; el pooling mediante la suma y el máximo son alternativas con sensibilidades diferentes.
GINConv
GINConv (Graph Isomorphism Network) es una convolución más expresiva. Utiliza un MLP y una agregación mediante suma, diseñados específicamente para maximizar la capacidad discriminativa del paso de mensajes en tareas a nivel de 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)La conexión con Weisfeiler-Leman
GIN está diseñado para ser tan potente como la prueba de Weisfeiler-Leman (WL), un algoritmo clásico para distinguir grafos no isomorfos. Muchas GNN más sencillas no pueden diferenciar ciertos grafos; GIN sí puede hacerlo, dentro de los límites de la prueba WL, lo que lo hace eficaz para la clasificación de grafos.
Elegir la herramienta adecuada
Adapte la arquitectura a la tarea:
- Predicción de enlaces: embeddings de GNN + puntuación mediante producto escalar + muestreo negativo + función de pérdida BCE
- Clasificación de grafos: convoluciones expresivas como GINConv + pooling global + clasificador
Comprobación rápida
Compruebe sus conocimientos.
Resumen
Ha aprendido sobre la predicción de enlaces y la clasificación de grafos:
- Puntuación de arista =
dot(h_u, h_v), entrenada con muestreo negativo y BCEWithLogitsLoss - global_mean_pool convierte los embeddings de los nodos en un vector a nivel de grafo
- GINConv es muy expresiva y alcanza el nivel de la prueba de Weisfeiler-Leman
Preguntas frecuentes
¿La lección «Predicción de enlaces y clasificación de grafos» es gratis?
Sí — el texto completo de «Predicción de enlaces y clasificación de grafos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Learn AI with Python, actualiza a CoddyKit PRO. El curso de Learn AI with Python incluye 4 lecciones en total.
¿Qué aprenderé en «Predicción de enlaces y clasificación de grafos»?
Tarea de predicción de aristas, muestreo negativo, pooling a nivel de grafo y GINConv para clasificación de grafos. Practicas Learn AI with Python con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Learn AI with Python?
No se requiere experiencia previa. Learn AI with Python en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Predicción de enlaces y clasificación de grafos»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Learn AI with Python?
Sí. Cada lección de Learn AI with Python incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Teoría de grafos para aprendizaje automático
- Redes convolucionales de grafos (GCN)
- Clasificación de nodos con GNN
- Predicción de enlaces y clasificación de grafos