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

 
Dr.トレーダー

ニューロニクスの例はすでにここに載せてあるので、適当なものを探して、あなたのデータ用に(委員会も入れて)やり直します。入門編は書かないが、コードにコメントを増やしていく。


すみません、変数with(F,T)の意味がよくわかりません ループの中で

for(i in c(1:nrow(table))[c(F,T)]){
   ..... table[i,] ..... 
}

つまり、このループはテーブルの偶数行にかかるのですが、では、奇数行にかかるようにするにはどうすればいいのでしょうか?

 

F と T はブール値の FALSE と TRUE の省略形であり,原理的には c(T,F) と書くか c(TRUE,FALSE) と書くかは問題ではなく,最初の変形の方が短いだけである.

テーブルが10行ある場合、c(1:nrow(table))はc(1,2,3,4,5,6,7,8,9,10)の単なるベクトルとなります。
また、この場合、ブーリアン値を持つ配列は、必要な長さまでループするため、 c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE) となります。

すなわち c(1:nrow(table))[c(F,T)] R は次のように理解されるでしょう。
c(1,2,3,4,5,6,7,8,9,10)[c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE)
で、TRUEにマッチするベクトル要素を順に取り出します。

例えば、3番目の要素すべてを取りたい場合は、次のように書きます。
c(1,2,3,4,5,6,7,8,9,10)[c(FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE)
または略称
c(1:10)[c(F,F,T)]のようになります。


奇数要素ではTとFを入れ替えるだけです:c(1:nrow(table))[c(T,F)].

 
Dr.トレーダー

F と T はブール値の FALSE と TRUE の省略形であり,原理的には c(T,F) と書くか c(TRUE,FALSE) と書くかは問題ではなく,最初の変形の方が短いだけである.

テーブルの行数が10行であれば、c(1:nrow(table))はちょうどc(1,2,3,4,5,6,7,8,9,10) ベクトルとなります。
また、この場合、ブーリアン値を持つ配列は必要な長さまでループしますから、 c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE) となります。

すなわち c(1:nrow(table))[c(F,T)] R は次のように理解されるでしょう。
c(1,2,3,4,5,6,7,8,9,10)[c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE)
で、TRUEにマッチするベクトル要素を順に取り出します。

例えば、3番目の要素すべてを取りたい場合は、次のように書きます。
c(1,2,3,4,5,6,7,8,9,10)[c(FALSE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE)
または略称
c(1:10)[c(F,F,T)]のようになります。


奇数要素ではTとFを入れ替えるだけ: c(1:nrow(table))[c(T,F)].

わざわざ細かい描写を書かずとも、ありがとうございます。確かに、いろいろなことが明らかになります。聞くのも恥ずかしいけど、決心してみるよ。問題の本質は次のようなものだ......。

学習ファイルは、ターゲットごとに同じ数のクラスで構成されています。つまり、24個の1と24個の0が対象になっているんです。今回もレシェトフみたいにしたい......。

学習テーブルを2つのテーブルに分割し、一方にはターゲットが1であるすべてのベクトルを、もう一方にはターゲットが0であるすべてのベクトルを配置しました。

ターゲット1のテーブルを取り、2つのサブテーブルを作成し、偶数番号のベクトルはTrain1へ、奇数番号はTrain2へ書き込む必要があります。

まず偶数番目のものに対して行います。

for(i in c(1:nrow(Qwe_true))[c(F,T)]){
  Train1[i,]<-Qwe_true[i,]
  }

しかし、その場合、Train1のテーブルにはc NA行が含まれ、24行中12行だけが偶数行であるため、Train1は12行で作成する必要があります。どうすればいいのか、まったくわからない......。

 

お願いします。

Rの場合、ベクトルを操作するという別の考え方が必要ですが、そうすればコードは非常にシンプルに書けます。プロは、自分でもわからないことを一行で書くし、私自身もサイクルを数行で書いてしまう。

Train1 <- rbind(Qwe[which(Qwe[, "target"]==1)[c(T,F)], ], Qwe[which(Qwe[, "target"]==0)[c(T,F)], ])
Train2 <- rbind(Qwe[which(Qwe[, "target"]==1)[c(F,T], ]), Qwe[which(Qwe[, "target"]==0)[c(F,T]), ])

段階的に-
which(Qwe[, "target"]==1) - ターゲット1を持つ行数
which(Qwe[, "target"]==1)[c(T,F)] - target1 を持つ行の数,1だけスキップされます.
Qwe[which(Qwe[, "target"]==1)[c(T,F)], ] - Qweから取得したテーブルで、ターゲット1にはスペースを入れています。
rbind(... , ...) - 2つのテーブルをマージする (ターゲット1およびターゲット0を含む)

 
Dr.トレーダー

お願いします。

Rの場合、ベクトルを操作するという別の考え方が必要ですが、そうすればコードは非常にシンプルに書けます。プロは1行で理解もできないことを書くし、私自身も数行のサイクルで書いてしまう。

Train1 <- rbind(Qwe[which(Qwe[, "target"]==1)[c(T,F)], ], Qwe[which(Qwe[, "target"]==0)[c(T,F)], ])
Train2 <- rbind(Qwe[which(Qwe[, "target"]==1)[c(F,T], ]), Qwe[which(Qwe[, "target"]==0)[c(F,T]), ])

ただのモンスターじゃん。2行で、心の負担が軽くなる。よし、これからも頑張るぞ...。ありがとうございます。

 
金曜日の夕方...頭の調子が悪い。一緒に理論を検証してみませんか・・・。 あなたのR-writing能力と私の問題設定能力(正確さ)があれば、30分もあれば全部確認できたのでは?時間はあるのか?Dr.トレーダー
 
いや、学び続けてください。質問があれば手伝うよ。
 

この2つのサンプルに、さらに2つのサンプルを追加する必要があります。

MLP1=Train1+Test(Train2)です.

MPL2=Train2+Test(Train1)です。

Test(Train2)+Test(Train1) を足せば、訓練区間全体の結果が得られ、この区間がテストとなり、各多項式に対応します。

今すぐは無理でも、時間をかけてもいいかもしれませんね。でも、30分だし、確認したんでしょう。ミラーをやりたいだけなんです。同じファイルを2通り教えます。そして、コントロールサイトに放り込んで、すべてを見ます。なんて言うんだ?

 

テーブルを結合するには、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にエクスポートすることができるかもしれません。

 

私が言いたいのは、レシェトフのモデルのようなことをやって、余計なものを加えて、普通の神経細胞を使って、何とか前のステップと混ぜて、レシェトフのようにうまくいくのを待つと、無駄な長丁場になるということで、私は絶対に賛成できないということなんです。

もし、Reshetovと同じ結果をRで得たいなら、モデルのJavaコードを全てRで書き直さなければならない。

しかし、代替案はたくさんあります。レシェトフよりもっといいものができれば、完璧だ。他に何もいらない、すべてが準備されているのだ。

理由: