Zum Inhalt springen

tSNE: t-distributed stochastic neighbor embedding

Das t-distributed stochastic neighbor embedding (kurz: tSNE) ist ein unsupervised Algorithmus zur Dimensionsreduktion in großen Datensätzen. Dazu werden traditioneller Weise entweder die Principal Component Analysis (PCA) bei linearen Zusammenhängen oder Neuronale Netzwerke bei nicht-relationalen Zusammenhängen genutzt. Der tSNE Algorithmus stellt hierfür eine Alternative dar, die deutlich simpler ist im Vergleich zu den genannten Alternativen.

Warum benötigt man die Dimensionsreduktion?

Verschiedene Algorithmen, wie beispielsweise die Lineare Regression haben Probleme, wenn der Datensatz Variablen hat, die miteinander korreliert sind, also voneinander abhängen. Um dieser Problematik aus dem Weg zu gehen, kann es Sinn machen, die Variablen aus dem Datensatz zu entfernen, die mit einer anderen Variablen korrelieren. Gleichzeitig aber sollen die Daten auch nicht ihren ursprünglichen Informationsgehalt verlieren bzw. sollen so viel Information wie möglich behalten.

Eine weitere Anwendung haben wir bei Clusteranalysen, wie beispielsweise dem k-Means Clustering, bei welchem wir die Anzahl der Cluster im Vorhinein definieren müssen. Die Dimensionalität des Datensatzes zu verringern hilft uns dabei, einen ersten Eindruck von den Informationen zu bekommen und beispielsweise abschätzen zu können, welches die wichtigsten Variablen sind und wie viele Cluster der Datensatz haben könnte. Wenn wir es beispielsweise schaffen, den Datensatz auf drei Dimensionen zu reduzieren, können wir die Datenpunkte in einem Diagramm visualisieren. Daraus lässt sich dann möglicherweise schon die Anzahl der Cluster ablesen.

Zusätzlich bieten große Datensätze mit vielen Variablen auch die Gefahr, dass das Modell overfitted. Das bedeutet einfach erklärt, dass das Modell sich im Training zu stark an die Trainingsdaten anpasst und dadurch nur schlechte Ergebnisse für neue, ungesehene Daten liefert. Daher kann es beispielsweise bei Neuronalen Netzwerken Sinn machen, das Modell erst mit den wichtigsten Variablen zu trainieren und dann Stück für Stück neue Variablen hinzuzunehmen, die möglicherweise die Performance des Modell weiter erhöhen ohne Overfitting.

Wie funktioniert tSNE?

Der Ansatz von tSNE ist in der Theorie relativ einfach. Angenommen wir haben einen hochdimensionalen Datensatz, dann definieren wir ein Abstandsmaß zwischen den Datenpunkten. Dabei kann es sich um bekannte Abstandsmaße handeln, aber auch um eigene Funktionen, die definiert werden. In vielen Fällen wird dazu die Entfernung normalisiert, damit es auf die Unterschiede in den Datenpunkten ankommt und nicht auf den tatsächlichen Abstand im Raum.

Der tSNE Algorithmus versucht dann einen niedrigdimensionalen Raum zu finden in dem diese Abstände so gut wie möglich erhalten bleiben. Dazu nutzt er das sogenannte Gradientenverfahren, um die Ergebnisse schrittweise zu verbessern.

Welche Faktoren verbessern das Ergebnis?

Wie wir bereits erfahren haben, nutzt dieser Algorithmus einen Ansatz bei dem man sich dem Ergebnis schrittweise annähert. Das kennen wir bereits aus dem Bereich des Machine Learnings. Entsprechend gibt es auch sogenannte Hyperparameter, deren Wert einen großen Einfluss auf die Qualität des Ergebnis haben kann. Folgende Parameter müssen beachtet werden:

  • Anzahl der Iterationen: Im Allgemeinen wird sich der Algorithmus mit mehr Iterationen einem immer besseren Ergebnis annähern. Dabei nimmt die Verbesserung jedoch mit jeder Iteration ab, das heißt das Ergebnis wird nur sehr langsam besser. Somit muss eine Abwägung zwischen der Güte des Ergebnis und der Trainingszeit getroffen werden.
  • Lernrate: Die Lernrate beeinflusst die Größe der Änderungen in jeder Iteration. Eine niedrige Lernrate führt dazu, dass das Ergebnis nur sehr langsam konvergiert, während eine hohe Lernrate dazu führen kann, dass der Algorithmus gar nicht konvergiert, also sich keinem eindeutigen Ergebnis annähert.
  • Perplexity: Die Perplexity entscheidet einfach gesagt darüber, wie die Gewichtung zwischen lokalen und globalen Abhängigkeiten aussehen soll. In vielen Fällen bedeutet eine höhere Komplexität deutlich klarer getrennte Cluster, während bei einer niedrigen Perplexity die Daten noch relativ eng beeinander bleiben.

