Quand les données suivent une surface ou une trajectoire enroulée, la distance en ligne droite trompe : deux points proches à vol d'oiseau peuvent être très éloignés le long de la trajectoire. Isomap mesure les distances en suivant les données, de voisin en voisin, puis les déplie à plat.
Pour mesurer la distance entre deux villages de montagne, on suit la route en lacets, pas la ligne droite à travers la montagne.
Chaque mesure est reliée à ses k plus proches voisines. On obtient un réseau qui épouse la forme des données.
La distance entre deux points devient la longueur du plus court chemin dans ce réseau : c'est la distance géodésique, calculée par l'algorithme de Dijkstra ou de Floyd.
Un positionnement multidimensionnel classique (MDS) place les points en 1 ou 2 dimensions en respectant au mieux ces distances. La trajectoire enroulée devient une ligne droite.
1 000 cycles d'un outil de coupe. Deux indicateurs décrivent une spirale à mesure que l'outil s'use, le troisième varie avec la charge du jour. L'usure réelle n'est pas mesurée en production : les données sont simulées pour pouvoir la connaître.
Isomap déplie la spirale en un axe unique qui range les cycles dans l'ordre de l'usure. Cet axe sert d'indice de santé de l'outil, à suivre dans le temps pour planifier son remplacement.
On mesure la corrélation de rang (Spearman) entre l'axe trouvé et l'usure réelle. Sur la simulation, Isomap retrouve l'ordre de façon quasi parfaite (1,00), quand le premier axe d'une ACP n'atteint que 0,23. En conditions réelles, on valide sur les outils dont l'usure a été mesurée en atelier.
Noms donnés pour R (vegan) et Python (scikit-learn).
Nombre de voisins reliés. Trop petit : le réseau se coupe en morceaux, et vegan s'arrête alors avec une erreur. Trop grand : des raccourcis traversent les spires et Isomap se comporte comme une ACP. On teste de 5 à 15.
Nombre de dimensions dépliées : 1 pour un indice de progression, 2 pour une carte.
Les distances mélangent tous les indicateurs. S'ils sont dans des unités différentes, on les standardise, sinon le plus grand domine le réseau de voisins.
# Usure d'un outil de coupe : Isomap en R
library(vegan)
set.seed(42)
# Usure réelle, inconnue en pratique : de 0 (outil neuf) à 1 (à changer)
usure <- sort(runif(1000))
# Deux indicateurs dont la trajectoire s'enroule avec l'usure, un troisième lié à la charge du jour
angle <- 3 * pi * (0.5 + usure)
charge <- 10 * runif(1000)
mesures <- cbind(angle * cos(angle), charge, angle * sin(angle))
mesures <- mesures + matrix(rnorm(3000, sd = 0.2), ncol = 3)
iso <- isomap(dist(mesures), ndim = 1, k = 10)
acp <- prcomp(mesures)$x[, 1]
# Corrélation de rang avec l'usure réelle : 1 = ordre parfaitement retrouvé
cat("Isomap :", round(abs(cor(iso$points[, 1], usure, method = "spearman")), 3), "\n")
cat("ACP :", round(abs(cor(acp, usure, method = "spearman")), 3), "\n")
# Usure d'un outil de coupe : Isomap en Python
import numpy as np
from scipy.stats import spearmanr
from sklearn.manifold import Isomap
from sklearn.decomposition import PCA
rng = np.random.default_rng(42)
# Usure réelle, inconnue en pratique : de 0 (outil neuf) à 1 (à changer)
usure = np.sort(rng.uniform(0, 1, 1000))
# Deux indicateurs dont la trajectoire s'enroule avec l'usure, un troisième lié à la charge du jour
angle = 3 * np.pi * (0.5 + usure)
charge = 10 * rng.uniform(size=1000)
mesures = np.column_stack([angle * np.cos(angle), charge, angle * np.sin(angle)])
mesures = mesures + 0.2 * rng.normal(size=mesures.shape)
iso = Isomap(n_neighbors=10, n_components=1).fit_transform(mesures)
acp = PCA(n_components=1).fit_transform(mesures)
# Corrélation de rang avec l'usure réelle : 1 = ordre parfaitement retrouvé
print("Isomap :", round(abs(spearmanr(iso[:, 0], usure)[0]), 3))
print("ACP :", round(abs(spearmanr(acp[:, 0], usure)[0]), 3))
La distance mesurée en restant sur la surface des données, comme la longueur d'une route de montagne, par opposition à la distance en ligne droite. Isomap l'approche par le plus court chemin dans un réseau qui relie chaque point à ses voisins.
L'ACP cherche des axes droits et conserve les distances en ligne droite. Isomap conserve les distances le long des données. Sur des données non enroulées, les deux donnent des résultats proches ; sur une spirale ou une surface courbe, seule Isomap retrouve la progression.
Parce qu'un seul point mal placé peut relier deux parties éloignées de la surface. Le plus court chemin emprunte alors ce raccourci, et les distances de milliers de points deviennent fausses. On retire donc les valeurs aberrantes avant, et on vérifie la stabilité en faisant varier le nombre de voisins.
Même objectif de résumé, mais avec des distances en ligne droite. Échoue sur une trajectoire enroulée.
Voir la fiche → pour les groupesGarde les voisinages locaux sans chercher à respecter les grandes distances. Meilleur pour voir des groupes que pour une progression.
Voir la fiche → l'alternative rapideRepose aussi sur un graphe de voisins, passe à l'échelle et tolère mieux le bruit.
Voir la fiche →Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.
Nous utilisons des cookies de mesure d'audience et de suivi publicitaire pour comprendre la fréquentation du site et l'efficacité de nos annonces. Rien n'est déposé sans votre accord. En savoir plus