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

 
Dr.トレーダー

evaluateタブの「CSVファイル」と「Rデータセット」は、単にデータソースの指定方法が異なるだけです。同じデータを送り込めば、モデルをテストするときに同じ結果が得られます。

ガタが来る前に実行した場合

とすると、このdataset_validateはRデータセットとしてevaluateタブで利用できるようになります。しかし、モデル検査の結果は、csvファイルオプションを選択してC:/dummy_set_validation.csvというファイルを指定するだけで、どちらも同じテスト用データになるため、結局は同じになります。

学習自体はdummy_set_features.csvという別ファイルで行っているので、両ファイルのデータは異なっており、時間依存性は全くない(ただし数式依存性はある)ため、ここで先を見ることは不可能である。ニューラルネットワークは、結果を決定する6つの入力を見つけ出し、他の入力の影響を抑え、いくつかのニューラルロジックで目的の数式を記述するという、素晴らしい仕事をしたと思います。

念のため、両方のファイルをチェックして、重複している文字列があれば、それを見つけるようにしました。以下はRでのコードです。

この処理をrattleの前に行うと、dataset_trainとdataset_validateの 両方のテーブルが学習とモデルのチェックに利用でき、重複がなくなります。グローリーR

モデル検証用ファイルには、学習用サンプルから23個の繰り返しが含まれていますが、それを除けば、さらに3000個のユニークな行があるので、モデル評価に大きな影響を与えることはありません。

どうやら私は、自分の欲しいものを説明することができないようです。

1.両ファイルの開始日と終了日を教えてください。

2.このファイルは、バーが次々と到着するのをシミュレートしているので、dataset_validate ファイルからは何も削除 できません。

 

今朝、もう少し考えてみたのですが、本当にそんな単純な話ではないんです。

あなたの計算式によると、使用されている入力の組み合わせは2^6 = 64通りしかありません。もし、学習アルゴリズムがこの6つの入力の重要性を何らかの方法で判断すれば、64通りの組み合わせをすべて記憶することも可能だろう。そして、検証用サンプルに含まれるすべての入力の組み合わせがユニークであろうと関係なく、モデルはこれら6つの重要な入力だけを取り出して、すでに知られている答えを決定します。ニューロンでもそうでしたね。現在、トレーニングファイルから1,3,5,7,9,11の入力の組み合わせをいくつか削除しましたが、バリデーションファイルには同様の組み合わせを残しました。学習時の誤差は0%のままであったが、検証時には新しい組み合わせで50%に増加した。そして、これはまずい、FXではスプレッドが預かり金をマイナスに持っていかれてしまうのだ。SanSanychの言う通り、ここでは再トレーニングが重要なのです。

どうやらこれが、FXで多くのモデルがうまくいかない理由らしい。彼らはある組み合わせを覚えているだけで、新しい組み合わせには対応できないのだ。

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

どうやら私は、自分の欲しいものを説明することができないようです。

1.両ファイルの開始日と終了日を教えてください。

2.このファイルは、入力されるバーを次々とシミュレートして いるので、dataset_validate ファイルから何も削除 することはできない。

いや、そうなんです、わかったんです。おっしゃることは、FXにも当てはまりますし、私もそう思います。しかし、私はアレクセイのファイルと、それに対するモデルのトレーニングについて話していたのです。

https://c.mql5.com/3/96/dummy_set_features.zip - トレーニング

https://c.mql5.com/3/96/dummy_set_validation.zip - バリデーション

ファイル中の結果は "1-mod(sum(input_1 ; input_3 ; input_5 ; input_7 ; input_9 ; input_11);2)" という式で定義されています。

あなたが言ったファイルのリンクを教えてください。そのファイルでニューロンをトレーニングしてみます。

 
みんな。

重要な特徴にハイライトを当てたものの、すべてのデータに対して森が過剰に訓練されているという考え方は正しい。データをクリアして、再度トレーニングする必要があります。

データクレンジングを行わないNSは大丈夫だったのでしょうか?

ありがとうございました。
 
Dr.トレーダー

いや、そうなんです、わかったんです。おっしゃることは、FXにも当てはまりますし、私もそう思います。でも、アレクセイからのファイルと、それを使ったモデルトレーニングの話をしたんです。

https://c.mql5.com/3/96/dummy_set_features.zip - トレーニング

https://c.mql5.com/3/96/dummy_set_validation.zip - バリデーション

ファイル中の結果は "1-mod(sum(input_1 ; input_3 ; input_5 ; input_7 ; input_9 ; input_11);2)" という式で定義されています。

そのファイルへのリンクを教えてください。

どうぞ、アーカイブで。

こちらはRData。Rを開き、ガラケーをロードし、そこからデータフレームを利用することができます。

