2024-04-19 00:20:21 发布
网友
我有两个向量x和y,我想计算它们的滚动回归,例如(x(1:4),y(1:4)), (x(2:5),y(2:5)), ... 已经有这个功能了吗?我心目中最好的算法是O(n),但是对每个子数组应用单独的线性回归将是O(n2)。 我在使用Matlab和Python(numpy)。在
(x(1:4),y(1:4)), (x(2:5),y(2:5)), ...
不,没有函数可以进行滚动回归,返回您希望的所有统计信息,并高效地执行。在
这并不意味着你不能写这样的函数。这样做意味着要多次调用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
不,没有函数可以进行滚动回归,返回您希望的所有统计信息,并高效地执行。在
这并不意味着你不能写这样的函数。这样做意味着要多次调用conv或filter等工具。这就是Savitsky-Golay工具的工作原理,它可以完成大部分您想要的功能。为每个回归系数打一个电话。在
使用上下测年工具来使用/修改之前的回归估计值的效率不会像调用conv那样有效,因为在使用conv进行工作时,只需要对线性系统进行一次因式分解。总之,不需要进行更新,只要这些点在序列中均匀分布即可。这就是萨维茨基·戈雷工作的原因。在
相关问题 更多 >
编程相关推荐