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

 

配列 Xの次元数

> dim(X1)
[1] 7000    8
X <- array( c(X1,X2), dim=c(7000, 8, 2) )

あなたの場合、次のようになります。

X <- array( c(X1,...X100), dim=c(7000, 8, 100) )
#или, что равнозначно
X <- array( c(X1,...X100), dim=c(dim(X1), 100) )

当然ながら例数が7000で変換長=8であれば

 

この「rnn」パッケージは、使うための製品というより、プログラミングの練習になります。代わりにパッケージ "RSNNS "を参照してください。

世の中にはリカレントネットワークというものがあります。さて、もっと深く、PyBrain、Ruthonのkeras

グッドラック

 
ありがとうございます!調べてみます
 

学習済みモデルのクロスバリデーションに妙な問題があるのですが。というより、私が気づいていないだけで、ずっと問題があったことがわかりました。

私の行動は、おおよそ次のようなものです。年のユーラスドには、さまざまな指標があります。70%/15%/15%の割合で行ごとにランダムにデータを分割して、学習/検証/妥当性確認を行います。

さらに、このデータには9000の予測変数が含まれています。私はその変異体を遺伝学的に検索し、予測因子の各サブセットに基づいてPCAモデルを訓練します。学習用サンプルでモデルを学習させ、エラーを判断する。両方の検証用サンプルで同じモデルをテストし、その誤差を判断する。

私は、フィットネス関数の最終結果を次のように計算しています。
max(error_train,error_validate1,error_validate2) - min(error_train,error_validate1,error_validate2)です。
ポイントは、最小誤差と最大誤差の差をできるだけ小さくすること(いわゆる「フォメンコ基準」 :) です。)

このモデルは、3つのサンプルすべてにおいて、約25%の誤差を達成しています。しかし、フロントテストでは、いきなり40%もの誤差が発生する。文字列のサンプルを生成するために random.seed を変更し、以前に定義した予測変数のセット(最適なもの)に対して、トレーニング/検証/妥当性の誤差が 25%/25%/25% の代わりに 25%/35%/35% となり、フロントテストでは再び同じ 40% となりました。検証用サンプルの誤差が+10%増加し、非常に悪い。

つまり、遺伝学は、特定の訓練と特定の検証サンプルに対して、予測因子の最適なバージョンを見つけるということがわかります。もし、行を異なる順番でサンプルに散布すると、学習した予測モデルは同じ予測変数では十分に機能しなくなります。

訓練されたモデルが、サンプル上のどのような行の分布に対してもほぼ同じ誤差を与えるように、これを扱う標準的な方法はあるのでしょうか?これは深刻な問題です。例えば、遺伝子の世代ごとにトレーニングサンプルとバリデーションサンプルを繰り返し生成することができるんです。あるいは、2つの異なる行のサンプルセットを作り、それに対して2つのPCAモデルを学習させ、最も悪い結果をフィットネス関数として採用します。これって、意味があるんでしょうか?

 
Dr.トレーダー

学習済みモデルのクロスバリデーションに妙な問題があるのですが。正確には、私が気づかなかっただけで、ずっと問題があったということです。

(いわゆる "Fomenko基準" : )。

私はこの基準がとても気に入りました。ありがとうございます。

しかし、それはあなたが完全に述べているわけではありません。

私の基準には、フロントテストが含まれていなければなりません。私の投稿をすべて見ると、私は常にfronttestについて正確に書いています。私の理解によれば、それは最初の3つのセットから時間的に(インデックスによって)分離された観測値の一部に対して実施されるべきものです。

あなたと同じように提供されたセットを分割するガラケーに戻った時に遭遇しました。良いデータが取れた、私は3つのサンプル全てで10%以下だった、そして新しいファイルを取ると40%の誤差はまだ良い結果だ!」と。もっとひどい目にあったこともある。

だから、私のオーバートレーニングの基準は

1. 元の集合を、無作為のトリックを使わずに、純粋に機械的に、インデックスの昇順で2つの部分に分割する。

2.ランダムな方法のいずれかによる最初の部分を、学習テストと検証の3つに分けます。

