Nehmen wir an, wir haben X (2, 5)
und Y (2,)
Das funktioniert: np.linalg.lstsq(X, y)
Wir erwarten, dass dies nur dann funktioniert, wenn X die Form (N, 5) hat, wobei N> = 5 ist. Aber warum und wie?
Wir bekommen wie erwartet 5 Gewichte zurück, aber wie wird dieses Problem gelöst?
Ist es nicht so, als hätten wir 2 Gleichungen und 5 Unbekannte?
Wie könnte Numpy das lösen?
Es muss so etwas wie eine Interpolation sein, um künstlichere Gleichungen zu erstellen? ..
least-squares
linear-algebra
numpy
George Pligoropoulos
quelle
quelle
Antworten:
Nach meinem Verständnis basiert numpy.linalg.lstsq auf der LAPACK- Routine dgelsd .
Das Problem ist zu lösen:
Dies hat natürlich keine eindeutige Lösung für eine Matrix A, deren Rang kleiner als die Länge des Vektorsb . z , die Folgendes beinhaltet :
dgelsd
Bietet im Falle eines unbestimmten Systems eine LösungBeispiel, wenn System istx+y=1 , gibt numpy.linalg.lstsqx=.5,y=.5 .
Wie funktioniert dgelsd?
Die Routine
dgelsd
berechnet die Singularwertzerlegung (SVD) von A.Ich skizziere nur die Idee hinter der Verwendung einer SVD zur Lösung eines linearen Systems. Die Singulärwertzerlegung ist eine FaktorisierungUΣV′=A wobeiU undV orthogonale Matrizen sind undΣ eine Diagonalmatrix ist, bei der die Diagonaleinträge als Singularwerte bezeichnet werden.
Der effektive Rang der MatrixA ist die Anzahl der singulären Werte, die effektiv nicht Null sind (dh sich ausreichend von Null in Bezug auf die Maschinengenauigkeit usw. unterscheiden). Sei S eine Diagonalmatrix der von Null verschiedenen Singularwerte. Die SVD ist also:
Die Pseudoinverse vonA ist gegeben durch:
Betrachten Sie die Lösungx=A†b . Dann:
Grundsätzlich gibt es hier zwei Fälle:
Dieser letzte Teil ist etwas knifflig. Sie müssen die Matrixdimensionen verfolgen und verwenden, dassU eine orthogonale Matrix ist.
Äquivalenz von Pseudo-Inverse
WennA linear unabhängige Reihen hat (z. B. wir haben eine Fettmatrix), dann gilt:
A†=A′(AA′)−1
Für ein unbestimmtes System können Sie zeigen, dass das Pseudo-Inverse die minimale Normlösung ergibt.
WennA linear unabhängige Spalten hat (z. B. haben wir eine dünne Matrix), dann gilt:
A†=(A′A)−1A′
quelle
lm
verwendet standardmäßig die QR-Faktorisierung, Sie können jedoch Alternativen angeben.