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 von M verwendeten Zufallsvektoren beträgt n_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 zu 2*k - n_components erhö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_components ist klein (< .1 * min(X.shape)), in diesem Fall wird n_iter auf 7 gesetzt. Dies verbessert die Präzision bei wenigen Komponenten. Beachten Sie, dass Benutzer im Allgemeinen eher n_oversamples erhöhen sollten, bevor sie n_iter erhöhen, da das Prinzip der randomisierten Methode darin besteht, die Verwendung dieser kostspieligeren Potenzierungsiterationsschritte zu vermeiden. Wenn n_components gleich oder größer als der effektive Matrixrang ist und das Spektrum keinen langsamen Zerfall aufweist, sollten theoretisch sogar n_iter=0 oder 1 gut 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, wenn n_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_sign auf True gesetzt 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_oversamples zu erhöhen, bis zu 2*k-n_components, wobei k der effektive Rang ist. Normalerweise wird n_components größer als k gewählt, sodass das Erhöhen von n_oversamples bis zu n_components ausreichen sollte.

Referenzen

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))