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

 
Dr.トレーダー

の場合、rbind() 関数でテーブルを結合することができます。
MLP1 <- rbind(Train1, Test)

Test(Train2)とは?また、なぜトレーニングテーブルとテストテーブルを組み合わせる必要があるのでしょうか?その上で学習済みモデルをテストするため、テストは別に行う必要があります。

すべてが思い通りに、簡単に、速くなることはないでしょう。これはレシェトフのモデルでは、データを与えるだけで、モデル自身が予測因子をふるい分け、重み、ニューロンの数などを決定してくれます。しかし、通常のニューロンではそれができず、例えば今日書いた例やVladimir Perervenkoの記事のように、クロスバリデーションによってニューロンのパラメータを選択する必要があります。


私がそこに書いたことをもう一度見てください -https://www.mql5.com/ru/forum/86386/page753#comment_6821981
そのコードに、説明どおりにデータを貼り付けて実行するだけです。もし、すべての予測因子を1つずつ取り出して排除しないのであれば、初回からあまりにひどいことになるでしょうね。実行後、max(gaResult@fitness) コマンドを追加で実行すると、geneticsで見つかった最良のモデルのR2スコアが表示されます。推定値が1に近いか少し小さいなら良し、0に近いかマイナスでも良し、です。

そして、PREDICTOR_COLUMNSで、あなたが良いと判断した列の正確な数を指定し、もう一度コードを実行すると、モデルはこれらの予測変数のみで学習されます。遺伝学による最適なモデル評価は1に近く、トレーニングテーブルとテストテーブルの精度は1.00であることが理想的です。

テスト表は、このモデルがすでに市場で取引されているかのように、トレーニングデータの後に厳密にタイミングを合わせる必要があります。

もし、そのコードで何も良いことが起こらなければ(KFOLDS=10でも)、それはダメなのです。もしうまくいけば、Reshetovのモデルの良い代替案があり、さらにそのコードを処理して、モデルをmqlに移植することができます。

実際には、Train1とTest1の2つのセクションがあるだけです。

NetworkA は Train1 から学習し、Test1 でサンプリングする。

NetBはTest1から学習し、Train1でサンプリングされる。

2つのプロットを足し合わせるとNetworkAがTest1を学習し、NetworkBがTrine1を学習すると、学習プロット全体の学習結果が得られますが、このプロットはテストプロットとなります。レシェトフが言いたいのはそこだ。調べてみたらと言われたので、わからないのですが......。kFoldは何とかプロットを分割して...。は不明だが......。

 

レシェトフの結果を繰り返すのではなく、彼のようにAIを組織化したいのです。委員会を鍛える姿。トレーニング自体は既にある手段であることは間違いないのですが、組織として、重要な役割を果たすかもしれません...。

あなたのスクリプトを私のデータで実行してみて、何が出てくるか見てみますね。

 

なるほど、ほとんど同じことですね。レシェトフの例では、行を一つずつ取っている(偶数行でトレーニング、奇数行でテスト)のですが、私の例では、行をグループ分けして並べています(1~100行でトレーニング、101~200行でテスト)。この方が、少なくとも、そのモデルが未知の他の時間区間で動作する可能性があることをチェックすることができるので、FXには好都合です。

レシェトフ型の分割も可能で、その場合は関数elemnn_kfold erase

split2 <- function(x,n) split(x, cut(seq_along(x), n, labels = FALSE)) #функция  которая поделит строки таблицы на число кусков согласно KFOLDS
folds <- split2(1:nrow(x), KFOLDS) #номера  строк для обучения в каждом фолде

を挿入し、代わりに

folds <- list()
folds[[1]] <- c(which(y==1)[c(T,F)], which(y==0)[c(T,F)])
folds[[2]] <- c(which(y==1)[c(F,T)], which(y==0)[c(F,T)])

で、折り返し回数を2回(KFOLDS=2)にしないと、エラーが 出ます。

 