tSNE vs. Principal Component Analysis

Obwohl das Ziel von PCA und tSNE erstmal dasselbe ist, nämlich die Dimensionsreduzierung, gibt es einige Unterschiede in den Algorithmen. Zum einen funktioniert tSNE für einen Datensatz sehr gut, kann jedoch nicht auf neue Datenpunkte angewandt werden, da sich dadurch die Abstände zwischen den Datenpunkten verändern und ein neues Ergebnis errechnet werden muss. PCA hingegen erstellt als Ergebnis eine Regel, die auch auf neue Datenpunkte angewandt werden können, die während dem Training noch nicht Teil des Datensatzes waren.

Der t-distributed stochastic neighbor embedding Algorithmus kann auch genutzt werden, wenn die Zusammenhänge zwischen den Datenpunkten nicht-linear sind. Die Principal Component Analysis kann hingegen nur lineare Zusammenhänge erkennen und in die Trennung einbeziehen. Für nicht-lineare Abhängigkeiten kann man auch Neuronale Netzwerke nutzen, deren Aufwand und Training ist jedoch zeitaufwändig. Obwohl tSNE im Vergleich zu PCA auch eine relativ lange Trainingsphase hat, ist sie meist immer noch kürzer als bei Neuronalen Netzwerken und stellt somit einen guten Kompromiss dar.

Ein weiterer wichtiger Unterschied zwischen PCA und tSNE ist der Fokus auf die Datenverteilung. Bei der Principal Component Analysis wird versucht, die globale Anordnung der Datenpunkte auch in weniger Dimensionen beizubehalten. tSNE hingegen fokussiert sich eher auf lokale Abstände und Zusammenhänge, welche auch in niedrigeren Dimensionen beibehalten werden sollen. Deshalb kann es den Anschein machen, dass nach einer Dimensionsreduktion durch tSNE die Daten so aussehen, als seien sie auch schon in Cluster aufgeteilt worden.

Wie kann man tSNE in Python implementieren?

tSNE lässt sich mithilfe von wenigen Zeilen Code in Python umsetzen. Dazu definieren wir vier zufällige Numpy Arrays, die vier Dimensionen haben. Diese Dimensionen wollen wir auf zwei reduzieren. Dazu importieren wir aus Scikit-Learn die Funktion TSNE.

In dieser Funktion können wir die gewünschte Zahl der Komponenten, also der schlussendlichen Dimensionen definieren. Die Learning Rate soll automatisch bestimmt werden, außerdem setzen wir eine Perplexity von 3. Nach kurzer Wartezeit erhalten wir nun vier Numpy Arrays mit jeweils nur zwei Dimensionen, wie gewünscht. Gleichzeitig fällt auf, dass sich die Zahlenwerte um einiges vergrößert haben im Vergleich zu den Ausgangswerten. Dies war jedoch anzunehmen, da wie bereits erwähnt, lediglich versucht wird der Abstand zwischen den Datenpunkten gleich zu halten und nicht die globale Positionierung.

Das Beispiel wurde zu großen Teil aus der Dokumentation von Scikit-Learn zu tSNE übernommen.

Das solltest Du mitnehmen

  • Das t-distributed stochastic neighbor embedding (kurz: tSNE) ist ein unsupervised Algorithmus zur Dimensionsreduktion in großen Datensätzen.
  • Es wird benötigt, um Datensätze in der Dimension zu reduzieren und so mögliches Overfitting von Modellen zu verhindern.
  • Der Hauptunterschied zur Principal Component Analysis ist, dass es auch für nicht-lineare Zusammenhänge zwischen den Datenpunkten verwendet werden kann.

Andere Beiträge zum Thema tSNE

Das Logo zeigt einen weißen Hintergrund den Namen "Data Basecamp" mit blauer Schrift. Im rechten unteren Eck wird eine Bergsilhouette in Blau gezeigt.

Verpass keine neuen Beiträge!

Wir versenden keinen Spam! Lies die Details gerne in unserer Datenschutzrichtlinie nach.

Cookie Consent mit Real Cookie Banner