Numpy有一个方便的最小二乘估计形式np.linalg.lstsq(X,Y)来估计beta,使得X_i * beta = Y_i,其中X_i是mxn矩阵,beta是长度为n的行向量, Y是长度为n的列向量。
但是,如果我想重复估算beta,我将X添加到行,将值添加到Y,该怎么办?换句话说,我首先估计beta只有一个(x,y)对,然后我使用两个(x,y)对来估计beta,然后我使用三个(x,y)对估计beta,等等。我可能会做例如,这在在线学习环境中。
在重复更新的X和Y上重复调用np.linalg.lstsq(X,Y)将起作用,但不使用先前的计算。这似乎很浪费。
有更好的方法吗?
答案 0 :(得分:0)
我最终编写了自己的函数,为每个新的(x,y)对重新计算beta,但保存了以前的计算。
具体而言,给定R ^(nxd)中的X作为n x-observation的矩阵,并且将R ^ n中的y作为相应n y-观测的列向量,通常我们想要估计β
beta_hat =(X ^ TX)^( - 1)(X ^ Ty)
然后你可以在R ^(dxd)中保持X ^ TX,在R ^(dx1)中保持X ^ Ty在线。
例如,要添加新示例(x_n + 1,y_n + 1),我们重新计算
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)))
消除了对T的依赖。
我认为这存在于熊猫或其他什么地方,但它很容易自己实施。