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?