t-distributed Stochastic Neighbor Embedding (t-SNE)
t-SNE mappa dati ad alta dimensionalità in 2D o 3D, mantenendo vicini i punti vicini e rivelando i cluster. Scopri come funziona, la perplessità, le insidie e il codice.
L'embedding stocastico dei vicini t-distribuito (t-SNE) è un metodo non lineare di riduzione della dimensionalità che colloca punti dati ad alta dimensionalità su una mappa bidimensionale o tridimensionale, in modo che i punti vicini nello spazio originale restino vicini sulla mappa. Laurens van der Maaten e Geoffrey Hinton lo hanno introdotto in un articolo del 2008 pubblicato sul Journal of Machine Learning Research. È uno strumento standard per la visualizzazione dei dati di embedding, feature delle immagini e dati di espressione genica a cellula singola, in cui centinaia di dimensioni nascondono gruppi che un grafico a dispersione 2D rende visibili.
Come funziona t-SNE#
t-SNE converte le distanze in probabilità in entrambi gli spazi e poi sposta i punti sulla mappa finché le due distribuzioni di probabilità non corrispondono:
- Similarità ad alta dimensionalità: per ogni punto, t-SNE colloca una distribuzione gaussiana sulle distanze da tutti gli altri punti e le converte in probabilità di scegliere ciascuno di essi come vicino. La larghezza di ogni gaussiana viene regolata affinché la perplexity della distribuzione, approssimativamente il numero effettivo di vicini, corrisponda a un valore scelto dall'utente: in questo modo le regioni dense hanno gaussiane strette e quelle sparse gaussiane ampie.
- Similarità a bassa dimensionalità: sulla mappa, le similarità derivano da una distribuzione t di Student con un grado di libertà, le cui code pesanti permettono ai punti moderatamente distanti di rimanere molto separati. Questo allevia il problema dell'affollamento: una mappa 2D ha troppo poco spazio per contenere tutti i vicini moderatamente prossimi che un punto ad alta dimensionalità può avere.
- Ottimizzazione: la discesa del gradiente sposta i punti sulla mappa per minimizzare la divergenza di Kullback-Leibler tra le due distribuzioni. Una fase iniziale di esagerazione moltiplica le similarità ad alta dimensionalità, per un fattore pari a 12 in scikit-learn, così i gruppi naturali formano presto cluster compatti e ben separati.
t-SNE esatto confronta ogni coppia di punti, quindi il costo cresce in modo quadratico rispetto al dataset. L'approssimazione di Barnes-Hut, predefinita in scikit-learn, riduce il costo a O(N log N) per le mappe 2D e 3D; implementazioni accelerate con FFT come openTSNE gestiscono milioni di punti.
Perplexity e interpretazione dei grafici t-SNE#
La perplexity è la principale impostazione. Sono tipici valori tra 5 e 50; il valore predefinito di scikit-learn è 30 e deve essere inferiore al numero di punti. Una perplexity bassa si concentra sulla struttura molto locale e può dividere un gruppo in frammenti, mentre una perplexity alta fonde gruppi vicini e mostra meglio la struttura globale. Poiché l'ottimizzazione non è convessa, semi casuali diversi possono produrre mappe diverse.
Tre proprietà rendono facile interpretare male i grafici t-SNE. Le dimensioni dei cluster sulla mappa dicono poco sulla dispersione dei cluster originali, perché t-SNE espande i gruppi densi e contrae quelli sparsi. Neanche le distanze tra cluster sono affidabili e, con una perplexity bassa, persino il rumore casuale può sembrare formare cluster. Inoltre, TSNE di scikit-learn non dispone del metodo transform, quindi una mappa già calcolata non può collocare nuovi punti senza essere ricalcolata; le coordinate t-SNE vengono usate di rado come feature di input per altri modelli.
t-SNE, PCA e UMAP a confronto#
L'analisi delle componenti principali (PCA) è lineare e deterministica, preserva le direzioni di massima varianza globale e proietta immediatamente i nuovi punti. t-SNE è non lineare e stocastico e preserva i vicinati locali. I due metodi vengono spesso combinati: ridurre i dati ad altissima dimensionalità a circa 50 dimensioni con PCA prima di eseguire t-SNE attenua il rumore e velocizza il calcolo; inoltre, t-SNE di scikit-learn inizializza la mappa a partire da PCA per impostazione predefinita, preservando una parte maggiore della disposizione globale. Anche UMAP, introdotto nel 2018, costruisce un grafo dei vicini, in genere è più veloce sui dataset grandi, spesso preserva meglio la struttura globale e può proiettare nuovi punti su una mappa esistente.
Questo esempio proietta in 2D le cifre scritte a mano di 64 pixel incluse in scikit-learn, usando entrambi i metodi, e misura l'attendibilità: la misura in cui i vicini più prossimi di ciascun punto sulla mappa erano anche suoi vicini in 64 dimensioni:
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}")Lo script stampa 0.830 per PCA e 0.993 per t-SNE. Comprimere 64 dimensioni in due direzioni lineari colloca molti punti accanto a cifre che erano lontane da loro nello spazio a 64 dimensioni, mentre la mappa t-SNE conserva quasi tutte le relazioni originali tra i 10 vicini più prossimi.
Applicazioni nel mondo reale#
- Ispezione delle feature apprese: proiettare gli output di estrazione delle feature di una rete mostra se le classi visivamente simili formano gruppi distinti. I modelli YOLO26 restituiscono un vettore di feature per immagine tramite
model.embed(), ricavato per impostazione predefinita dal penultimo layer; una mappa t-SNE di questi vettori mostra come un modello addestrato su misura separa le proprie classi. - Selezione dei dataset: Le immagini che finiscono nell'isola di un'altra classe sono spesso etichettate in modo errato; gruppi compatti di punti quasi identici segnalano possibili duplicati. Il pannello Clustering di Ultralytics Platform proietta gli embedding delle immagini di un dataset in un grafico a dispersione 2D simile per aiutarti a svolgere queste verifiche.
- Embedding di parole e documenti: le mappe dei vettori delle parole collocano parole correlate, come nomi di paesi o numeri, in gruppi vicini.
- Genomica a cellula singola: i ricercatori riducono a 2D l'espressione di migliaia di geni per cellula per identificare i tipi cellulari; in questa analisi t-SNE è stato a lungo lo standard, prima che molti gruppi passassero a UMAP.










