2017-06-30 2 views
2

est ici le code t-SNE à l'aide des données IRIS:Comment utiliser ggplot pour tracer le regroupement T-SNE

library(Rtsne) 
iris_unique <- unique(iris) # Remove duplicates 
iris_matrix <- as.matrix(iris_unique[,1:4]) 
set.seed(42) # Set a seed if you want reproducible results 
tsne_out <- Rtsne(iris_matrix) # Run TSNE 


# Show the objects in the 2D tsne representation 
plot(tsne_out$Y,col=iris_unique$Species) 

qui produit cette parcelle:

enter image description here

Comment puis-je utiliser GGPLOT pour faire ce chiffre?

Répondre

6

Je pense que le moyen le plus simple/le plus propre ggplot serait de stocker toutes les informations dont vous avez besoin dans un data.frame et ensuite le tracer. À partir de votre code collé ci-dessus, cela devrait fonctionner:

library(ggplot2) 
tsne_plot <- data.frame(x = tsne_out$Y[,1], y = tsne_out$Y[,2], col = iris_unique$Species) 
ggplot(tsne_plot) + geom_point(aes(x=x, y=y, color=col)) 

enter image description here

Mon terrain en utilisant la fonction plot régulière est:

plot(tsne_out$Y,col=iris_unique$Species) 

enter image description here

+0

@ Mike.H merci. Mais c'est un peu étrange la configuration de votre intrigue est différente avec mon OP, vu le 'seed (42)'. Par exemple, l'axe des y dans le vôtre est jusqu'à ~ 5 où le mien ~ 10. – neversaint

+0

@neversaint Je suis d'accord, cependant, j'obtiens la même plage en utilisant 'plot' ... –

+2

t-SNE est un algorithme stochastique, donc à chaque fois que vous l'exécutez, les valeurs des deux axes seront différentes, ainsi que les formes des grappes. J'essayais de reproduire une intrigue pour un poster avec un rapport d'aspect étroit, donc je l'ai trouvé utile à 'set.seed (...)' avant d'exécuter chaque instance pour s'assurer qu'il était répétable. – Brian