Ich möchte die Schätzung der kleinsten Quadrate für gegebene Daten berechnen.
Es gibt einige Möglichkeiten, dies zu tun, eines ist die Verwendung der kleinsten Quadrate von numpy:
%Vor%Dabei ist X eine Matrix und y ein Vektor mit kompatibler Dimension (Typ float64). Der zweite Weg besteht darin, das Ergebnis direkt mit der Formel zu berechnen:
%Vor%Mein Problem: Es gibt Fälle, in denen die verschiedenen Formeln zu völlig anderen Ergebnissen führen (obwohl es keinen Unterschied gibt). Manchmal werden die Koeffizienten mit einer Formel extrem groß, während sich die andere viel besser verhält. Die Formeln sind die gleichen, warum können die Ergebnisse so stark voneinander abweichen? Ist das eine Art von Rundungsfehler und wie minimiere ich es?
Während diese beiden Formeln mathematisch äquivalent sind, sind sie nicht numerisch äquivalent! Es gibt bessere Möglichkeiten, ein System linearer Gleichungen zu lösen Ax = b als durch Multiplikation beider Seiten mit A ^ (- 1), wie Gaußsche Eliminierung . numpy.linalg.lstsq
verwendet diese (und ausgefeiltere) Methoden, um das zugrunde liegende lineare System zu lösen, und es kann viele Eckfälle bewältigen. Also benutze es wenn du kannst.
Matrix Inversion ist sehr numerisch instabil. Tun Sie es nicht, wenn Sie nicht müssen.