http://www.johndcook.com/standard_deviation.html上的论文“准确计算运行方差” 显示了如何计算运行均值,方差和标准差。
在提供每条新训练记录时,是否存在可以类似地“动态”更新线性或逻辑回归模型参数的算法?
http://www.johndcook.com/standard_deviation.html上的论文“准确计算运行方差” 显示了如何计算运行均值,方差和标准差。
在提供每条新训练记录时,是否存在可以类似地“动态”更新线性或逻辑回归模型参数的算法?
Answers:
的线性回归系数是和。
因此,您真正需要的只是一种增量方法来计算。根据该值和的方差以及和的均值,可以计算参数和。正如您将在下面的伪代码中看到的那样,增量计算与增量计算非常相似。这并不奇怪,因为。
这是您可能正在寻找的伪代码:
init(): meanX = 0, meanY = 0, varX = 0, covXY = 0, n = 0
update(x,y):
n += 1
dx = x - meanX
dy = y - meanY
varX += (((n-1)/n)*dx*dx - varX)/n
covXY += (((n-1)/n)*dx*dy - covXY)/n
meanX += dx/n
meanY += dy/n
getA(): return covXY/varX
getB(): return meanY - getA()*meanX
我在寻找一个等效算法时发现了这个问题,该算法递增地计算多元回归为以便
对于您的两个具体示例:
线性回归 Alexander Strehl和Michael Littman 的论文“在线线性回归及其在基于模型的强化学习中的应用”描述了一种称为“ KWIK线性回归”的算法(请参阅算法1),该算法为使用增量更新的线性回归解决方案提供了近似方法。请注意,这不是正规化的(即不是Ridge回归)。我非常确定Strehl&Littman的方法不能扩展到该设置。
逻辑回归
这个线索为这件事提供了一些启示。报价:
即使没有正则化约束,逻辑回归也是一个非线性优化问题。它已经没有解析解决方案,通常这是获得更新解决方案的前提。具有正则化约束,这成为约束优化问题。除了不受约束的问题已经出现的问题之外,这还引入了一套全新的非分析复杂性。
但是,您可能还需要查看其他在线(或增量)回归方法,例如局部加权投影回归(LWPR)
作为一般原则:
0)您保留足够的统计信息和当前的ML估算值
1)当您获得新数据时,请更新足够的统计信息和估算值
2)如果您没有足够的统计信息,则需要使用所有数据。
3)通常,您没有封闭式解决方案;使用以前的MLE作为起点,使用一些方便的优化方法从那里找到新的最优值。您可能需要进行一些试验,以找到哪种方法可以针对您特定类型的问题实例进行最佳权衡。
如果您的问题具有特殊的结构,则可以利用它。
可能有或没有价值的几个潜在参考:
McMahan,HB和M. Streeter(2012),《
开放式问题:更好地限制在线Logistic回归》,
JMLR:研讨会和会议论文集,第23卷,44.1–44.3
Penny,WD和SJ Roberts(1999),《
动态Logistic回归》,
会议录IJCNN '99
除了tdc的答案外,还没有已知的方法可以在任何时间点以每次迭代的恒定时间来计算系数的精确估计。但是,有些替代方法是合理且有趣的。
首先要看的模型是在线学习设置。在这种情况下,世界首先宣布x的值,您的算法预测y的值,世界宣布真实值y',并且您的算法遭受损失l(y,y')。对于此设置,已知简单算法(梯度下降和指数梯度等)可实现次线性遗憾。这意味着,当您看到更多示例时,算法所犯的额外错误数量(与最佳线性预测变量相比)不会随示例数量的增加而增加。即使在对抗设置中也可以使用。有一篇很好的论文解释了一种证明这些遗憾界限的流行策略。Shai Shalev-Schwartz的讲义也很有用。
在线学习设置有一个扩展,称为强盗设置,在该设置中,仅为您的算法提供一个数字,表示错误的程度(并且没有指向正确答案的指针)。令人印象深刻的是,在线学习的许多结果都延续到了这一背景,除了这里人们被迫探索和利用外,这导致了各种各样有趣的挑战。
其他答案也指向了机器学习的世界,这肯定是解决此问题的地方。
但是,另一种可能更适合您的需求的方法是使用QR分解和低等级更新。这样做的方法及其用于解决最小二乘问题的方法如下:
Hammerling和Lucas 更新了QR分解和最小二乘问题。
这是添加到@chmike答案。
该方法似乎与BP Welford的在线标准差算法相似,该算法也计算平均值。约翰·库克在这里给出了很好的解释。托尼·芬奇(Tony Finch)在2009年提供了一种用于计算指数移动平均值和标准差的方法:
diff := x – mean
incr := alpha * diff
mean := mean + incr
variance := (1 - alpha) * (variance + diff * incr)
凝视先前发布的答案,并在其上扩展以包括指数移动窗口:
init():
meanX = 0, meanY = 0, varX = 0, covXY = 0, n = 0,
meanXY = 0, varY = 0, desiredAlpha=0.01 #additional variables for correlation
update(x,y):
n += 1
alpha=max(desiredAlpha,1/n) #to handle initial conditions
dx = x - meanX
dy = y - meanY
dxy = (x*y) - meanXY #needed for cor
varX += ((1-alpha)*dx*dx - varX)*alpha
varY += ((1-alpha)*dy*dy - varY)*alpha #needed for corXY
covXY += ((1-alpha)*dx*dy - covXY)*alpha
#alternate method: varX = (1-alpha)*(varX+dx*dx*alpha)
#alternate method: varY = (1-alpha)*(varY+dy*dy*alpha) #needed for corXY
#alternate method: covXY = (1-alpha)*(covXY+dx*dy*alpha)
meanX += dx * alpha
meanY += dy * alpha
meanXY += dxy * alpha
getA(): return covXY/varX
getB(): return meanY - getA()*meanX
corXY(): return (meanXY - meanX * meanY) / ( sqrt(varX) * sqrt(varY) )
在上面的“代码”中,desireAlpha可以设置为0,如果这样,则代码将在没有指数加权的情况下运行。它可以被建议为通过建议desiredAlpha设定为1 / desiredWindowSize Modified_moving_average用于移动窗口的大小。
附带问题:从精确度的角度来看,在上述替代计算中,有何评论更好?
参考文献:
chmike(2013)https://stats.stackexchange.com/a/79845/70282
约翰·库克(nd)准确计算运行方差http://www.johndcook.com/blog/standard_deviation/
芬奇,托尼。(2009)加权均值和方差的增量计算。https://fanf2.user.srcf.net/hermes/doc/antiforgery/stats.pdf
维基百科。(nd)韦尔福德的在线算法https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Online_algorithm