Warum werden bei der Implementierung von t-SNE in R standardmäßig Duplikate entfernt?

7

Insbesondere hat die R-Implementierung von t-SNE im Rtsne-Paket das Argument "check_duplicates", und die Dokumentation schlägt vor, dass "es am besten ist, sicherzustellen, dass keine Duplikate vorhanden sind, und diese Option auf FALSE zu setzen, insbesondere für große Datenmengen".

Wenn Sie versuchen, t-SNE für ein Dataset in R auszuführen, das Duplikate enthält, wird die Fehlermeldung angezeigt: "Fehler in [vom Benutzer abgeschnittener Befehl]: Entfernen Sie Duplikate, bevor Sie TSNE ausführen."

Warum tritt dieses Verhalten auf? Ich habe einen Datensatz, in dem mehrere Proben zufällig die gleichen Maße haben.

Handelt es sich einfach um einen "doppelten Datenpunkt, der nach der Reduzierung ohnehin dieselben Datenpunkte hat, verschwenden Sie also keine Verarbeitungsleistung"? Beeinflusst das Vorhandensein von Duplikaten die Berechnungen des Prozesses?

tluh
quelle

Antworten:

2

Der Algorithmus ist so konzipiert, dass er Datensätze ohne doppelte Informationen verarbeitet. Daher führt das Paket eine Prüfung durch, bevor die Technik angewendet wird. Sie empfehlen Ihnen, Duplikate zu entfernen und check_duplicates = FALSEeine Leistungsverbesserung vorzunehmen.

Die Implementierung in R ist folgende:

if (check_duplicates & !is_distance){
if (any(duplicated(X))) { stop("Remove duplicates before running TSNE.")}

Mit Standardwerten check_duplicates = TRUEund is_distance = FALSE.

Das Papier für diejenigen, die mehr über die Methode verstehen wollen, ist hier .

Carlos Dutra
quelle
7
Ihre Antwort umschreibt im Grunde die Frage. Es wird nicht beantwortet, warum Sie doppelte Datenpunkte entfernen müssen.
Daniel Falbel
Der erste Satz ist nicht korrekt. Die Methode ist nicht so konzipiert, dass sie keine Duplikate im Zeitbereich enthält . Das RtsnePaket prüft die Duplikate meist im Zeitbereich. - - Auch tsnePaket macht nicht nur eine solche Prüfung Rtsne. - - Einstellen check_duplicates=FALSEliegt nicht an der Leistungsverbesserung. Es ist nicht das Hauptargument. - - In vielen Implementierungen gibt es mehrere experimentelle Funktionen, z. B. die Überprüfung der Distanzmatrix, die - ja - standardmäßig deaktiviert ist. Auch hier beantworten Sie die Frage nicht. - - Ihre Referenz ist für die Frage nicht relevant.
Léo Léopold Hertz 준영
2

t-SNEMethode erfordert nicht das Entfernen von Duplikaten. Die Tatsache, dass es sich um eine Standardfunktion Rtsnehandelt, impliziert nicht deren Anforderung. Dies ist nützlich für die kurzfristige Ereignisüberwachung. Für die Charakterisierung langfristiger Trends und / oder Muster mit großen Datenmengen sehe ich wenig Nutzen. Die RtsneStandardeinstellung kann eher zur Charakterisierung von Ereignissen im Zeitbereich geeignet sein, ohne dass Studien im Fourierbereich durchgeführt werden müssen.

Angenommen, Sie haben Punkte im Zeitbereich. Der Duplikat-Algorithmus verursacht eine erhebliche Anzahl von Fehlalarmen, da die Duplikatprüfung hauptsächlich auf dem Zeitbereichssignal basiert. Der Fourierraum kann zeigen, dass diejenigen Ereignisse, die vom Algorithmusduplikat berücksichtigt werden, nicht erforderlich sind.

Meine Beobachtung ist also, dass der Algorithmus nach doppelten Punkten im Zeitbereich gierig ist, was für mich nicht nützlich ist, wenn ich Langzeitsignale, Langzeittrends und Langzeitmuster betrachte. Die Tatsache, dass der Punkt im Zeitbereich doppelt vorhanden ist, bedeutet nicht, dass er auch im Fourierbereich doppelt vorhanden ist. Ich denke, es wird eher ein Zufall sein, wenn es sich bei den realen Anwendungen um ein Duplikat in einem Zeitbereich handelt. Das Ausschalten der Funktion sollte also in Ordnung sein. Die Schätzung, wie viele der Punkte in beiden Bereichen tatsächlich doppelt vorhanden sind, ist in der Fallstudie spezifisch. Ich erhalte signifikant bessere Deskriptoren für Ereignisse und / oder Phänomene, wenn ich Langzeitdatensätze ohne doppelte Überprüfung in vielen realen Anwendungen berücksichtige.

Ich denke, die RtsneDokumentation ist nicht klar über den Fall, dass [ausschalten check_duplicatesund] keine Rechenleistung verschwenden . Es gibt wirklich andere Gründe, wie oben beschrieben, warum das ausgeschaltet werden check_duplicateskann, wie dies auch durch einige andere Implementierungen des Verfahrens realisiert wird. Dies check_duplicates=TRUEist Rtsnemomentan standardmäßig eine persönliche Auswahl des Entwicklers. Ich würde gerne hören, ob es Gründe für die Umsetzung der Entscheidung gibt.

Léo Léopold Hertz 준영
quelle