Dimensionality Reduction
Dimensionsreduktion bildet Daten mit vielen Merkmalen auf deutlich weniger Merkmale ab und erhält dabei ihre Struktur. Dazu dienen Verfahren wie PCA, t-SNE, UMAP und Autoencoder.
Dimensionsreduktion wandelt Daten, die durch zahlreiche Merkmale beschrieben werden, in eine Darstellung mit deutlich weniger Merkmalen um. Dabei bleiben die wichtigen Informationen erhalten, etwa die Varianz der Daten, die Abstände zwischen Punkten oder deren Nachbarschaftsbeziehungen. Ein Farbbild mit 640 × 640 Pixeln enthält mehr als 1,2 Millionen Pixelwerte, ein Genexpressionsprofil kann 20.000 Messwerte umfassen und eine Bild-Einbettung hat oft Hunderte von Dimensionen. Die Reduktion beschleunigt Modelle des maschinellen Lernens, senkt das Risiko von Überanpassung, verringert den Speicherbedarf und ermöglicht die Darstellung von Daten in zwei oder drei Dimensionen für die Datenvisualisierung.
Warum weniger Dimensionen helfen#
Richard Bellman prägte bei seiner Arbeit zur dynamischen Programmierung den Ausdruck „Fluch der Dimensionalität“, um zu beschreiben, wie Probleme mit jeder zusätzlichen Dimension schwieriger werden. Das Volumen des Raums wächst mit jedem neuen Merkmal exponentiell. Daher deckt eine feste Menge an Trainingsdaten den Raum immer spärlicher ab. In sehr hohen Dimensionen werden die Abstände zwischen zufälligen Punkten nahezu gleich groß, was distanzbasierte Verfahren wie k-nächste-Nachbarn und k-means-Clustering schwächt.
Reale Daten füllen ihren Raum selten aus. Bilder handgeschriebener Ziffern variieren hauptsächlich in der Strichstärke, der Neigung und einigen weiteren Faktoren. Sie liegen daher nahe an einer Oberfläche mit viel weniger Dimensionen, einer sogenannten Mannigfaltigkeit, innerhalb des Pixelraums. Dimensionsreduktion findet Koordinaten auf dieser Oberfläche. Da dabei keine Labels benötigt werden, sind die meisten Verfahren Formen des unüberwachten Lernens.
Lineare und nichtlineare Verfahren#
Die Hauptkomponentenanalyse (PCA), 1901 von Karl Pearson eingeführt, dreht die Daten auf orthogonale Richtungen, geordnet nach dem Anteil der erklärten Varianz, und behält die ersten davon bei. Das Verhältnis der erklärten Varianz zeigt, wie viele Komponenten ein Datensatz benötigt. Die lineare Diskriminanzanalyse von Ronald Fisher aus dem Jahr 1936 nutzt Klassenlabels, um die Richtungen zu finden, die Klassen am besten voneinander trennen. Die Zufallsprojektion multipliziert die Daten mit einer Zufallsmatrix. Das Johnson-Lindenstrauss-Lemma garantiert, dass die Abstände zwischen n Punkten innerhalb einer gewählten Toleranz erhalten bleiben, wenn eine Anzahl von Dimensionen verwendet wird, die nur mit dem Logarithmus von n wächst.
Nichtlineare Verfahren folgen gekrümmten Mannigfaltigkeiten. Isomap und lokal lineare Einbettung, beide 2000 in Science veröffentlicht, erhalten Abstände entlang der Mannigfaltigkeit und lokal lineare Nachbarschaften. t-SNE und UMAP platzieren ähnliche Punkte auf einer zweidimensionalen Karte nahe beieinander. Damit sind sie die Standardwerkzeuge zur Darstellung von Clustern aus Einbettungen, auch wenn die Abstände zwischen weit auseinanderliegenden Clustern auf solchen Karten wenig aussagen. Autoencoder lernen einen Encoder, der jede Eingabe auf einen kleinen Code im latenten Raum abbildet, und einen Decoder, der sie rekonstruiert. 2006 zeigten Geoffrey Hinton und Ruslan Salakhutdinov, dass tiefe Autoencoder für Bilder und Dokumente bessere Codes als PCA liefern.
Dieses Beispiel komprimiert 8x8-Pixelbilder von Ziffern von 64 Pixelmerkmalen auf die kleinstmögliche Anzahl an Hauptkomponenten, die 90 % der Varianz erhalten, und klassifiziert die Ziffern anschließend mit k nächsten Nachbarn – vorher und nachher:
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.model_selection import cross_val_score
from sklearn.neighbors import KNeighborsClassifier
from sklearn.pipeline import make_pipeline
X, y = load_digits(return_X_y=True) # 1,797 images of 8x8 pixels = 64 features
# Keep the fewest principal components that explain 90% of the variance
pca = PCA(n_components=0.90).fit(X)
print(f"Features: {X.shape[1]} -> {pca.n_components_}")
# Classify with k-nearest neighbors on the raw pixels and on the reduced features
raw = cross_val_score(KNeighborsClassifier(), X, y).mean()
reduced = cross_val_score(make_pipeline(PCA(n_components=0.90), KNeighborsClassifier()), X, y).mean()
print(f"Accuracy: {raw:.3f} with 64 features, {reduced:.3f} with {pca.n_components_}")21 Komponenten erfassen 90 % der Varianz, und die kreuzvalidierte Genauigkeit sinkt mit einem Drittel der Merkmale nur von 0.963 auf 0.959. Wenn PCA innerhalb der Pipeline angepasst wird, lernt jede Trainingsaufteilung die Projektion allein aus ihren Trainingsdaten, sodass keine Informationen aus den Testaufteilungen einfließen.
Merkmalsauswahl und Merkmalsextraktion#
Bei der Merkmalsauswahl wird eine Teilmenge der ursprünglichen Spalten beibehalten, etwa indem redundante Sensorkanäle entfernt werden, sodass die verbleibenden Merkmale ihre Bedeutung behalten. Dimensionsreduktion im engeren Sinn ist Merkmalsextraktion: Dabei entstehen neue Merkmale als Kombinationen der alten. Das ermöglicht in der Regel eine bessere Komprimierung, ist aber schwerer zu interpretieren. Beides sind Schritte der Datenvorverarbeitung und des Feature Engineering. Tiefe neuronale Netze führen die Merkmalsextraktion während des Trainings durch und komprimieren Pixel zu Einbettungen. Beim Matroschka-Repräsentationslernen werden Einbettungen trainiert, deren führende Dimensionen eigenständig funktionieren, sodass eine Vektordatenbank kürzere Vektoren speichern kann.
Anwendungen in der Computer Vision#
Die Computer Vision nutzt reduzierte Repräsentationen in mehreren Phasen. Werden Bildeinbettungen mit t-SNE oder UMAP auf 2D projiziert, zeigt sich, ob sich Klassen trennen und wo Ausreißer liegen. PCA oder Vektorquantisierung verkleinern die Einbettungen hinter der Vektorsuche, sodass Millionen Bilder in den Speicher passen. YOLO26-Modelle für die Instanzsegmentierung setzen dieses Prinzip direkt in ihrer Ausgabe um: Der Kopf berechnet pro Bild 32 Prototypmasken mit einem Viertel der Eingabeauflösung und sagt pro Objekt nur 32 Koeffizienten voraus. Die Maske jedes Objekts ist die gewichtete Summe der Prototypen. So werden 25.600 Werte einer 160x160-Maske bei einer Eingabe mit 640 Pixeln in 32 Zahlen codiert.