3. これら3つの部品の誤差がほぼ等しい場合は、ステップ4に進みます。

4.学習させたモデルを2つ目のパーツで実行する。また、誤差はほぼ等しくなるはずです。これは基本的なことですが、トレードをするときは常にトレーニングサンプルの外でトレードし、一貫して(ランダムではなく)バーの後にバーを取得するからです。

4点すべてでほぼ同じ誤差が出た場合は、モデルの再教育は行わない。

大きな矛盾がある場合、モデルは再トレーニングされる。Rでノイズを除去するツールは見つかっていません。自作のものがあります、こちらもPCAに関する記事です。

 
mytarmailS:

アントン・ズベレフ

そういう会話はやめましょう。ここで学び、経験を共有する人たちは、お互いに助け合おうとしているのに、あなたは自分は愚かで、私は何でも知っているという立場に立っている)あなたが何を考え、何を正しいと思うのか、それを理解する手助けをしてほしい。

ただBPを与えるだけでは不十分で、情報を圧縮し、良い判断を妨げる不必要なものを捨てる必要がある、理想的には0か1のそれらの買い/売り、すなわち、に同意します。10個のインディケータ(私は信じていませんが)があり、そのうちの9個をフィルタリングしてRSIだけを残したとすると、このインディケータには範囲があり、-70から70までの値では機能しないことが判明したので、圧縮する必要があるなど、十分とは言えません。.問題は、どうやるか?

という思いはあるのですが、まだそのようなセレクタを実装するほどの知識はありません...。

私の最初の試みはずっと前にあった、私は現在の価格から戻ってループし、過去にほぼ同じ状況を検索し、これらの状況は、彼らが判明した方法、例えば、私は現在の状況を持って、それのために過去8アナログで10類似が判明した価格の上昇、2秋に終了したので、それが成長するだろう......しかし、恐ろしいことに)、その逆で、このような場面では非常に頻繁に強く買い方向にバイアスがかかって下落し、その後、1ティックずつ再試行されることが多いことが判明しました・・・。

そこで、一種の指標を作り、すべての買い値の累計と利益の累計を取り、その差を積み上げて、ある指標を得ました。これを価格と比較すると、価格とは逆になり、相関は-0.7~-0.9でした。簡単に言うと、市場は自分の統計に逆らうことになります。これは、考え直すべきこと でしょう。

Dr.Traderへ

これを見れば少しは理解できるかも...。

私はこの影響を見るための迅速かつ簡単な方法を発見した、私はそれについてもっと書くことができる興味深い場合

 
サンサニッチ・フォメンコ

4.学習させたモデルを2つ目のパーツで実行する。また、誤差はほぼ等しくなるはずです。これは基本的なことで、トレードをするときは常にトレーニングサンプルの外側でトレードし、一貫して(ランダムではなく)バーが次々と出てくるからです。

了解です、ありがとうございます。検証用サンプルは2つではなく、3つあることがわかりました。そのうちの1つは、ソースファイルの最後のエントリから無作為に厳密な形で取得したものです。その他のサンプルはランダムです。試してみます。

以前、学習ファイルの最初の部分を、インデックスによって厳密に、ランダムなしで、検証してみたことがあります。これは、学習済みのモデルが学習前のデータで小さな誤差を示した場合、学習後のデータでも同じような誤差を示すという考え方です。それは間違いで、トレーニング期間前の誤差とトレーニング期間後の誤差は全く相関がないことが判明しました。

mytarmailS:

そこで、このような指標を導入し、すべての買い予想と売り予想の累計を取り、その差を計算して指標を求めたところ、価格とほぼ逆に表示され、相関は-0.7~-0.9となり、簡単に言えば市場は自分の統計と逆に動いて いる、これは考え直すべき点 である。

