Python中的增量最小二乘法

时间:2016-06-22 16:30:46

标签: python numpy regression linear

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)将起作用,但不使用先前的计算。这似乎很浪费。

有更好的方法吗?

1 个答案:

答案 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的依赖。

我认为这存在于熊猫或其他什么地方,但它很容易自己实施。