高效的在线线性回归


53

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

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

y=Ax+b+e

创建线性回归参数和的连续更新估计的最佳算法是什么?bAb

理想情况下:

  • 我想要一种算法,每次更新的空间为,时间复杂度最高,其中是自变量()的维数,是因变量()。ñ X中号ÿO(NM)NxMy
  • 我希望能够指定一些参数来确定每个新样本更新多少参数,例如0.000001表示下一个样本将提供参数估计的百万分之一。对于遥远的过去样本,这将产生某种指数衰减。

2
查找(1)弹性线性回归,(2)卡尔曼滤波器。
Jase)

Answers:


31

Maindonald描述了一种基于Givens旋转的顺序方法。(A Givens旋转是零出在矢量中的一个给定的条目。两个向量的正交变换)。在已分解的前一步骤设计矩阵 为三角矩阵经由正交变换这样。(从三角矩阵中获得回归结果非常容易。)在下邻接新行,您可以有效地将扩展为非零行也说T Q Q X = T0 ' v XT0 ' t T T t T QXTQQX=(T,0)vX(T,0)t。任务是将该行清零,同时将条目保持在对角线的位置。一系列的Givens旋转可以做到这一点:第一行的旋转将的第一个元素清零;然后第二个的旋转将第二个元素清零,依此类推。效果是将乘以一系列旋转,这不会改变其正交性。TTtTQ

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

使用类似的方法,您可以确定删除行对回归的影响。Maindonald给出公式;所以做贝尔斯利,丹山,与威尔士。因此,如果您正在寻找移动的窗口以进行回归,则可以将该窗口的数据保留在循环缓冲区中,并与新数据相邻并在每次更新时删除旧数据。这会使更新时间加倍,并需要为宽度为的窗口额外存储。看来是影响参数的模拟。k 1 / kO(k(p+1))k1/k

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

参考文献

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

DA Belsley,E。Kuh,RE Welsch,回归诊断:确定有影响力的数据和共线性的来源。 威利父子杂志,1980年。


1
Maindonald描述的方法与Gentleman算法相关还是相同?jstor.org/stable/2347147
一站式

6
在这种情况下,另请参阅Alan Miller的扩展jstor.org/stable/2347583。他的Fortran软件的网站的档案现在在jblev​​ins.org/mirror/amiller
一站式

5
一个显式算法出现在p的底部。saba.kntu.ac.ir/eecd/people/aliyari/NN%20%20files/rls.pdf中的第 4条。可以通过谷歌搜索“递归最小二乘”找到。它看起来不像是对Gentleman / Maindonald方法的改进,但至少已清楚明确地进行了描述。
ub

2
最后一个链接看起来像我要建议的方法。他们在其他地方使用的矩阵身份在其他地方称为Sherman-Morrison-Woodbury身份。它在数值上实现起来也很有效,但可能不如Givens旋转稳定。
主教

2
@suncoolsu嗯... Maindonald的书是在我开始使用它时才新出版的:-)。
ub

8

我认为将线性回归模型重铸为状态空间模型将为您提供服务。如果使用R,则可能需要使用dlm软件包 ,并查看Petris等人的随书


也许我很困惑,但这似乎是指时间序列模型?我的模型实际上更简单,因为样本不是时间序列(实际上它们是独立的(x-> y)样本,它们只是随着时间的推移而大量积累)
mikera 2011年

1
是的,在一般情况下,它用于具有非独立观测值的时间序列;但是您始终可以假设连续观察之间不相关,这使您感兴趣的特殊情况。
F. Tusell

7

您总是可以对模型的参数乘以平方和进行梯度下降。只需采用它的梯度即可,但不要使用封闭形式的解决方案,而只能使用搜索方向。EW

给定参数令为第i个训练样本的成本。然后,您对第j个参数的更新为E(i;W)W

WjWj+αE(i;W)Wj

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

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

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


似乎与本文非常相似eprints.pascal-network.org/archive/00002147/01/…。它已在名为jubatus的开源项目中实现。
saccharine

3

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

L(β)=(yXβ)t(yXβ)
的梯度变得 而粗麻布:
L(β)=2Xt(yXβ)
2L(β)=XtX

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

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

2Lnew=xnewxnewT

将此添加到上面给出的旧粗麻布中。然后,只需采取Newton Raphson步骤即可。

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

这样就完成了。


1
我喜欢这个想法,因为它简单易用,但(a)为了不使读者感到困惑,宁愿看到对“ ” 的明确定义,并且(b)认为您需要正确计算梯度(或显示为什么偏离2倍没有关系)。如果您可以举一个小例子证明它是正确的,那么这将更有说服力。对于较大的值得估计计算量。反转Hessian是否需要时间? p ø p 3Lnewp,O(p3)
ub

谢谢,今天稍后再添加更多详细信息。是的,对于大,对粗麻布逆需要。您还可以尝试维护hessian逆,并使用幂级数()直接对其进行更新。如果您有一百万个参数,则无论如何梯度下降都是您的唯一选择。p I A 1 = I + A + A 2 + O(p3)p(IA)1=I+A+A2+
ryu576

2

标准最小二乘拟合给出回归系数

β=(XTX)1XTY

β

XTXXTYM2+Mβ

例如,如果M = 1,则一个系数为

β=i=1Nxiyii=1Nxi2

因此,每当您获得一个新的数据点时,您都​​要更新两个总和并计算比率,并获得更新的系数。

XTXXTY(1λ)λ


2
β

XTXXTY

6
XX

1
C1xCxzt+1=zt+xCztzC1xt

1

当您稍微重写一下内容时,更容易解决该问题:

Y = y

X = [x,1]

然后

Y = A * X

通过计算找到一个时间解

V = X'* X

C = X'* Y

请注意,V的大小应为N×N,C的大小应为N×M。然后,您要查找的参数如下:

A = inv(V)* C

由于V和C都是通过对数据求和来计算的,因此您可以在每个新样本中计算A。但是,这具有O(N ^ 3)的时间复杂度。

由于V是平方且为半定正数,因此确实存在LU分解,这使得从数值上反转V更为稳定。有一些算法可以对矩阵的逆执行1级更新。找到那些,您将获得所需的高效实现。

等级1更新算法可以在Golub和van Loan的“矩阵计算”中找到。它是一门艰难的材料,但确实对此类算法进行了全面概述。

注意:以上方法在每个步骤都给出了最小二乘估计。您可以轻松地将权重添加到X和Y的更新中。当X和Y的值太大时,可以用单个标量缩放它们,而不会影响结果。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.