「R1.F1" "R1.F3" "R1.F4" "R1.F5" "R1.F6" - これはトレーニング用で、Fiでマークされた異なるターゲット変数を持っています。

"R2.F1" "R2.F3" "R2.F4" "R2.F5" "R2.F6 "はテスト用です。

"Rat_DF1" "Rat_DF2" "Rat_DF3" は全てのターゲット変数を格納したファイルです

ファイル:
ALL_cod.zip  3281 kb
 
アレクセイ・ブルナコフ
みんな。

重要な特徴にハイライトを当てたものの、すべてのデータに対して森が過剰に訓練されているという考え方は正しい。データをクリアして、再度トレーニングする必要があります。

データクレンジングを行わないNSは大丈夫だったのでしょうか?

ありがとうございました。
はい、最初の投稿にあるこのタスクについては、そのようなものです。しかし、FXにNSを適用すると、ゴミのNSもオーバートレーニングになり、新しいデータでは働きが悪くなるので、入力データの選択もそこに関係してきます。
 
Dr.Trader:
はい、最初の投稿にあるこのタスクについては、そのようになっています。しかし、FXにNSを適用した場合、ゴミの上のNSもオーバートレーニングになり、新しいデータではパフォーマンスが悪くなるので、そこでもインプットデータの選択が関係してきます。

d テストデータはきれいです。だから、どのサイトでもそこにパターンがあるのです。実データでは、モデルの学習時に学習サンプルをいくつかに分割して、サブサンプルまたはいくつかのサブサンプルで性能を制御することをしないわけにはいきません。これは分かりやすい経験則です。

しかし、ランダムフォレストの ような「すぐに使える」モデルの再学習可能性を検証するためには、検証の際にノイズを学習してしまい、完全に混乱してしまうことを確認することが有効でした。しかし、重要な予測因子は正しく選択されている。

しかし、14個の予測変数が純粋なノイズ(ランダムに入力された数字で、接続と出力がない)であるクリーンデータでさえ、forestはそれらをトレーニングに使い始めました。

そしてもうひとつ、とても重要な側面があります。テスト例は、相互に独立したオブザベーションを含んでいます。各行は、他の行に依存することはありません。現実には、時系列上では、隣接する観測値が依存することになる。例えば、振られたボールの隣り合う2つの値は、高い相関を持つことになります。だから、どんな手法も、強調するが、生の実データでは失敗するのだ。理想的には、学習用の実データを準備する正しい方法は、隣接する観測値が物理的に関連しないように選択することです。時系列の場合,これは,20の窓で指標を取る場合,トレーニング・サンプル中の近隣のオブザベーションは,少なくとも20ステップ離れて取られるべきであることを意味する.相互に関連しないように。そうすると、統計学やパターンの適切な学習が機能し始め、類似したデータのランダムな集積ではなくなるのです。私の言っていることが理解できるでしょうか。

出張から戻ったら、実際のFXのデータを使って公開実験もしてみようと思います。そして、パターンから利益を得るという現実的な目標で、すでに一緒にやっているかもしれません。

アレクセイ

 
Dr.トレーダー

しかし、NSはブラックボックスのようなものなので、解答のロジックを知ることはできない。重みを見たり、各入力の平均絶対 値を求めたり、図を描いたりすることができます。そして、1、3、5、7、9、11が他よりも重要であることを発見してください。しかし、残りの入力もなぜか使われており、重みがゼロのものはどこにもない。つまり、その逆で、まず学ぶことで、重要なインプットを見極めることができるのです。

NSの対比アルゴリズムのようなものを試してみてください。アルゴリズムは、入力(「手動」ブラウジングで選別する必要はありません)と接続(もちろん隠れ層のニューロンも)の両方を自己選別することができます。操作のロジックをまとめたものが出力されます。
 
SanSanych Fomenko:

どうぞ、アーカイブで。

こちらはRData。Rを開き、ガラケーをロードし、そこからデータフレームを利用することができる

「R1.F1" "R1.F3" "R1.F4" "R1.F5" "R1.F6" - これはトレーニング用で、Fiでマークされた異なるターゲット変数を持っています。

"R2.F1" "R2.F3" "R2.F4" "R2.F5" "R2.F6" -これはテスト用です。

"Rat_DF1" "Rat_DF2" "Rat_DF3" は全てのターゲット変数を格納したファイルです

ありがとうございます、試してみました。予測変数の選択、ニューロニクスの学習、そしてチェックデータセットへの保存と、非常に手間がかかっていますね。

以下の結果は、R1.F3に関するトレーニングのものです。

1)ガラガラというのは面白い結果ですね。標準構成のHHでは、訓練/検証/テストの誤差は30%/29%/33%でした。R2.F3の誤差は35%です。しかし、これは本当にラッキーなケースで、他の構成であれば簡単にトレーニング不足か過剰になってしまうところ、ここでは運が良かっただけなのです。

