トレーディングにおける機械学習:理論、モデル、実践、アルゴトレーディング - ページ 3269

 
mytarmailS #:
では、この相関関係の最終目標は何なのか?

どの実装がより速く、どの実装が同じ結果をもたらし、どの実装がそうでないか...。この知識を使って何をするつもりですか?

技術的な限界のために他の人が計算できないことを計算できるようになる。

 
mytarmailS #:
また、テストとビジュアライゼーション、そして素早いアクションも必要だろう。

最終的な最適化も普通で、ディールのパラメーターをピックアップする。

 
fxsaber #:

最初は、毎回すべての行を数えるという、正面からの変形を試みました。Alglibには何かエラーがあるような気がした。


結果はしばしば一致する。


しかし、そうならない状況もある。


いつもこうなら、私の責任だ。でも、何か怪しいんだ。


Print(Matrix1);
Print("------------------");
Print(Matrix2);


Matrix2は、最初の5つがマッチし、次にゼロがマッチしている。
Res.Col(Corr.Row(0), i);をRes.Row(Corr.Row(0), i)に変更しました;

行列は似たようなものになったが、それでもIsEqualは通らない。どこかで何かあったのだろうか...。
 
Forester #:

Res.Col(Corr.Row(0), i); を Res.Row(Corr.Row(0), i) に変更;

どうやら間違っているようだ。

 
Forester #:
作成

Print(Matrix1);
Print("------------------");
Print(Matrix2);


Matrix2は、最初の5つがマッチし、次にゼロがマッチしている。
Res.Col(Corr.Row(0), i);をRes.Row(Corr.Row(0), i)に変更しました;

行列は似たようなものになったが、それでもIsEqualは通らない。どこかに原因があるのだろうか?

問題を発見

次のようにする

for (int i = 0; i < (int)Matrix.Cols(); i++)
{
if (i)
Vector.ー SwapCols(0, i);

CBaseStat::PearsonCorrM2(Vector, MatrixIn, MatrixIn.ー(), 1, MatrixIn.Cols(), Corr);

Res.Col(Corr.Row(0), i);
}.

 
そして、PearsonCorrM2は、三角形でカウントすれば、2倍のスピードアップが可能である。100行をすべてで数え、次に99行をすべて0-99で数え、99番目と100番目はすでに数えてある。

追伸
一般的に、あなたのコードは美しく簡潔です。私なら、すべてをループで処理します。)
 
Forester #:
そして、PearsonCorrM2は、三角形でカウントすれば、2倍速くなる。100行をallで数え、次に99行をall 0-99で数え、99番目と100番目はすでに数えられている。
高速フーリエ変換で相関を素早く計算できる...というのをどこかで読んだことがある。
 
residuals_a= a_mat- a_mat. column_means residuals_b= b_mat- b_mat. column_means a_residual_sums= residuals_a. column_sums b_residual_sums= residuals_b. column_sums residual_products= dot_product( residuals_a. transpose, residuals_b)
sum_products= sqrt( dot_product( a_residual_sums, b_residual_sums))
相関= residual_products/ sum_products 
 
mytarmailS #:
高速フーリエ変換で相関を素早く読み取ることができるとどこかで読んだが...スピードアップのオプションとしても。

やったことがある。文字列の長さが大きいときには意味がある。いつかお見せします。

 
Forester #:

問題発見

以下のようになるはずだ。

その通りだ!なぜ間違ったオプションがinCols < 100で機能したのか理解できません。
理由: