Cosa c'è di sbagliato in t-SNE vs PCA per la riduzione dimensionale usando R?


27

Ho una matrice di numeri in virgola mobile 336x256 (336 genomi batterici (colonne) x 256 frequenze di tetranucleotidi normalizzate (righe), ad esempio ogni colonna aggiunge fino a 1).

Ottengo buoni risultati quando eseguo la mia analisi utilizzando l'analisi dei componenti principali. Per prima cosa, calcolo i cluster di kmean sui dati, quindi eseguo un PCA e coloro i punti di dati in base al raggruppamento di kmean iniziale in 2D e 3D:

library(tsne)
library(rgl)
library(FactoMineR)
library(vegan)
# read input data
mydata <-t(read.csv("freq.out", header = T, stringsAsFactors = F, sep = "\t", row.names = 1))
# Kmeans Cluster with 5 centers and iterations =10000
km <- kmeans(mydata,5,10000)
# run principle component analysis
pc<-prcomp(mydata)
# plot dots
plot(pc$x[,1], pc$x[,2],col=km$cluster,pch=16)
# plot spiderweb and connect outliners with dotted line
pc<-cbind(pc$x[,1], pc$x[,2])
ordispider(pc, factor(km$cluster), label = TRUE)
ordihull(pc, factor(km$cluster), lty = "dotted")

inserisci qui la descrizione dell'immagine

# plot the third dimension
pc3d<-cbind(pc$x[,1], pc$x[,2], pc$x[,3])
plot3d(pc3d, col = km$cluster,type="s",size=1,scale=0.2)

inserisci qui la descrizione dell'immagine

Ma quando provo a scambiare il PCA con il metodo t-SNE, i risultati sembrano molto inaspettati:

tsne_data <- tsne(mydata, k=3, max_iter=500, epoch=500)
plot(tsne_data[,1], tsne_data[,2], col=km$cluster, pch=16)
ordispider(tsne_data, factor(km$cluster), label = TRUE)
ordihull(tsne_data, factor(km$cluster), lty = "dotted")

inserisci qui la descrizione dell'immagine

plot3d(tsne_data, main="T-SNE", col = km$cluster,type="s",size=1,scale=0.2)

inserisci qui la descrizione dell'immagine

La mia domanda qui è perché il clustering dei kmeans è così diverso da ciò che calcola t-SNE. Mi sarei aspettato una separazione ancora migliore tra i cluster rispetto a ciò che fa il PCA ma mi sembra quasi casuale. Sai perché questo è? Mi manca un passaggio di ridimensionamento o una sorta di normalizzazione?


4
Si noti che anche con PCA spesso non si ottengono risultati "buoni" come si potrebbe ottenere. Raggruppare molte funzionalità e quindi proiettare i cluster nel sottospazio di pochi primi PC potrebbe mostrare un'immagine come quella ottenuta qui per t-SNE, a meno che quei PCS non catturino quasi tutta la variabilità. Hai confrontato: quale parte della variabilità viene catturata dai tuoi primi 3 PC e dalle tue prime 3 dimensioni t-SNE?
ttnphns,

2
Più banalmente, hai provato più iterazioni?
jubo

2
Ho giocato con le iterazioni fino al 2000 e anche con varie impostazioni di perplessità, ma non ho mai visto qualcosa di simile alle prestazioni mostrate dal PCA.
Loddi,

1
Hai provato a modificare la perplessità?

1
tSNE ha una perplessità teorica ottimale che minimizza la divergenza KL tra i tuoi dati nelle dimensioni originali e proiettate. Hai provato prima a cercare una griglia perplessa? Ad esempio 10,20,30,40, ecc.
Alex R.,

Risposte:


10

Devi capire cosa TSNEfa prima di usarlo.

Inizia costruendo un grafico di vicinato tra i vettori delle caratteristiche in base alla distanza.

Il grafico collega un nodo (vettore di funzionalità) ai nnodi più vicini (in termini di distanza nello spazio di funzionalità). Questo nsi chiama perplexityparametro.

Lo scopo di costruire questo grafico è radicato nel tipo di campionamento su cui TSNE si basa per costruire la sua nuova rappresentazione dei vettori delle caratteristiche.

Una sequenza per la creazione di modelli TSNE viene generata utilizzando un random walkgrafico delle funzioni TSNE.

Nella mia esperienza ... alcuni dei miei problemi sono venuti dal ragionamento su come la rappresentazione delle caratteristiche influenza la costruzione di questo grafico. Gioco anche con il perplexityparametro, poiché influisce sulla concentrazione del mio campionamento.


9

È difficile confrontare questi approcci.

PCA è privo di parametri. Dati i dati, devi solo guardare i componenti principali.

D'altra parte, t-SNE si basa su parametri severi: perplessità, esagerazione precoce, tasso di apprendimento, numero di iterazioni - sebbene i valori predefiniti di solito forniscano buoni risultati.

Quindi non puoi semplicemente metterli a confronto, devi confrontare il PCA con il miglior risultato che puoi ottenere con t-SNE (o il miglior risultato che hai ottenuto con diversi tentativi di t-SNE). Altrimenti, equivarrebbe a chiedere "perché il mio modello lineare ha prestazioni migliori rispetto al mio modello di ottimizzazione del gradiente (non ottimizzato)?".


3

Ho eseguito t-sne su un set di dati per sostituire PCA e (nonostante il bug notato da Rum Wei) ho ottenuto risultati migliori. Nel mio caso applicativo, il pca approssimativo ha funzionato bene mentre il t-sne grezzo mi ha dato risultati dall'aspetto casuale. Ciò era dovuto al passaggio di ridimensionamento / centraggio incluso in pca (per impostazione predefinita nella maggior parte dei pacchetti) ma non utilizzato in t-sne.
I miei punti erano aree e la distanza tra loro aveva poco senso senza un precedente ridimensionamento, mi ha portato da "aspetto casuale" a "senso".

Come diceva RUser4512, potresti anche voler testare i tuoi parametri. Sul suo sito web , l'autore raccomanda una perplessità tra 5 e 50 (la tua sembra piuttosto piccola), avverte anche che una perplessità troppo grande ti darà una sfera di punti quasi omogenea (che è buono a sapersi).

Distill ha un articolo molto carino con alcune visualizzazioni interattive che aiutano davvero a comprendere l'impatto dei parametri.


0

Una differenza importante tra metodi come PCA e SVD con tSNE è che tSNE utilizza una scala non lineare. Questo spesso crea grafici più bilanciati visivamente, ma fai attenzione a interpretarli come faresti per la PCA. Questa differenza probabilmente spiega la differenza tra i grafici mostrati sopra.

Vedere l'articolo seguente per maggiori dettagli sull'interpretazione della scala non lineare di tSNE: https://distill.pub/2016/misread-tsne/ (Wattenberg, et al., "Come usare t-SNE in modo efficace", Distill, 2016. http://doi.org/10.23915/distill.00002 )

Non è inaspettato che i dati tSNE confondano i "cluster" in quanto non sono così distinti nei dati PCA. Alcuni punti all'interno dei cluster 2 e 4 sono più distanti dal centroide del cluster, ad esempio la differenza tra i cluster. Si otterrebbero risultati di clustering molto diversi con un parametro k diverso. A meno che tu non abbia una logica biologica specifica per l'utilizzo di 5 cluster, consiglierei di utilizzare un approccio di clustering gerarchico basato su grafici o senza supervisione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.