Ich habe eine Matrix von 336x256 Gleitkommazahlen (336 Bakteriengenome (Spalten) x 256 normalisierte Tetranukleotidfrequenzen (Zeilen), z. B. addiert sich jede Spalte zu 1).
Ich erhalte gute Ergebnisse, wenn ich meine Analyse mit der Hauptkomponentenanalyse durchführe. Zuerst berechne ich die kmeans-Cluster anhand der Daten, führe dann eine PCA durch und färbe die Datenpunkte basierend auf der anfänglichen kmeans-Clusterbildung in 2D und 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)
Aber wenn ich versuche, die PCA mit der t-SNE-Methode zu tauschen, sehen die Ergebnisse sehr unerwartet aus:
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)
Meine Frage ist hier, warum das kmeans-Clustering sich so stark von dem unterscheidet, was t-SNE berechnet. Ich hätte eine noch bessere Trennung zwischen den Clustern erwartet als das, was der PCA tut, aber es sieht für mich fast zufällig aus. Weißt du warum das so ist? Fehlt mir ein Skalierungsschritt oder eine Art Normalisierung?