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")
# 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)
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")
plot3d(tsne_data, main="T-SNE", col = km$cluster,type="s",size=1,scale=0.2)
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?
Réponses:
Vous devez comprendre ce qu'il
TSNE
fait 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
n
nœuds les plus proches (en termes de distance dans l'espace d'entités). C'est cen
qu'on appelle leperplexity
paramè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 walk
sur 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 le
perplexity
paramètre, car il a un effet sur la concentration de mon échantillonnage.la source
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?".
la source
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.
la source
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.
la source