t-distributed Stochastic Neighbor Embedding (t-SNE)
t-SNE projette des données de grande dimension en 2D ou en 3D de sorte que les voisins restent voisins, ce qui révèle les regroupements. Découvre son fonctionnement, la perplexité, les pièges et le code.
L'intégration par voisin stochastique à distribution t (t-SNE) est une méthode non linéaire de réduction de dimensionnalité qui place des points de données de grande dimension sur une carte à deux ou trois dimensions, de sorte que les points voisins dans l'espace d'origine le restent sur la carte. Laurens van der Maaten et Geoffrey Hinton l'ont présentée dans un article publié en 2008 dans le Journal of Machine Learning Research. C'est un outil courant de visualisation des données pour les plongements, les caractéristiques d'image et les données d'expression génétique unicellulaires, où des centaines de dimensions masquent des groupes qu'un nuage de points 2D rend visibles.
Fonctionnement de t-SNE#
t-SNE convertit les distances en probabilités dans les deux espaces, puis déplace les points de la carte jusqu'à ce que les deux ensembles de probabilités correspondent :
- Similarités en haute dimension : Pour chaque point, t-SNE associe une distribution gaussienne aux distances vers tous les autres points et les convertit en probabilités de choisir chacun d'eux comme voisin. La largeur de chaque distribution gaussienne est réglée de sorte que la perplexité de la distribution, approximativement le nombre effectif de voisins, corresponde à une valeur choisie par l'utilisateur. Les régions denses reçoivent ainsi des distributions gaussiennes étroites et les régions clairsemées, des distributions larges.
- Similarités en basse dimension : Sur la carte, les similarités proviennent d'une loi de Student à un degré de liberté, dont les queues épaisses permettent à des points modérément éloignés de rester très espacés. Cela résout le problème d'encombrement : une carte 2D n'a pas assez de place pour représenter tous les voisins modérément proches qu'un point de grande dimension peut avoir.
- Optimisation : La descente de gradient déplace les points de la carte pour minimiser la divergence de Kullback-Leibler entre les deux distributions. Une phase d'exagération précoce multiplie les similarités en haute dimension, par 12 dans scikit-learn, afin que les groupes naturels se forment tôt en amas compacts et bien séparés.
t-SNE exact compare chaque paire de points, de sorte que son coût augmente de manière quadratique avec la taille du jeu de données. L'approximation de Barnes-Hut, utilisée par défaut dans scikit-learn, réduit ce coût à O(N log N) pour les cartes 2D et 3D, et les implémentations accélérées par FFT comme openTSNE gèrent des millions de points.
Perplexité et lecture d'un graphique t-SNE#
La perplexité est le paramètre principal. Les valeurs entre 5 et 50 sont courantes, la valeur par défaut de scikit-learn est 30, et elle doit être inférieure au nombre de points. Une faible perplexité se concentre sur une structure très locale et peut fragmenter un groupe, tandis qu'une perplexité élevée fusionne des groupes voisins et révèle davantage la disposition globale. Comme l'optimisation n'est pas convexe, différentes graines aléatoires peuvent produire différentes cartes.
Trois caractéristiques rendent les graphiques t-SNE faciles à mal interpréter. La taille des groupes sur la carte renseigne peu sur l'étendue des groupes d'origine, car t-SNE étend les groupes denses et contracte les groupes clairsemés. Les distances entre groupes ne sont pas fiables non plus et, avec une faible perplexité, même du bruit aléatoire peut sembler former des groupes. TSNE de scikit-learn n'a pas non plus de méthode transform : une carte ajustée ne peut donc pas y placer de nouveaux points sans être recalculée, et les coordonnées t-SNE servent rarement de caractéristiques d'entrée à d'autres modèles.
t-SNE, PCA et UMAP#
L'analyse en composantes principales (PCA) est linéaire et déterministe, préserve les directions de variance globale maximale et projette instantanément de nouveaux points. t-SNE est non linéaire et stochastique, et préserve les voisinages locaux. Les deux méthodes sont souvent combinées : réduire des données de très grande dimension à environ 50 dimensions avec PCA avant d'exécuter t-SNE atténue le bruit et accélère le calcul. Par défaut, t-SNE de scikit-learn initialise la carte à partir de PCA, ce qui préserve davantage la disposition globale. UMAP, introduit en 2018, construit lui aussi un graphe de voisinage, s'exécute généralement plus vite sur les grands jeux de données, préserve souvent davantage la structure globale et peut projeter de nouveaux points sur une carte existante.
Cet exemple projette en 2D, avec les deux méthodes, les chiffres manuscrits de 64 pixels fournis avec scikit-learn et mesure la fidélité, c'est-à-dire dans quelle mesure les plus proches voisins de chaque point sur la carte étaient aussi ses voisins en 64 dimensions :
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.manifold import TSNE, trustworthiness
# 1,797 handwritten digits, each an 8x8 image flattened to 64 features
X, y = load_digits(return_X_y=True)
# Project to 2D with a linear method and with t-SNE
X_pca = PCA(n_components=2).fit_transform(X)
X_tsne = TSNE(n_components=2, perplexity=30, random_state=0).fit_transform(X)
# Trustworthiness near 1.0 means a point's 2D neighbors were also its 64D neighbors
print(f"PCA trustworthiness: {trustworthiness(X, X_pca, n_neighbors=10):.3f}")
print(f"t-SNE trustworthiness: {trustworthiness(X, X_tsne, n_neighbors=10):.3f}")Le script affiche 0.830 pour PCA et 0.993 pour t-SNE. Réduire 64 dimensions à deux directions linéaires place de nombreux points à côté de chiffres qui en étaient éloignés dans l'espace à 64 dimensions, tandis que la carte t-SNE conserve presque toutes les relations de plus proches voisins parmi les 10 voisins d'origine.
Applications concrètes#
- Inspection des caractéristiques apprises : Projeter les sorties d'extraction de caractéristiques d'un réseau permet de voir si les classes visuellement similaires forment des groupes distincts. Les modèles YOLO26 renvoient un vecteur de caractéristiques par image via
model.embed(), extrait par défaut de l'avant-dernière couche. Une carte t-SNE de ces vecteurs montre comment un modèle entraîné sur mesure sépare ses classes. - Curation de jeux de données : Les images situées dans l’îlot d’une autre classe sont souvent mal étiquetées, et les amas denses de points presque identiques signalent des doublons. Le panneau Clustering d’Ultralytics Platform projette les plongements d’images d’un jeu de données dans un nuage de points 2D similaire pour effectuer ces vérifications.
- Plongements de mots et de documents : Les cartes de vecteurs de mots placent les mots apparentés, comme les noms de pays ou les nombres, dans des groupes voisins.
- Génomique unicellulaire : Les chercheurs réduisent à 2D l'expression de milliers de gènes par cellule afin d'identifier les types cellulaires. t-SNE a longtemps été la méthode de référence pour cette analyse, avant que de nombreux groupes passent à UMAP.










