Quel est le problème avec t-SNE vs PCA pour la réduction dimensionnelle en utilisant R?

27

J'ai une matrice de 336x256 nombres à virgule flottante (336 génomes bactériens (colonnes) x 256 fréquences tétranucléotidiques normalisées (lignes), par exemple chaque colonne totalise 1).

J'obtiens de bons résultats lorsque j'exécute mon analyse en utilisant l'analyse des composants principaux. Tout d'abord, je calcule les clusters kmeans sur les données, puis exécute une PCA et colorise les points de données en fonction du clustering kmeans initial en 2D et 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")

entrez la description de l'image ici

# 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)

entrez la description de l'image ici

Mais lorsque j'essaie d'échanger le PCA avec la méthode t-SNE, les résultats semblent très inattendus:

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")

entrez la description de l'image ici

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

entrez la description de l'image ici

Ma question ici est de savoir pourquoi le regroupement de kmeans est si différent de ce que calcule t-SNE. Je m'attendais à une séparation encore meilleure entre les clusters que ce que fait l'ACP, mais cela me semble presque aléatoire. Savez-vous pourquoi c'est? Suis-je absent d'une étape de mise à l'échelle ou d'une sorte de normalisation?

Loddi
la source
4
Veuillez noter qu'avec PCA aussi, vous n'obtiendrez souvent pas les «bons» résultats que vous avez obtenus. Le clustering sur de nombreuses fonctionnalités, puis la projection des clusters dans le sous-espace de quelques premiers PC seulement, pourrait bien afficher une image comme celle que vous avez obtenue ici pour t-SNE, à moins que ces PCS n'accaparent presque toute la variabilité. Avez-vous comparé - quelle partie de la variabilité est capturée par vos 3 premiers PC et vos 3 premières dimensions t-SNE?
ttnphns
2
Plus trivialement, avez-vous essayé plus d'itérations?
jubo
2
J'ai joué avec les itérations avec jusqu'à 2000 et j'ai également joué avec divers paramètres de perplexité, mais je n'ai jamais vu quelque chose d'aussi proche des performances que le PCA montre.
Loddi
1
Avez-vous essayé de modifier la perplexité?
1
tSNE a une perplexité optimale théorique qui minimise la divergence KL entre vos données dans ses dimensions d'origine et projetées. Avez-vous d'abord essayé de rechercher la perplexité dans la grille? Par exemple 10,20,30,40, etc.
Alex R.

Réponses:

10

Vous devez comprendre ce qu'il TSNEfait avant de l'utiliser.

Il commence par construire un graphe de voisinage entre les vecteurs d'entités en fonction de la distance.

Le graphique relie un nœud (vecteur d'entités) à ses nnœuds les plus proches (en termes de distance dans l'espace d'entités). C'est ce nqu'on appelle le perplexityparamètre.

Le but de la construction de ce graphique est enraciné dans le type d'échantillonnage sur lequel TSNE s'appuie pour construire sa nouvelle représentation de vos vecteurs de caractéristiques.

Une séquence de création de modèle TSNE est générée à l'aide d'un random walksur votre graphique d'entités TSNE.

D'après mon expérience ... quelques-uns de mes problèmes sont venus du raisonnement sur la façon dont la représentation des caractéristiques affecte la construction de ce graphique. Je joue aussi avec leperplexity paramètre, car il a un effet sur la concentration de mon échantillonnage.

Conique
la source
9

Il est difficile de comparer ces approches.

PCA est sans paramètre. Compte tenu des données, il suffit de regarder les principaux composants.

D'un autre côté, le t-SNE repose sur des paramètres sévères: perplexité, exagération précoce, taux d'apprentissage, nombre d'itérations - bien que les valeurs par défaut fournissent généralement de bons résultats.

Donc, vous ne pouvez pas simplement les comparer, vous devez comparer l'APC au meilleur résultat que vous pouvez obtenir avec t-SNE (ou le meilleur résultat que vous avez obtenu sur plusieurs essais de t-SNE). Sinon, il serait équivalent de se demander "pourquoi mon modèle linéaire fonctionne-t-il mieux que mon modèle (non réglé) de renforcement de gradient?".

RUser4512
la source
3

J'ai exécuté t-sne sur un ensemble de données pour remplacer PCA et (malgré le bogue que Rum Wei a remarqué), j'ai obtenu de meilleurs résultats. Dans mon cas d'application, le pca rugueux a bien fonctionné tandis que le t-sne rugueux m'a donné des résultats aléatoires. Cela était dû à l'étape de mise à l'échelle / centrage incluse dans le pca (par défaut dans la plupart des packages) mais non utilisée dans le t-sne.
Mes points étaient des zones et la distance entre eux n'avait pas de sens sans mise à l'échelle précédente, cela m'a fait passer du "look aléatoire" au "sens".

Comme l'a indiqué RUser4512, vous pouvez également vouloir tester vos paramètres. Sur son site Internet , l'auteur recommande une perplexité entre 5 et 50 (la vôtre semble assez petite), il prévient également qu'une trop grande perplexité vous donnera une sphère de points presque homogène (ce qui est bon à savoir).

Distill a un très bel article avec une visualisation interactive qui aide vraiment à comprendre l'impact des paramètres.

Nestor Demeure
la source
0

Une différence importante entre des méthodes comme PCA et SVD avec tSNE est que tSNE utilise une échelle non linéaire. Cela donne souvent des tracés plus équilibrés visuellement, mais soyez prudent en les interprétant de la même manière que pour PCA. Cette différence explique probablement la différence entre les parcelles indiquées ci-dessus.

Voir l'article suivant pour plus de détails sur l'interprétation de l'échelle non linéaire de tSNE: https://distill.pub/2016/misread-tsne/ (Wattenberg, et al., "How to Use t-SNE Effectively", Distill, 2016. http://doi.org/10.23915/distill.00002 )

Il n'est pas surprenant que les données tSNE mélangent les "grappes" car elles ne sont pas si distinctes dans les données PCA. Certains points des clusters 2 et 4 sont plus éloignés du centre de gravité du cluster que la différence entre les clusters par exemple. Vous obtiendriez des résultats de clustering très différents avec un paramètre k différent. Sauf si vous avez une justification biologique spécifique pour l'utilisation de 5 clusters, je recommanderais d'utiliser une approche de clustering hiérarchique basée sur des graphiques ou non supervisée.

Tom Kelly
la source