randomized_svd#
- sklearn.utils.extmath.randomized_svd(M, n_components, *, n_oversamples=10, n_iter='auto', power_iteration_normalizer='auto', transpose='auto', flip_sign=True, random_state=None, svd_lapack_driver='gesdd')[source]#
Berechnet eine trunkierte, zufällige SVD.
Diese Methode löst das Problem der approximativen Rang-n-Zerlegung, das in [1] (Problem (1.5), S. 5) beschrieben wird.
Siehe Wikipedia principal eigenvector für ein typisches Beispiel, bei dem der Potenzierungsalgorithmus zur Rangfolge von Webseiten verwendet wird. Dieser Algorithmus ist auch als Baustein des PageRank-Algorithmus von Google bekannt.
- Parameter:
- M{array-like, sparse matrix} von Form (n_samples, n_features)
Zu zerlegende Matrix.
- n_componentsint
Anzahl der zu extrahierenden singulären Werte und Vektoren.
- n_oversamplesint, Standard=10
Zusätzliche Anzahl von Zufallsvektoren zum Abtasten des Bereichs von
M, um eine ordnungsgemäße Konditionierung zu gewährleisten. Die Gesamtzahl der zur Ermittlung des Bereichs vonMverwendeten Zufallsvektoren beträgtn_components + n_oversamples. Eine geringere Anzahl kann die Geschwindigkeit verbessern, kann aber die Qualität der Approximation von singulären Vektoren und singulären Werten negativ beeinflussen. Benutzer möchten diesen Parameter möglicherweise bis zu2*k - n_componentserhöhen, wobei k der effektive Rang ist, für große Matrizen, verrauschte Probleme, Matrizen mit langsam zerfallenden Spektren oder um die Präzisionsgenauigkeit zu erhöhen. Siehe [1] (Seiten 5, 23 und 26).- n_iterint oder ‘auto’, Standardwert=’auto’
Anzahl der Potenzierungsiterationen. Sie kann zur Behandlung sehr verrauschter Probleme verwendet werden. Wenn ‚auto‘, wird sie auf 4 gesetzt, es sei denn,
n_componentsist klein (< .1 * min(X.shape)), in diesem Fall wirdn_iterauf 7 gesetzt. Dies verbessert die Präzision bei wenigen Komponenten. Beachten Sie, dass Benutzer im Allgemeinen ehern_oversampleserhöhen sollten, bevor sien_itererhöhen, da das Prinzip der randomisierten Methode darin besteht, die Verwendung dieser kostspieligeren Potenzierungsiterationsschritte zu vermeiden. Wennn_componentsgleich oder größer als der effektive Matrixrang ist und das Spektrum keinen langsamen Zerfall aufweist, sollten theoretisch sogarn_iter=0oder1gut funktionieren (siehe [1] Seite 9).Geändert in Version 0.18.
- power_iteration_normalizer{‘auto’, ‘QR’, ‘LU’, ‘none’}, Standard=’auto’
Ob die Potenzierungsiterationen mit schrittweiser QR-Faktorisierung (am langsamsten, aber am genauesten), ‚none‘ (am schnellsten, aber numerisch instabil bei großen
n_iter, z. B. typischerweise 5 oder größer) oder ‚LU‘-Faktorisierung (numerisch stabil, kann aber leicht an Genauigkeit verlieren) normalisiert werden. Der Modus ‚auto‘ wendet keine Normalisierung an, wennn_iter<= 2 ist, und wechselt ansonsten zu LU.Hinzugefügt in Version 0.18.
- transposebool oder ‘auto’, Standardwert=’auto’
Ob der Algorithmus auf M.T anstelle von M angewendet werden soll. Das Ergebnis sollte ungefähr gleich sein. Der Modus ‚auto‘ löst die Transponierung aus, wenn M.shape[1] > M.shape[0], da diese Implementierung von randomisiertem SVD in diesem Fall etwas schneller ist.
Geändert in Version 0.18.
- flip_signbool, Standardwert=True
Die Ausgabe einer singulären Wertzerlegung ist nur bis auf eine Permutation der Vorzeichen der singulären Vektoren eindeutig. Wenn
flip_signaufTruegesetzt ist, wird die Vorzeichenunsicherheit behoben, indem die größten Ladungen für jede Komponente in den linken singulären Vektoren positiv gemacht werden.- random_stateint, RandomState-Instanz oder None, Standardwert=’warn’
Der Seed des Pseudozufallszahlengenerators, der beim Mischen der Daten verwendet wird, d.h. beim Abrufen der Zufallsvektoren zur Initialisierung des Algorithmus. Übergeben Sie eine Ganzzahl für reproduzierbare Ergebnisse über mehrere Funktionsaufrufe hinweg. Siehe Glossar.
Geändert in Version 1.2: Der Standardwert änderte sich von 0 zu None.
- svd_lapack_driver{„gesdd“, „gesvd“}, Standardwert=„gesdd“
Ob der effizientere Divide-and-Conquer-Ansatz (
"gesdd") oder der allgemeinere rechteckige Ansatz ("gesvd") zur Berechnung der SVD der Matrix B, der Projektion von M in einen niedrigdimensionalen Unterraum, wie in [1] beschrieben, verwendet werden soll.Hinzugefügt in Version 1.2.
- Gibt zurück:
- undarray von Form (n_samples, n_components)
Unitäre Matrix mit linksseitigen singulären Vektoren mit umgedrehten Vorzeichen als Spalten.
- sndarray von Form (n_components,)
Die singulären Werte, sortiert in nicht steigender Reihenfolge.
- vhndarray von Form (n_components, n_features)
Unitäre Matrix mit rechtsseitigen singulären Vektoren mit umgedrehten Vorzeichen als Zeilen.
Anmerkungen
Dieser Algorithmus findet eine (normalerweise sehr gute) approximative abgeschnittene singuläre Wertzerlegung unter Verwendung von Randomisierung zur Beschleunigung der Berechnungen. Er ist besonders schnell auf großen Matrizen, bei denen nur eine kleine Anzahl von Komponenten extrahiert werden soll. Um weitere Geschwindigkeitssteigerungen zu erzielen, kann
n_iter<=2 gesetzt werden (auf Kosten von Präzisionsverlust). Um die Präzision zu erhöhen, wird empfohlen,n_oversampleszu erhöhen, bis zu2*k-n_components, wobei k der effektive Rang ist. Normalerweise wirdn_componentsgrößer als k gewählt, sodass das Erhöhen vonn_oversamplesbis zun_componentsausreichen sollte.Referenzen
[1] (1,2,3,4)„Finding structure with randomness: Stochastic algorithms for constructing approximate matrix decompositions“ Halko, et al. (2009)
[2]„A randomized algorithm for the decomposition of matrices“ Per-Gunnar Martinsson, Vladimir Rokhlin und Mark Tygert (2011)
[3]„An implementation of a randomized algorithm for principal component analysis“ A. Szlam et al. (2014)
Beispiele
>>> import numpy as np >>> from sklearn.utils.extmath import randomized_svd >>> a = np.array([[1, 2, 3, 5], ... [3, 4, 5, 6], ... [7, 8, 9, 10]]) >>> U, s, Vh = randomized_svd(a, n_components=2, random_state=0) >>> U.shape, s.shape, Vh.shape ((3, 2), (2,), (2, 4))