Verwendung von Scikit-learn (v 0.15.2) zur nicht-negativen Matrixfaktorisierung auf einer großen dünn besetzten Matrix (weniger als 1% Werte> 0). Ich möchte Faktoren finden, indem Fehler nur auf Nicht-Null-Werten der Matrix minimiert werden (d. H. Fehler für Einträge, die Null sind, nicht berechnet werden) und Sparsity begünstigen. Ich bin mir nicht sicher, ob etwas nicht stimmt mit dem, was ich versuche. Das NMF und ProjectedGradientNMF des scikit-learn-Pakets haben sich für mich schon gut bewährt. Aber es scheint, dass wenn die Matrixgröße zunimmt, die Faktorisierung schrecklich langsam ist.Schnelle nicht-negative Matrixfaktorisierung auf Large-Sparse-Matrix
Ich spreche von Matrizen mit> 10^10 Zellen. Für eine Matrix mit ~ 10^7 Zellen finde ich die Ausführungszeit gut.
Die Parameter, die ich verwendet habe, sind wie folgt: nmf_model = NMF(n_components = 100, init='nndsvd', random_state=0, tol = 0.01, sparseness='data')
.
Als ich etwas andere Parameter versuchte (ändere zu init=random
), erhalte ich die folgende Warnung. Nach der Warnung wird die Ausführung des Skripts angehalten.
/lib/python2.7/site-packages/sklearn/decomposition/nmf.py:252: UserWarning: Iteration limit reached in nls subproblem.
warnings.warn("Iteration limit reached in nls subproblem.")
Gibt es eine Möglichkeit, dies schneller zu machen und das obige Problem zu lösen? Ich habe versucht, numpige Sparse-Matrix zu verwenden (spalten- und reihenweise), aber überraschend - es ist langsamer auf dem Test, den ich mit einer kleineren Matrix (~ 10^7 Zellen) gemacht habe.
In Anbetracht dessen, dass man mehrere Iterationen einer solchen Faktorisierung durchführen müsste (um eine ideale Anzahl von Faktoren und eine k-fache Kreuzvalidierung zu wählen), ist ein schnellerer Weg zur Lösung dieses Problems sehr wünschenswert.
Ich bin auch offen für Vorschläge von Paket/Tools, die nicht auf Sklearn oder Pyhon basiert. Ich verstehe, dass Fragen zu Paket-/Werkzeugauswahl nicht erwünscht sind, aber für einen solchen speziellen Anwendungsfall wäre es sehr hilfreich zu wissen, welche Techniken andere in diesem Bereich anwenden.
Ist die NMF-Methode der Scipy nur für die Berechnung von Nicht-Null-Einträgen der Matrix fehlerhaft? Null Einträge bedeuten fehlende Werte. Wird die Regularisierung verwendet, um die Lösung zu spärlich zu machen? Ich habe die Details in der Dokumentation nicht gefunden. Vielleicht müssen Sie den Code eingraben. Ein allgemeiner Anwendungsfall, der auch Term-Frequency beinhaltet, aber auch Dinge wie Items-Tags. Diese Matrix ist sehr spärlich. Ihre Lösung klingt gut, aber wenn die Matrix riesig ist, ist sie immer noch nicht skalierbar. Nehmen wir an, ich möchte Artikel ermitteln, die weniger als 2 Mal getaggt wurden, oder Tags, die weniger als 5 Items enthalten. Wie man sie alle ausfiltert? – vpk
Ich nehme an, du meinst scikits NMF-Methode und nicht scipy's? Wie der Algorithmus mit Sparsity umgeht, kann durch den Parameter 'Spärlichkeit' eingestellt werden. Es ist in der Dokumentation. Für die letzten beiden Fälle sehe ich nicht, warum Sie NMF dafür verwenden würden. Ich würde denken, dass es dafür geeignetere Werkzeuge gibt. – wonderkid2
Ja, Scikit. Über welche anderen Tools sprechen Sie? – vpk