% Inputs % sp is a time series to be predicted as a column vector np=100; % past pattern length nf=np; % future pattern length sw=100; % weighting exponent in kNN % Compute correlations to past patterns in sp m =numel(sp);% number of bars in sp x =sp(1:m-np-nf); % past patterns y =sp(m-np-nf+1:m-nf); % current past pattern f =sp(np+1:m-nf); % future patterns yf =sp(m-nf:m); % current future pattern Sx =movsum(x,np,'Endpoints','discard'); Sxx=movsum(x.^2,np,'Endpoints','discard'); Sy =sum(y); Syy=sum(y.^2); Sxy=conv(x,flip(y),'valid'); num=Sxy*np-Sx*Sy; den=Sxx*np-Sx.*Sx; r =abs(real(num./sqrt(den)/sqrt(Syy*np-Sy*Sy))); % Find nearest neighbor and extrapolate w=exp(sw*r); wsum=sum(w); w=w/wsum;% weighting coefficients of past patterns a1=num./den; a0=(Sxx.*Sy-Sx.*Sxy)./den; a1=w.*a1; a0=w.*a0; a0_sum=sum(a0); xp=conv(x,flip(a1),'valid')+a0_sum; % composite matched past pattern xf=conv(f,flip(a1),'valid')+a0_sum; % predicted future pattern xf=[xp(end);xf]; % Plot figure plot(1:np,y,'-k'); hold on; plot(1:np,xp,'-b'); hold on; plot(np:np+nf,yf,':k'); hold on; plot(np:np+nf,xf,'-r');
有一个警告。您能帮帮我吗?非常感谢。
为作者点赞!
一切都写得睿智而紧凑。谢谢。
如果你还在做的话,有一些改进的愿望。
1.在历史记录中,有必要绘制的不是相邻点,而是预测的最后一点,并按其长度(Nfut)向后移动。也就是说,计算并绘制过去某个区间的预测值。这样,预测的质量就显而易见了。但是,该指标需要很长时间来思考启动.....。
2.一个邻居很少!结果不稳定。
从理论上讲,有必要取相邻数=起始向量(即模式)的 3 个长度,然后取所有预测的平均值(最好是权重与相关系数成正比)。
嘿,弗拉基米尔、
我想和你谈谈这个指标 的定制工作。
如果可以,请联系我:najnudel@gmail.com。
谢谢
我有一种改进的近邻算法,用于我的目的。它克服了上述缺点。其原理很简单。在历史模式 中搜索近邻时,存储所有过去的 模式、已知的未来模式以及这些过去 模式 与当前模式 之间的相关系数。我们称这些相关系数为 r,它是所有过去相关性的向量。我们可以使用所有过去的模式 作为 "近邻",而不是选择 Abs (r) 最高的模式 作为近邻,但要对它们的贡献进行加权,即 exp(sw*abs(r)),其中 sw 是用户选择 的指数,用于控制预测相关系数最高的过去模式 的选择性。如果 sw 值很大,预测结果将只受相关性最强的相邻模式(真正的 "最近相邻模式")的影响。如果 sw 值很小,则所有过去的模式都同样重要。了解这一想法的人可以重写上述代码并发布一个新指标。下面是在 Matlab 中的实现。如果只需要包含过去具有正相关性的形态,请删除 r = abs (...) 中的 abs () 函数。这样,过去的负相关模式就会自动拥有最低权重。
弗拉基米尔,我明白你的意思。
,但这仍然是一个随机预测。
大约 10 年前,我在寻找模式方面做了很多实验。其中包括镜像、反转、相加。结论是--将父子关系延续到未来完全是随机的。所有的巧合都是随机的。
弗拉基米尔,我明白你的意思。
,但这仍然是随机预测。
大约 10 年前,我做过很多关于 paternos 搜索的实验。用镜像、反转、求和等方法。结论是--将父线延续到未来完全是随机的。所有的巧合都是随机的。
我同意
弗拉基米尔,我明白你的意思。
,但这仍然是随机预测。
大约 10 年前,我做过很多关于 paternos 搜索的实验。用镜像、反转、求和等方法。结论是--将父线延续到未来完全是随机的。所有的巧合都是随机的。
如果考虑到实时性,则完全不是。如果把时间因素排除在外,就会产生随机性。
这套代码需要稍加改进,但好吧,你的想法确实有道理