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?
Antworten:
Sie müssen verstehen, was zu
TSNE
tun ist, bevor Sie es verwenden.Es beginnt mit einem neighboorhood Aufbau Graph zwischen Merkmalsvektoren auf Abstand basiert.
Das Diagramm verbindet einen Knoten (Merkmalsvektor) mit den
n
nächstgelegenen Knoten (in Bezug auf die Entfernung im Merkmalsraum). Diesn
wird alsperplexity
Parameter bezeichnet.Der Grund für die Erstellung dieses Diagramms liegt in der Art der Stichprobe, auf die sich TSNE stützt, um die neue Darstellung Ihrer Merkmalsvektoren zu erstellen.
Eine Sequenz für die Erstellung eines TSNE-Modells wird mit einem
random walk
in Ihrem TSNE-Feature-Diagramm erstellt.Nach meiner Erfahrung sind einige meiner Probleme auf die Überlegungen zurückzuführen, wie sich die Feature-Repräsentation auf die Erstellung dieses Diagramms auswirkt. Ich spiele auch mit dem
perplexity
Parameter herum , da er sich darauf auswirkt, wie konzentriert mein Sampling ist.quelle
Es ist schwer, diese Ansätze zu vergleichen.
PCA ist parameterfrei. Angesichts der Daten müssen Sie sich nur die Hauptkomponenten ansehen.
Andererseits stützt sich t-SNE auf schwerwiegende Parameter: Ratlosigkeit, frühe Übertreibung, Lernrate, Anzahl der Iterationen - obwohl Standardwerte normalerweise gute Ergebnisse liefern.
Sie können sie also nicht einfach vergleichen, sondern müssen die PCA mit dem besten Ergebnis vergleichen, das Sie mit t-SNE erzielen können (oder dem besten Ergebnis, das Sie bei mehreren Versuchen mit t-SNE erzielt haben). Andernfalls wäre es äquivalent zu fragen, warum mein lineares Modell eine bessere Leistung erbringt als mein (nicht abgestimmtes) Gradientenverstärkungsmodell.
quelle
Ich habe t-sne auf einem Datensatz ausgeführt, um PCA zu ersetzen, und (trotz des Fehlers, den Rum Wei bemerkte) bessere Ergebnisse erzielt. In meinem Anwendungsfall funktionierte der raue PCA gut, während der raue T-SNE mir zufällig aussehende Ergebnisse lieferte. Dies war auf den Skalierungs- / Zentrierungsschritt zurückzuführen, der im pca enthalten war (standardmäßig in den meisten Paketen), aber im t-sne nicht verwendet wurde.
Meine Punkte waren Flächen, und der Abstand zwischen ihnen ergab ohne vorherige Skalierung keinen Sinn. Ich wechselte von "zufällig" zu "sinnvoll".
Wie RUser4512 sagte, möchten Sie möglicherweise auch Ihre Parameter testen. Auf seiner Website empfiehlt der Autor eine Ratlosigkeit zwischen 5 und 50 (Ihre Ratlosigkeit scheint recht klein zu sein). Er warnt auch davor, dass eine zu große Ratlosigkeit Ihnen eine nahezu homogene Punktsphäre verleiht (was gut zu wissen ist).
Distill hat einen sehr schönen Artikel mit einer interaktiven Visualisierung, die wirklich hilft, die Auswirkungen der Parameter zu verstehen.
quelle
Ein wichtiger Unterschied zwischen Methoden wie PCA und SVD mit tSNE besteht darin, dass tSNE eine nichtlineare Skala verwendet. Dies führt häufig zu Plots, die visuell ausgewogener sind, die jedoch genau so interpretiert werden, wie Sie es für PCA tun würden. Dieser Unterschied erklärt wahrscheinlich den Unterschied zwischen den oben gezeigten Darstellungen.
Sehen Sie im folgenden Artikel für weitere Einzelheiten über die nicht-lineare Skala von tSNE Interpretation: https://distill.pub/2016/misread-tsne/ . (Wattenberg, et al, „How to use tSNE effektiv“, destillieren, 2016. http://doi.org/10.23915/distill.00002 )
Es ist nicht unerwartet, dass die tSNE-Daten die "Cluster" vertauschen, da sie in den PCA-Daten nicht so unterschiedlich sind. Einige Punkte in den Clustern 2 und 4 sind weiter vom Cluster-Schwerpunkt entfernt als beispielsweise der Unterschied zwischen den Clustern. Sie würden sehr unterschiedliche Clustering-Ergebnisse mit einem anderen k-Parameter erhalten. Sofern Sie keine spezifischen biologischen Gründe für die Verwendung von 5 Clustern haben, würde ich die Verwendung eines grafischen oder nicht überwachten hierarchischen Clustering-Ansatzes empfehlen.
quelle