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.PCA
funktioniert 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?
quelle
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_projection
hat 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 m ist 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.FeatureHasher
ist eine Implementierung, die (glaube ich) nur mit String-Eingaben funktioniert; Ich denke, es wird normalerweise für Textstil-Daten mit vielen Wörtern verwendet.quelle