Verwendung von Numpy (np.linalg.svd) für die Singulärwertzerlegung

8

Ich lese Abdi & amp; Williams (2010) "Principal Component Analysis", und ich versuche, die SVD zu wiederholen, um Werte für weitere PCA zu erreichen.

Der Artikel besagt, dass folgende SVD:

X = P D Q ^ t

Ich lade meine Daten in ein np.array X.

%Vor%

Aber ich bekomme nicht die obige Gleichheit beim Überprüfen mit

%Vor%

X_a und X haben die gleichen Dimensionen, aber die Werte sind nicht gleich. Fehle ich etwas oder ist die Funktionalität der Funktion np.linalg.svd nicht irgendwie mit der Gleichung im Papier kompatibel?

    
dms_quant 23.07.2014, 14:27
quelle

2 Antworten

12

TL; DR: numpys SVD berechnet X = PDQ, also ist das Q bereits transponiert.

SVD zerlegt die Matrix X effektiv in die Rotationen P und Q und die Diagonalmatrix D . Die Version von linalg.svd() I hat Vorwärtsdrehungen für P und Q . Sie möchten Q nicht umwandeln, wenn Sie X_a berechnen.

%Vor%

Ich bekomme: 1.02, 1.02, 1.8e-15, was zeigt, dass X_a sehr genau rekonstruiert X .

    
Frank M 23.07.2014, 15:32
quelle
4

Aus scipy.linalg.svd docstring, wobei (M, N) die Form der Eingabematrix ist und K der kleinere der beiden ist:

%Vor%

Vh ist, wie beschrieben, die Transponierte des in Abdi und Williams verwendeten Q. Also einfach

%Vor%

sollte Ihnen Ihre Antwort geben.

    
eewallace 23.07.2014 15:33
quelle

Tags und Links