トレーディングにおける機械学習:理論、モデル、実践、アルゴトレーディング - ページ 754 1...747748749750751752753754755756757758759760761...3399 新しいコメント Mihail Marchukajtes 2018.03.16 15:52 #7531 Dr.トレーダーニューロニクスの例はすでにここに載せてあるので、適当なものを探して、あなたのデータ用に(委員会も入れて)やり直します。入門編は書かないが、コードにコメントを増やしていく。 すみません、変数with(F,T)の意味がよくわかりません ループの中で for(i in c(1:nrow(table))[c(F,T)]){ ..... table[i,] ..... } つまり、このループはテーブルの偶数行にかかるのですが、では、奇数行にかかるようにするにはどうすればいいのでしょうか? Dr. Trader 2018.03.16 16:14 #7532 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)]. Mihail Marchukajtes 2018.03.16 16:38 #7533 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行で作成する必要があります。どうすればいいのか、まったくわからない......。 Dr. Trader 2018.03.16 17:05 #7534 お願いします。 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を含む) Mihail Marchukajtes 2018.03.16 17:14 #7535 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行で、心の負担が軽くなる。よし、これからも頑張るぞ...。ありがとうございます。 Mihail Marchukajtes 2018.03.16 17:30 #7536 金曜日の夕方...頭の調子が悪い。一緒に理論を検証してみませんか・・・。 あなたのR-writing能力と私の問題設定能力(正確さ)があれば、30分もあれば全部確認できたのでは?時間はあるのか?Dr.トレーダー Dr. Trader 2018.03.16 17:33 #7537 いや、学び続けてください。質問があれば手伝うよ。 Mihail Marchukajtes 2018.03.16 17:37 #7538 この2つのサンプルに、さらに2つのサンプルを追加する必要があります。 MLP1=Train1+Test(Train2)です. MPL2=Train2+Test(Train1)です。 Test(Train2)+Test(Train1) を足せば、訓練区間全体の結果が得られ、この区間がテストとなり、各多項式に対応します。 今すぐは無理でも、時間をかけてもいいかもしれませんね。でも、30分だし、確認したんでしょう。ミラーをやりたいだけなんです。同じファイルを2通り教えます。そして、コントロールサイトに放り込んで、すべてを見ます。なんて言うんだ? Dr. Trader 2018.03.16 18:26 #7539 テーブルを結合するには、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にエクスポートすることができるかもしれません。 Dr. Trader 2018.03.16 18:35 #7540 私が言いたいのは、レシェトフのモデルのようなことをやって、余計なものを加えて、普通の神経細胞を使って、何とか前のステップと混ぜて、レシェトフのようにうまくいくのを待つと、無駄な長丁場になるということで、私は絶対に賛成できないということなんです。 もし、Reshetovと同じ結果をRで得たいなら、モデルのJavaコードを全てRで書き直さなければならない。 しかし、代替案はたくさんあります。レシェトフよりもっといいものができれば、完璧だ。他に何もいらない、すべてが準備されているのだ。 1...747748749750751752753754755756757758759760761...3399 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ニューロニクスの例はすでにここに載せてあるので、適当なものを探して、あなたのデータ用に(委員会も入れて)やり直します。入門編は書かないが、コードにコメントを増やしていく。
すみません、変数with(F,T)の意味がよくわかりません ループの中で
つまり、このループはテーブルの偶数行にかかるのですが、では、奇数行にかかるようにするにはどうすればいいのでしょうか?
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)].
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へ書き込む必要があります。
まず偶数番目のものに対して行います。
しかし、その場合、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を含む)
お願いします。
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行で、心の負担が軽くなる。よし、これからも頑張るぞ...。ありがとうございます。
この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で書き直さなければならない。
しかし、代替案はたくさんあります。レシェトフよりもっといいものができれば、完璧だ。他に何もいらない、すべてが準備されているのだ。