ただ、クロスバリデーションクフォールド内の「トレーニング」と「テスト」はネストされたチェックであることを理解する必要があります。1つのtrainテーブルがあり、それがいくつかのパートに分かれていて、これらのパートがtrainingとtestになり、ループ内のモデルはあるパートから学習して他のパートを予測し、モデルがそれ用の新しいデータでこれらのパラメータで何かを学習して予測できるようにする。

そして、このクロスバリデーションには、もう関係ないテストテーブルが別にあります。実際の取引をシミュレートするウォークフォワードでのテストのように、モデルが完全に学習されるまで待ってチェックするだけです。
そして、トレーニングウィンドウとテストウィンドウを時間的にずらしたときに、ロールフォワードが各テストで正常な結果を出した場合、最後にトレーニングしたモデルは、別のテストテーブルでテストせず、端末に行って取引されることになる。

 
そうです、コントロールサンプルです、これはOOSサイトかもしれません。訓練され、テストされた。トレードに投じる。個人的にはそう思うのですが......。
 
ミハイル・マルキュカイツ
そうです、コントロールサンプル、これはOOSのセクションかもしれません。訓練され、テストされた。訓練され、テストされ、そして取引に投入されたのだ。個人的にはそう思うのですが......。

しかし、これには疑問が残ります。コントロールプロットがない場合のモデルの選び方。学習させ、クロスバリデーションで結果を受け取り、これがスコアになるモデルだ、本番にかけろ!!!と。

いつもは1日でテストパターンを作ってしまうので、3~4信号です......2週間で動くことを考えると、大きなロスではないんですけどね......。

 
上記の変更を加えて、あなたのスクリプトを実行しました。エラーも出ないし、何か学習もするのですが、学習中のグラフが表示されないのです。とにかく、結果はエラーという形で出ていますね。モデルを作り直した後、このスクリプトに戻る予定です。ちょうど、トレーニングセットが出来上がる頃、そこに続けて......。
 

TO: Dr. Trader.

私はわざわざスクリプトを細かく分析したわけではありません、あまりにも「さびしい」あなたが書いているのです。まあ、人それぞれスタイルがありますからね。しかし、ここでいくつかの重要なポイントがあります。ELMはアプリケーションに様々な機能を搭載しています。

  • ELMは学習時に与える例数が多いほど、ノイズに弱くなる(経験上、少なくとも2,000例以上)
  • ELMニューラルネットワークのアンサンブルでは、まともな結果を得るためには100以上のニューラルネットワークが必要です(経験上、冗長性を取って後でふるいにかける方が良いです)。
  • のマージは、平均化よりも悪い結果になります。ただし、これは開発者の判断によります。
  • seet.seedは、ハイパーパラメータを最適化する際に必要な再現性と多様性を提供しない。記事へのコメントを見て みましょう。そこでエリブラリウスは、この考えを実験によって検証した。ニューラルネットワークの初期化ごとにRNGを強制的に制御することで、初めて真の最適化結果を得ることができるのです。私としては、ベイズ最適化を使った方がいいと思います。ハイパーパラメータの良い選択を与える。
グッドラック

 

コメントありがとうございます!覚えておきます。

本文の最後に、前回の記事へのリンクを追加しました。elmNNをもっと真剣に理解したい人は、そのまま記事を読んでください。


ウラジミール・ペレヴェンコ

あなたが使っている単純な投票によるマージは、平均化よりも悪い結果をもたらします。ただし、開発者の裁量による。

アンサンブル予測には、実は2つの方法があるんです。

1) elemnn_kfold_predict() 関数 - 各モデルの回帰結果の算術平均を考慮する。

2) function elemnn_kfold_predict_reshetovstyle() - Mikhailの実験のためにこれを追加しました、アンサンブル結果を組み合わせるこの方法はReshetov neuronicsで使用されます。分類のみ。すべてのモデルの結果を比較し、すべてのモデルが同じ予測をした場合にのみ、特定のクラスで答えを出します。少なくとも1つのモデルが他のモデルと異なる予測をした場合、この関数は「わからない」という予測を返します。

 
もう結果は出たのでしょうか?アドバイザーはどこですか?
理由: