2016-06-22 15 views
0

Numpy hat eine nützliche Kleinste-Quadrate-Schätzung der Form np.linalg.lstsq (X, Y), um Beta so zu schätzen, dass X_i * beta = Y_i, wobei X_i eine mxn-Matrix ist, beta eine Länge -n Zeilenvektor, und Y ist ein Länge-n-Spaltenvektor.Inkrementelle kleinste Quadrate in Python

Was aber, wenn ich Beta immer wieder schätzen möchte, wenn ich Zeilen zu X und Werte zu Y addiere? Mit anderen Worten, ich schätze zuerst Beta mit nur einem einzigen (x, y) Paar, dann schätze ich Beta mit zwei (x, y) Paaren, dann schätze ich Beta mit drei (x, y) Paaren usw. könnte ich tun dies zum Beispiel in einer Online-Lernumgebung.

Wiederholte Aufrufe von np.linalg.lstsq (X, Y), bei wiederholt aktualisierten X und Y, werden funktionieren, aber keine vorherigen Berechnungen verwenden. Dies scheint verschwenderisch.

Gibt es einen besseren Weg?

+0

Vielleicht möchten Sie sich einen Ansatz der [Dynamischen Programmierung] (https://www.codechef.com/wiki/tutorial-dynamic-programming) ansehen. – Andrew

Antwort

0

Ich schrieb meine eigene Funktion, die Beta für jedes neue (x, y) -Paar neu berechnet, aber vorherige Berechnungen speichert.

Insbesondere gegebene X in R^(nxd) als eine Matrix von n x-Beobachtungen und y in R^n als Spaltenvektor der y-Beobachtungen entsprechenden n, im allgemein wir wollen beta abzuschätzen, indem

beta_hat = (X^TX)^(- 1) (X^Ty)

Dann können Sie einfach halten X^TX in R^(d × d) und X^Ty in R^(dx1) online.

Zum Beispiel neues Beispiel hinzuzufügen (x_n + 1, y_n + 1) neu berechnen wir

X^TX = np.add (X^TX, np.outer (x_n + 1))

X^= Ty np.add (X^TX, np.multiply (x_n + 1, np.tile (y_n + 1, d)))

, die die Abhängigkeit von T. entfernt

ich stelle mir dies existiert irgendwo in Pandas oder so, aber es ist einfach genug, es einfach selbst zu implementieren.