2016-06-22 86 views
0

Numpy具有np.linalg.lstsq(X,Y)形式的方便最小二乘估計來估計β,使得X_i * beta = Y_i,其中X_i是mxn矩陣,beta是長度-n行向量,Y是長度爲n的列向量。Python中的增量最小二乘法

但是,如果我想反覆估計beta,那麼我將行添加到X並將值添加到Y?換句話說,我首先用一對(x,y)對估計beta,然後用兩個(x,y)對估計beta,然後用三個(x,y)對估計beta。我可能會這樣做例如,這在一個在線學習環境中。

對重複更新的X和Y重複調用np.linalg.lstsq(X,Y)將會工作,但不會使用以前的計算。這看起來很浪費。

有沒有更好的方法?

+0

你可能想看看[Dynamic Programming](https://www.codechef.com/wiki/tutorial-dynamic-programming)這種方法。 – Andrew

回答

0

我最終編寫了自己的函數,爲每個新的(x,y)對重新計算beta,但保存了以前的計算。

具體而言,在R 1(NXD)正的x的觀測中的R^N作爲相應的n個Y觀察的列向量的矩陣和y給出的X,一般我們想通過

來估計測試

然後,您可以在R ^(dx1)online中的R ^(dxd)和X^Ty中僅保留X^TX。

例如添加新的實例(x_n + 1,y_n + 1)重新計算我們

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

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

其去除上T.

的依賴性

我想象這存在於熊貓之類的地方,但它很容易就可以自己實施。