Il problema con t-SNE è che non conserva distanze né densità. Conserva solo in una certa misura i vicini più vicini. La differenza è sottile, ma influisce su qualsiasi algoritmo basato sulla densità o sulla distanza.
Per vedere questo effetto, è sufficiente generare una distribuzione gaussiana multivariata. Se visualizzi questo, avrai una palla che è densa e diventa molto meno densa verso l'esterno, con alcuni valori anomali che possono essere davvero molto lontani.
Ora esegui t-SNE su questi dati. Di solito otterrai un cerchio di densità piuttosto uniforme. Se usi una bassa perplessità, potrebbe anche avere degli strani schemi. Ma non puoi più davvero distinguere gli outlier.
Ora rendiamo le cose più complicate. Usiamo 250 punti in una distribuzione normale a (-2,0) e 750 punti in una distribuzione normale a (+2,0).
Questo dovrebbe essere un set di dati semplice, ad esempio con EM:
Se eseguiamo t-SNE con perplessità predefinita di 40, otteniamo un modello stranamente sagomato:
Non male, ma anche non facile da raggruppare, vero? Avrai difficoltà a trovare un algoritmo di clustering che funziona esattamente come desiderato. E anche se chiedessi agli umani di raggruppare questi dati, molto probabilmente troveranno qui più di 2 cluster.
Se eseguiamo t-SNE con una perplessità troppo piccola come 20, otteniamo più di questi schemi che non esistono:
Questo raggrupperà ad esempio con DBSCAN, ma produrrà quattro cluster. Quindi attenzione, t-SNE può produrre modelli "falsi"!
La perplessità ottimale sembra essere intorno agli 80 per questo set di dati; ma non credo che questo parametro dovrebbe funzionare per ogni altro set di dati.
Ora questo è visivamente piacevole, ma non migliore per l'analisi . Un annotatore umano potrebbe probabilmente selezionare un taglio e ottenere un risultato decente; k-significa tuttavia fallirà anche in questo scenario molto semplice ! Puoi già vedere che le informazioni sulla densità vengono perse , tutti i dati sembrano vivere in un'area della stessa densità. Se invece aumentassimo ulteriormente la perplessità, l'uniformità aumenterebbe e la separazione ridurrebbe di nuovo.
In conclusione, utilizzare t-SNE per la visualizzazione (e provare diversi parametri per ottenere qualcosa di visivamente piacevole!), Ma piuttosto non eseguire il clustering in seguito , in particolare non utilizzare algoritmi basati sulla distanza o sulla densità, poiché queste informazioni erano intenzionalmente (!) perso. Gli approcci basati sul grafico di vicinato possono andare bene, ma quindi non è necessario eseguire prima t-SNE in anticipo, basta usare immediatamente i vicini (perché t-SNE cerca di mantenere questo nn-graph in gran parte intatto).
Più esempi
Questi esempi sono stati preparati per la presentazione del documento (ma non possono ancora essere trovati nel documento, come ho fatto questo esperimento in seguito)
Erich Schubert e Michael Gertz.
Intrinsic t-Stochastic Neighbor Embedding for Visualization and Outlier Detection - Un rimedio contro la maledizione della dimensionalità?
In: Atti della 10a Conferenza internazionale sulla ricerca e le applicazioni di similarità (SISAP), Monaco, Germania. 2017
Innanzitutto, abbiamo questi dati di input:
Come puoi immaginare, questo deriva da un'immagine "color me" per i bambini.
Se eseguiamo questo tramite SNE ( NON t-SNE , ma il predecessore):
Wow, il nostro pesce è diventato un vero mostro marino! Poiché la dimensione del kernel è scelta localmente, perdiamo gran parte delle informazioni sulla densità.
Ma sarai davvero sorpreso dall'output di t-SNE:
In realtà ho provato due implementazioni (ELKI e sklearn), ed entrambe hanno prodotto un tale risultato. Alcuni frammenti disconnessi, ma ognuno sembra in qualche modo coerente con i dati originali.
Due punti importanti per spiegare questo:
SGD si basa su una procedura di perfezionamento iterativa e può rimanere bloccato in optima locale. In particolare, ciò rende difficile per l'algoritmo "capovolgere" una parte dei dati che ha rispecchiato, poiché ciò richiederebbe lo spostamento di punti attraverso altri che dovrebbero essere separati. Quindi, se alcune parti del pesce sono speculari e altre parti non sono speculari, potrebbe non essere possibile risolvere questo problema.
t-SNE utilizza la distribuzione t nello spazio proiettato. Contrariamente alla distribuzione gaussiana utilizzata dal normale SNE, ciò significa che la maggior parte dei punti si respingono a vicenda , poiché hanno 0 affinità nel dominio di input (Gaussian ottiene rapidamente zero), ma> 0 affinità nel dominio di output. A volte (come in MNIST) questo rende la visualizzazione migliore. In particolare, può aiutare a "dividere" un set di dati un po ' più che nel dominio di input. Questa repulsione aggiuntiva spesso fa sì che i punti utilizzino più uniformemente l'area, il che può anche essere desiderabile. Ma qui in questo esempio, gli effetti repellenti in realtà causano la separazione di frammenti di pesce.
Possiamo aiutare (su questo set di dati giocattolo ) il primo problema usando le coordinate originali come posizionamento iniziale, piuttosto che coordinate casuali (come di solito usato con t-SNE). Questa volta, l'immagine è sklearn invece di ELKI, perché la versione di sklearn aveva già un parametro per passare le coordinate iniziali:
Come puoi vedere, anche con un posizionamento iniziale "perfetto", t-SNE "spezzerà" il pesce in un numero di punti originariamente collegati perché la repulsione di Student-t nel dominio di output è più forte dell'affinità gaussiana nell'input spazio.
Come puoi vedere, t-SNE (e anche SNE!) Sono interessanti tecniche di visualizzazione , ma devono essere gestite con cura. Preferirei non applicare k-mean sul risultato! perché il risultato sarà fortemente distorto e né le distanze né la densità saranno preservate bene. Invece, piuttosto usarlo per la visualizzazione.