この方法は、どのような時間間隔でも常に有効なのでしょうか?もちろん見た目は変ですが、要は「動く」ということです。未経験のモデルでも同じような観察をしていました。時には、現実とは正反対の予測結果を出すこともありました。しかし、それでも正常に動作することもありました。非常に長いテストの後、モデルを学習させ、異なる時間間隔でチェックしたところ、平均して約50%の確率で正しいことが理解できました。これは仕方がないことで、コインで予測しても同じ結果になります。その後、私は、このモデルが、反転やフィルタリング、他の多くのモデルの集合解を使わずに正しい結果を与えるはずだと確認し、正しく理解しました。そうでなければ、私は混沌としたランダムな中に閉じ込められてしまうかもしれません。

 
Dr.トレーダー

この方法は、どの時間軸でも常に有効なのでしょうか?もちろん、不思議なことではありますが、要は「効く」ということなんです。未経験のモデルでも同じような観察をしていました。時には、現実とは正反対の予測結果を出すこともありました。しかし、それでも正常に動作することもありました。非常に長いテストの間、モデルを訓練し、異なる時間間隔でチェックしながら、平均して約50%の確率で正しいことを理解しました。その後、私は、このモデルが、反転やフィルタリング、他の多くのモデルの集合解なしで正しい結果を与えるはずであることを確認し、正しく理解しました。そうしないと、カオスとランダム性が支配する罠にはまることになります。

はい、常に、どんな時でも(ただし、サンプリングのニュアンスはあります)、出力はほぼ価格の完全コピーですが、逆相関があります。この方法を使えば、ニューロネットがどのように学習され、そこから何が期待できるかを見ることができ、いくつかの結論を出すことができる。

1) これが最も典型的な状況です。ネットワークが逆相関であれば、それは訓練されているということであり、そうでなければ逆相関は存在しませんよね?

2) 単なるランダム - ネットが何も学習していないことを意味します。

3) ネットがマーケットと連動する(この効果は、かなり非標準的なターゲットでのみ達成できた) - それは、すべてがOKであることを意味します。

4)そして、最も重要な結論(これはあなたのために重要である、D.トレーダー) あなたがあなたのネットワーク予測を構築し、それが結論1のように反対の方向に行くでしょう、ない最適化、遺伝学、クロスバリデーションや他の魅力は絶対に何もあなたを助けません - それについて考える、それは論理と明白である。

 
mytarmailS:

1) これが最も典型的な状況です。ネットワークが逆相関であれば、それは訓練されているということで、そうでなければ逆相関は存在しませんよね?

4)そして、最も重要な結論(これはD.トレーダーにとって重要です) あなたがニューラルネットワークの予測を行い、それが結論1のように反対の方向に行く場合、どんな最適化、遺伝学、クロスバリデーションや他の魅力は絶対に何もあなたを助けません、それについて考える、それは論理的かつ明白である。

1) 異なる学習間隔で安定した逆相関があるのは少し不思議ですが、ネットワークが何かを学習したのですから、良い結果だと納得します。

4)これには反対です。もし、バイナリ分類(ターゲット変数が「0」か「1」)を使用する場合、遺伝学者やオプティマイザのフィットネス関数は「逆」の結果を得るために簡単に変更でき、1から現在の結果を引くだけです。
例えば、遺伝学では、ある一定の予測因子をピックアップします。その上でニューロニクスの学習を行い、クロスバリデーションを行い、平均誤差を求めます。0.4というエラーが出ます。適性関数の「逆」結果は、1-0.4 = 0.6と定義できる。ジェネティクスは、0.6からゼロまで誤差を減らそうとします。その結果、適合度関数値が0の予測変数の集合が得られる。しかし、ニューラルネットワークの本当の誤差は0+1=1だったということだ。つまり、得られたニューロンカは100%間違っており、これは逆相関である。
一般に、同じ遺伝的アルゴリズムと クロスバリデーションを使って、望ましい結果とは逆の結果を出すニューロンを訓練すると、わざとそうなるように得られます。しかし、何のためかは不明である。:)

また、ターゲット変数が「0」と「1」の2値分類では、最悪の誤差は0.5であることを付け加えておきます。
Error == 0 で良い。
Error == 1は逆相関のニューロンで、結果を反転させればOKです。でも、その理由を探ったほうがいい、非典型的な状況なんです。
誤差0.5は、結果が完全にランダムで、モデルが全く役に立たないことを意味します。

 

1