% 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。
tks
私は改良された最近傍アルゴリズムを持っており、私の目的に使用している。これは前述の欠点を克服している。考え方は簡単だ。過去のパターンから 最近傍を探す場合、すべての過去の パターンと、それらの既知の将来のパターン、そしてこれらの過去の パターンと 現在のパターンとの 間の相関係数を保存する。これらの相関係数をrと呼ぶことにしよう。rは過去のすべての相関のベクトルである。最も高いabs(r)を持つ過去パターンを 最近傍として選択する代わりに、すべての過去パターンを「最近傍」として使用するが、それらの寄与はexp(sw*abs(r))で重み付けされる。sw の値が非常に大きいと、予測は最も強い相関を持つ近傍(真の「最近傍」)の影響を受けるだけとなる。sw が非常に小さいと、過去のすべてのパターンが等しく重要になります。このアイデアを理解した人は、上記のコードを書き直して新しいインディケータを発表することができます。以下は Matlab での実装です。正の相関を持つ過去のパターンのみを 含める必要がある場合は、r = abs (...) の abs () 関数を削除してください。そうすれば、負の相関を持つ過去のパターンが自動的に最も低いウェイトになります。
私は改良された最近傍アルゴリズムを持っており、私の目的に使用している。これは前述の欠点を克服している。考え方は簡単だ。過去のパターンから 最近傍を探す場合、すべての過去の パターンと、それらの既知の将来のパターン、そしてこれらの過去の パターンと 現在のパターンとの 間の相関係数を保存する。これらの相関係数をrと呼ぶことにしよう。rは過去のすべての相関のベクトルである。最も高いabs(r)を持つ過去パターンを 最近傍として選択する代わりに、すべての過去パターンを「最近傍」として使用するが、それらの寄与はexp(sw*abs(r))で重み付けされる。sw の値が非常に大きいと、予測は最も強い相関を持つ近傍(真の「最近傍」)の影響を受けるだけとなる。sw が非常に小さいと、過去のすべてのパターンが等しく重要になります。このアイデアを理解した人は、上記のコードを書き直して、新しいインディケータを発表することができます。以下は Matlab での実装です。正の相関を持つ過去のパターンのみを 含める必要がある場合は、r = abs (...) の abs () 関数を削除してください。そうすれば、負の相関を持つ過去のパターンが自動的に最も低いウェイトになります。
ウラジミール、その考えはわかったよ。
でも、ランダムな予測であることに変わりはない。
10年ほど前にパターンを見つける実験をたくさんしました。ミラーリング、反転、パタンの合計などだ。結論 - パターンを未来に続けることは完全にランダムである。すべての偶然はランダムである。
ウラジミール、アイデアはわかったよ。
でも、ランダムな予想であることに変わりはない。
10年ほど前にパテルノ探索の実験をたくさんしました。ミラーリング、反転、パターンの和。結論 - パテルノを未来に続けることは完全にランダムである。すべての偶然はランダムである。
私もそう思う。
ウラジミール、アイデアはわかったよ。
でも、ランダムな予想であることに変わりはない。
10年ほど前にパテルノ探索の実験をたくさんしました。ミラーリング、反転、パターンの和。結論 - パテルノを未来に続けることは完全にランダムである。すべての偶然はランダムである。
同じような瞬間に同じような動きがある。システムから時間の要素を取り除けば、ランダム性が生まれる。
このコードには若干の改良が必要ですが、okjustaskさんのアイデアは理にかなっています。