2016-07-29 11 views
8

Ich möchte die Schätzung der kleinsten Quadrate für gegebene Daten berechnen.Warum unterscheidet sich das Ergebnis der numpulösen Fehlerquadrate von der Verwendung der direkten Formel?

Es gibt einige Möglichkeiten, dies zu tun, ist eine numpy der kleinsten Quadrate zu verwenden:

import numpy 
np.linalg.lstsq(X,y)[0] 

wobei X eine Matrix ist und y ein Vektor der Dimension kompatibel (Typ float64). Zweiter Weg ist das Ergebnis direkt nach der Formel zu berechnen:

import numpy 
numpy.linalg.inv(X.T.dot(X)).dot(X.T).dot(y) 

Mein Problem: Es gibt Fälle, in denen die verschiedenen Formeln geben radikal unterschiedliche Ergebnisse (obwohl es keinen Unterschied sein kann). 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?

+0

Hast du einen Intercept zu deinem X hinzugefügt? – gobrewers14

Antwort

5

Während diese beiden Formeln mathematisch äquivalent sind, sind sie nicht numerisch gleichwertig! Es gibt bessere Möglichkeiten, ein System linearer Gleichungen Ax = b zu lösen als durch Multiplikation beider Seiten mit A^(- 1), wie Gaussian Elimination. numpy.linalg.lstsq verwendet diese (und ausgeklügeltere) Methoden, um das zugrunde liegende lineare System zu lösen, und es kann viele Eckfälle bewältigen. Also benutze es wenn du kannst.

Matrixinversion ist sehr numerisch instabil. Tu es nicht, wenn du es nicht musst.

Verwandte Themen