0Pricing
Learn AI with Python · Leçon

Prédiction de liens et classification de graphes

Tâche de prédiction d’arêtes, échantillonnage négatif, agrégation au niveau du graphe, GINConv pour la classification de graphes.

Prédiction de liens et classification de graphes est une leçon Learn AI with Python gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Learn AI with Python, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Learn AI with Python comprend 4 leçons au total.

Deux nouvelles tâches sur les graphes

Au-delà de la classification des nœuds, les GNN prennent en charge :

  • Prédiction de liens : une arête existera-t-elle entre deux nœuds ? (suggestions d’amis, interactions médicamenteuses)
  • Classification de graphes : attribuer une étiquette à un graphe entier (cette molécule est-elle toxique ?)

Configuration de la prédiction de liens

Pour la prédiction de liens, nous calculons d’abord les représentations vectorielles des nœuds avec un GNN, puis nous attribuons un score à des paires candidates de nœuds. Un score élevé signifie que le modèle estime qu’une arête devrait les relier.

Attribuer un score à une arête

Un score courant pour une arête est le produit scalaire des représentations vectorielles des deux nœuds : score = dot(h_u, h_v). Des représentations vectorielles similaires produisent un produit scalaire élevé, ce qui prédit un lien probable.

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

Échantillonnage négatif

Le graphe ne répertorie que les arêtes existantes (exemples positifs). Pour entraîner un classifieur, nous avons également besoin de paires sans arête. L’échantillonnage négatif sélectionne aléatoirement des paires de nœuds qui ne sont pas connectés comme exemples négatifs, afin d’équilibrer le jeu d’entraînement.

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 prédiction de liens est binaire (arête ou absence d’arête). Nous attribuons un score aux paires positives et négatives, nous leur attribuons respectivement les étiquettes 1 et 0, puis nous entraînons le modèle avec BCEWithLogitsLoss, qui combine une fonction sigmoïde et une entropie croisée binaire de manière numériquement stable.

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)

Passer à la classification de graphes

Pour la classification de graphes, nous avons besoin d’un seul vecteur par graphe, et non d’un vecteur par nœud. Après que les couches GNN ont produit les représentations vectorielles des nœuds, nous les regroupons en une représentation au niveau du graphe.

global_mean_pool

global_mean_pool calcule la moyenne de toutes les représentations vectorielles des nœuds d’un graphe afin de produire un vecteur de taille fixe, quelle que soit la taille du graphe. Un index batch lui indique à quels graphes appartiennent les nœuds lorsque plusieurs graphes sont regroupés dans un même lot.

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)

Pourquoi le regroupement est important

Le regroupement rend le modèle invariant à l’ordre des nœuds et à la taille du graphe : deux graphes isomorphes produisent le même vecteur regroupé. Le regroupement par moyenne est simple ; les regroupements par somme et par maximum sont des solutions alternatives, avec des sensibilités différentes.

GINConv

GINConv (réseau d'isomorphisme de graphes) est une convolution plus expressive. Elle utilise un MLP et une agrégation par somme, spécialement conçus pour maximiser le pouvoir de discrimination de la transmission de messages dans les tâches au niveau du graphe.

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)

Le lien avec Weisfeiler-Leman

GIN est conçu pour être aussi puissant que le test de Weisfeiler-Leman (WL), un algorithme classique permettant de distinguer les graphes non isomorphes. De nombreux GNN plus simples ne peuvent pas différencier certains graphes ; GIN le peut, dans les limites du test WL, ce qui le rend performant pour la classification de graphes.

Choisir le bon outil

Adaptez l'architecture à la tâche :

  • Prédiction de liens : représentations vectorielles de GNN + score par produit scalaire + échantillonnage négatif + perte BCE
  • Classification de graphes : convolutions expressives comme GINConv + agrégation globale + classifieur

Vérification rapide

Testez vos connaissances.

Récapitulatif

Vous avez appris la prédiction de liens et la classification de graphes :

  • Score d'arête = dot(h_u, h_v), entraîné avec un échantillonnage négatif et BCEWithLogitsLoss
  • global_mean_pool transforme les représentations vectorielles des nœuds en un vecteur au niveau du graphe
  • GINConv est très expressive et atteint les capacités du test de Weisfeiler-Leman

Questions Fréquemment Posées

La leçon « Prédiction de liens et classification de graphes » est-elle gratuite ?

Oui — le texte complet de « Prédiction de liens et classification de graphes » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Learn AI with Python, passe à CoddyKit PRO. Le cours Learn AI with Python comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Prédiction de liens et classification de graphes » ?

Tâche de prédiction d’arêtes, échantillonnage négatif, agrégation au niveau du graphe, GINConv pour la classification de graphes. Tu pratiques Learn AI with Python avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Learn AI with Python ?

Aucune expérience préalable n'est requise. Learn AI with Python sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Prédiction de liens et classification de graphes » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Learn AI with Python ?

Oui. Chaque leçon Learn AI with Python inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Théorie des graphes pour l’apprentissage automatique
  2. Réseaux convolutifs de graphes (GCN)
  3. Classification de nœuds avec les GNN
  4. Prédiction de liens et classification de graphes
← Retour à Learn AI with Python