滚动线性回归的有效方法

2024-04-19 00:20:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个向量x和y,我想计算它们的滚动回归,例如(x(1:4),y(1:4)), (x(2:5),y(2:5)), ...
已经有这个功能了吗?我心目中最好的算法是O(n),但是对每个子数组应用单独的线性回归将是O(n2)。 我在使用Matlab和Python(numpy)。在


Tags: 功能numpy算法线性数组向量matlabn2
2条回答

不,没有函数可以进行滚动回归,返回您希望的所有统计信息,并高效地执行。在

这并不意味着你不能写这样的函数。这样做意味着要多次调用conv或filter等工具。这就是Savitsky-Golay工具的工作原理,它可以完成大部分您想要的功能。为每个回归系数打一个电话。在

使用上下测年工具来使用/修改之前的回归估计值的效率不会像调用conv那样有效,因为在使用conv进行工作时,只需要对线性系统进行一次因式分解。总之,不需要进行更新,只要这些点在序列中均匀分布即可。这就是萨维茨基·戈雷工作的原因。在

import numpy as np
# y=x*alpha+beta
# window_size - integer, x-numpy array, y-numpy array

x2=np.power(x,2)
xy=x*y
window = np.ones(int(window_size))
a1=np.convolve(xy, window, 'full')*window_size
a2=np.convolve(x, window, 'full')*np.convolve(y, window, 'full')
b1=np.convolve(x2, window, 'full')*window_size
b2=np.power(np.convolve(x, window, 'full'),2)
alphas=(a1-a2)/(b1-b2)
betas=(np.convolve(y, window, 'full')-alphas*np.convolve(x, window, 'full'))/float(window_size)
alphas=alphas[:-1*(window_size-1)] #numpy array of rolled alpha
betas=betas[:-1*(window_size-1)]   #numpy array of rolled beta

相关问题 更多 >