2) それから教師なし学習で簡単な粗いアプローチを取りました。隠れニューロンが200個あり、ネットワークは改良が止まるまで訓練されました。エラー トレーニング/バリデート/テスト/R2.F3 - 2%/30%/27%/45%.明らかに、ネットワークが再トレーニングされています。

3)監視付き学習これは木とは違いますが、神経細胞を鍛えすぎないように、常にこの作業を行う必要があります。その本質は、トレーニングを一旦中断し、トレーニング/検証/テストの結果を確認することです。結果の照合の黄金律は知りませんが、訓練用データセットで訓練し、検証用データセットとテスト用データセットでエラーを探し、検証用/テスト用のエラーが出なくなったら訓練を止めるというのはごく普通のアプローチです。これは、オーバートレーニングに対するある種の保証となります。R2.F3はこの全行程で使用不可とし、テストはトレーニング終了後に行う。この場合、訓練/検証/テスト/R2.F3の誤差は27%/30%/31%/37%です。ここでもオーバートレーニングはありますが、それほどでもありません。列車誤差が検証・テスト誤差より明らかに小さくなってから、早期に学習プロセスを停止することもできたはずですが、それは推測に過ぎません......。は、役に立ったかもしれないし、立たなかったかもしれない。

ターゲット変数 "R1.F1 "は3つの値を持っている、Rattleはニューロニックでそれができないので、Rで自分でコードを書かなければならない、私はこのデータセットを飛ばした。

Rattle neuronkaでは、"R1.F4" "R1.F5" "R1.F6" の4つのエラーでほぼ同じ結果でしたので、neuronkaでも適切なアプローチをすればほぼ同じ結果になると思いますので、これ以上の対応はしていません。

 

指導方法について。

ここでは、通常適用可能で良好な結果が得られる標準的な方法を説明した。https://www.mql5.com/ru/blogs/post/661499

簡単に説明すると、すべてのデータを2つの部分 - 訓練と検証 - に分ける。バリデーションは必要だと思う分だけ大きくしてください。次のようにしました。1分間の名言を15年分取る。私はエントリーとイグジットを計算し、観測値が物理的に異なるようにデータを間引く(私はn本の棒を通してそれらを取る、ここでnは指標で使用される最大の窓より小さくなく、最も遠いラグより小さくない)。なぜそうなのか、考えてみてください。データが相互に独立するようになる。

次にトレーニングの部分(一番大きいもの)、つまり一番遠い10年間をとっています。クロスバリデーションのために行インデックスを作成しています。つまり、データを5つの塊に分け、日付できっちりと区切ります。クロスバリデーションでは、モデルは深さ、反復回数などの学習パラメータを経て、4つのスポット学習チャンクで学習し、5分の1の学習チャンクで誤差を測定します。これを5回繰り返し、毎回5つのテストパーツから異なるものを選択します。5つのエラーメトリクスを取得します(1セットの学習パラメータに対して)。それらを平均化し、学習に関与していないデータでのテスト誤差の値として与える。

このとき、n,m,s,dは学習パラメータである。これは、グリッドの上のブルートフォースです。何百回もの繰り返しに達することもある。ランダム検索でも遺伝子検索でも構いません。Ez yu vish.

そして、学習パラメータのセットに対応するクロスバリデーションエラーメトリクスのテーブルを得ることができる。最高の結果とこのパラメーターを取ればいいのです。そして、そのパラメータで学習サンプル全体を学習させる。また、オーバートレーニングにならないよう、NSには反復回数の制限を設ける。

そして最後に、5年分の見積もりでモデルを検証し、サンプル外のパフォーマンスを評価します。

全体として、クロスバリデーションは効果的なモデル学習のための最良の選択であると言えるでしょう。試してみることをお勧めします。

Rのパッケージはcaretです。

また、お会いしましょう。

アレクセイ

СОПРОВОЖДЕНИЕ ЭКСПЕРИМЕНТА ПО АНАЛИЗУ ДАННЫХ ФОРЕКСА: первое серьезное обучение модели и результаты
СОПРОВОЖДЕНИЕ ЭКСПЕРИМЕНТА ПО АНАЛИЗУ ДАННЫХ ФОРЕКСА: первое серьезное обучение модели и результаты
  • 2016.02.27
  • Alexey Burnakov
  • www.mql5.com
Начало по ссылкам: https://www.mql5.com/ru/blogs/post/659572 https://www.mql5.com/ru/blogs/post/659929 https://www.mql5.com/ru/blogs/post/660386 https://www.mql5.com/ru/blogs/post/661062
理由: