2016-06-22 62 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.

的依赖性

我想象这存在于熊猫之类的地方,但它很容易就可以自己实施。