Get-U, Sigma, V* matrix aus Abgeschnittenen SVD in scikit-learn
Ich bin mit abgeschnittenen SVD von scikit-learn
Paket.
In der definition des SVD, ein original matrix Eine ist approxmated als ein Produkt EINE ≈ UΣV* wo U und V haben, Spalten orthonormal, und Σ ist nicht-negativer Diagonale.
Ich brauche, um die U, Σ und V* Matrizen.
Sich den Quellcode hier fand ich heraus, dass V* gespeichert in self.components_
Feld nach dem Aufruf fit_transform
.
Ist es möglich, U und Σ Matrizen?
Mein code:
import sklearn.decomposition as skd
import numpy as np
matrix = np.random.random((20,20))
trsvd = skd.TruncatedSVD(n_components=15)
transformed = trsvd.fit_transform(matrix)
VT = trsvd.components_
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blick in die Quelle über den link, den Sie,
TruncatedSVD
ist im Grunde ein wrapper um sklearn.utils.extmath.randomized_svd; können Sie manuell aufrufen, dies selbst so:Kann man scipy.spärlich.svds (für Dichte Matrizen, die Sie verwenden können svd).
Wenn Sie mit wirklich großen sparse-Matrizen (vielleicht ist Ihr das arbeiten mit natürlichen text), auch
scipy.sparse.svds
vielleicht sprengen Sie das RAM Ihres Computers. In diesen Fällen sollten Sie die sparsesvd - Paket, welches verwendet SVDLIBC, und wasgensim
verwendet unter der Haube.Ich weiß, dies ist eine ältere Frage, aber die richtige version ist-
Jedoch eine Sache zu beachten ist, dass U und VT sind gekürzt, also ohne den rest der Werte ist es nicht möglich, neu zu erstellen X.
Nur als Anmerkung:
und
generieren U * Sigma.
generiert Sigma in vektorieller form.
generiert VT.
Können wir vielleicht
bekommen U weil U * Sigma * Sigma ^ -1 = U * I = U.
Vom source-code, können wir sehen
X_transformed
dieU * Sigma
(HierSigma
ist ein Vektor) zurückgegeben wirdaus der
fit_transform
Methode. So können wirBemerkung
Abgeschnittene SVD ist eine Annäherung. X ≈ X' = UΣV*. Wir haben X ' V = UΣ. Aber was ist mit XV? Eine interessante Tatsache ist XV = X ' V. Dies kann bewiesen werden durch einen Vergleich der vollen SVD form von X-und die abgeschnittene SVD form X'. Hinweis XV ist nur
transform(X)
, so können wir uns auchU
durchLassen Sie uns angenommen, X ist unser input-matrix auf, die wir wollen yo durchführen Abgeschnittene SVD.
Unten Befehle hilft, um herauszufinden, die U -, Sigma-und VT :
Zu verstehen, die oben genannten Bedingungen, bitte Lesen Sie http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.TruncatedSVD.html
SVD.fit_transform(X) = U*np.diag(Sigma) != U
undSVD.explained_variance_ratio_ = np.var(X_transformed, axis=0) / np.var(X, axis=0).sum() != Sigma