高效的在线线性回归

机器算法验证 回归 时间序列 算法 在线算法 即时的
2022-01-30 03:17:48

我正在分析一些我想执行普通线性回归的数据,但是这是不可能的,因为我正在处理具有连续输入数据流的在线设置(这将很快变得太大而无法存储)并且需要在消耗它时更新参数估计。即我不能只将它全部加载到内存中并对整个数据集执行线性回归。

我假设一个简单的线性多元回归模型,即

y=Ax+b+e

的持续更新估计的最佳算法是什么Ab

理想情况下:

  • 我想要一个算法,每次更新的空间和时间复杂度最大,其中是自变量的维数(),是因变量的维数)。O(NM)NxMy
  • 我希望能够指定一些参数来确定每个新样本更新了多少参数,例如 0.000001 意味着下一个样本将提供参数估计的百万分之一。这将对遥远过去的样本效应产生某种指数衰减。
4个回答

Maindonald 描述了一种基于Givens 旋转的顺序方法。(Givens 旋转是两个向量的正交变换,将其中一个向量中的给定条目归零。)在上一步中,您已将设计矩阵 分解为三角矩阵正交变换使得(从三角矩阵中获得回归结果既快速又容易。)在与下方相邻时,您可以有效地将扩展为非零行,也说XTQQX=(T,0)vX(T,0)t. 任务是将这一行归零,同时将条目保持在对角线的位置。一系列 Givens 旋转可以做到这一点:与的第一个元素归零然后第二行的旋转将第二个元素归零,依此类推。效果是将预乘一系列旋转,这不会改变其正交性。TTtTQ

当设计矩阵有列时(这是对变量加一个常数进行回归的情况),所需的旋转次数不超过并且每次旋转都会改变两个向量。所需的存储空间因此,该算法在时间和空间上的计算成本均为p+1pp+1p+1TO((p+1)2)O((p+1)2)

类似的方法可以让您确定删除行对回归的影响。Maindonald 给出公式;贝尔斯利、库赫和威尔士也是如此因此,如果您正在寻找用于回归的移动窗口,您可以将窗口的数据保留在循环缓冲区中,与新数据相邻并在每次更新时删除旧数据。这使更新时间加倍,并且存储空间看来将是影响参数的模拟。O(k(p+1))k1/k

对于指数衰减,我认为(推测性地)您可以将此方法应用于加权最小二乘法,为每个新值赋予大于 1 的权重。不需要维护先前值的缓冲区或删除任何旧数据。

参考

JH Maindonald,统计计算。 J. Wiley & Sons,1984 年。第 4 章。

DA Belsley、E. Kuh、RE Welsch,回归诊断:识别有影响的数据和共线性来源。 J.威利父子公司,1980 年。

我认为将你的线性回归模型重铸成状态空间模型会给你你所追求的。如果您使用 R,您可能需要使用包dlm 并查看 Petris 等人的配套书籍

您始终可以对模型的平方和执行梯度下降只取它的梯度,但不要选择封闭形式的解决方案,而只选择搜索方向。EW

是给定参数的第 i 个训练样本的成本。那么您对第 j 个参数的更新是E(i;W)W

WjWj+αE(i;W)Wj

其中是步率,您应该通过交叉验证或良好的度量来选择。α

这是非常有效的,也是神经网络的典型训练方式。您甚至可以高效地并行处理大量样本(例如 100 个左右)。

当然,可以应用更复杂的优化算法(动量、共轭梯度……)。

到目前为止,没有人对此感到惊讶。线性回归具有二次目标函数。因此,从任何起点迈出的牛顿拉夫森步骤都会将您直接带到最佳状态。现在,假设您已经进行了线性回归。目标函数为:

L(β)=(yXβ)t(yXβ)
梯度变为 和粗麻布:
L(β)=2Xt(yXβ)
2L(β)=XtX

现在,您获得了一些过去的数据并进行了线性回归,并使用您的参数 ( )。根据定义,此时的梯度为零。粗麻布如上所示。一个新的数据点 ( ) 到达。您只需通过以下方式计算新点的梯度:βxnew,ynew

Lnew(β)=2xnew(ynewxnewTβ)
这将成为您的整体梯度(因为现有数据的梯度为零) . 新数据点的粗麻布为:

2Lnew=xnewxnewT

将此添加到上面给出的旧粗麻布中。然后,只需迈出 Newton Raphson 的一步。

βnew=βold+(2L)1Lnew

你完成了。