Effiziente Dimensionsreduzierung für große Datenmengen

12

Ich habe einen Datensatz mit ~ 1M Zeilen und ~ 500K spärlichen Funktionen. Ich möchte die Dimensionalität auf einen Wert in der Größenordnung von 1K-5K-dichten Merkmalen reduzieren.

sklearn.decomposition.PCAfunktioniert nicht mit spärlichen Daten, und ich habe versucht, sie zu verwenden sklearn.decomposition.TruncatedSVD, erhalte aber ziemlich schnell einen Speicherfehler. Was sind meine Optionen für eine effiziente Dimensionsreduzierung auf dieser Skala?

Timleathart
quelle

Antworten:

11

Haben Sie von Uniform Manifold Approximation and Projection (UMAP) gehört ?

UMAP (Uniform Manifold Approximation and Projection) ist eine neuartige vielfältige Lerntechnik zur nichtlinearen Dimensionsreduktion. UMAP basiert auf einem theoretischen Rahmen, der auf Riemannscher Geometrie und algebraischer Topologie basiert. Das Ergebnis ist ein praktischer skalierbarer Algorithmus, der auf reale Daten angewendet wird. Der UMAP-Algorithmus ist in Bezug auf die Visualisierungsqualität mit t-SNE konkurrenzfähig und bewahrt wohl mehr von der globalen Struktur mit überlegener Laufzeitleistung. Darüber hinaus unterliegt UMAP, wie beschrieben, keinen rechnerischen Einschränkungen beim Einbetten von Dimensionen, wodurch es als Allzweck-Dimensionsreduktionstechnik für maschinelles Lernen geeignet ist.

Überprüfen Sie den Code und das Originalpapier auf eine Liste der Vor- und Nachteile. Es ist sehr einfach zu bedienen.

Kurze Fakten: UMAP kann große Datenmengen verarbeiten und ist schneller als t-SNE und unterstützt auch die Anpassung an spärliche Matrixdaten. Im Gegensatz zu t-SNE ist dies eine allgemeine Technik zur Dimensionsreduzierung, die nicht nur zur Visualisierung, sondern auch zur Visualisierung verwendet werden kann zum Reduzieren des Funktionsraums zum Einspeisen in andere Modelle des maschinellen Lernens.

Konkrete Beispiele: Ich habe die Methode verglichen und mit einigen anderen Benchmark-Notebooks zur Dimensionsreduzierung verglichen , wenn ich daran interessiert bin, einen kurzen Blick darauf zu werfen und einen Startschuss zu geben.

TwinPenguins
quelle
2
(+1) - UMAP ist in der Tat großartig! Sie könnten ein wenig über eine Neuformulierung nachdenken: Ihr Absatz in der Mitte und die folgenden Aufzählungspunkte wiederholen dieselben Informationen. Sie können auch ein Angebot erstellen, da es (mehr oder weniger) von der Website kopiert wird.
n1k31t4
2
Klar, ich kann es auf jeden Fall reduzieren, ich wollte sie hier nur hervorheben und einige Punkte sind etwas umformuliert. Vielen Dank. Jedenfalls mag ich UMAP.
TwinPenguins
1
Danke für die Empfehlung! Ich wusste es als Alternative zu t-SNE für die Visualisierung, wusste aber nicht, dass es auch gut für die allgemeine Reduzierung der Dimensionalität ist.
Timleathart
0

Nur für den Fall, dass Leute, die auf diesen Beitrag stoßen, UMAP als nicht effizient genug empfinden, sind hier einige andere Techniken, auf die ich gestoßen bin, die noch effizienter sind (aber nicht von so hoher Qualität):

  • Zufällige Projektion: Erstellen Sie im Wesentlichen eine zufällige Formmatrixd × m wo d ist die ursprüngliche Dimensionalität und m ist die gewünschte Dimensionalität und multipliziert die Datenmatrix mit der Projektionsmatrix, um den reduzierten Datensatz zu erzeugen. sklearn.random_projectionhat einige Implementierungen davon. Wenn die Größe und Verteilung der Projektionsmatrix angemessen ist, bleiben die paarweisen Abstände zwischen Punkten im projizierten Raum nahezu erhalten.

  • Feature-Hashing: Nehmen Sie einen Hash der Feature-Werte und den Modulm wo mist die gewünschte Dimensionalität. Hash-Kollisionen werden behandelt, indem die Summe der kollidierenden Werte genommen wird. Sie können sich vorstellen, die Reihenfolge der Features zu mischen, die Datenmatrix in eine Reihe vertikaler Slices aufzuteilen und alle elementweise zu addieren. Bei spärlichen Daten sind Kollisionen ziemlich selten. sklearn.feature_extraction.FeatureHasherist eine Implementierung, die (glaube ich) nur mit String-Eingaben funktioniert; Ich denke, es wird normalerweise für Textstil-Daten mit vielen Wörtern verwendet.

Timleathart
quelle