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

 
ミハイル・マルキュカイツ


そこに賭けるしかない。これは実践からです。オプティマイザーを使いながら、そういうことを観察しています。


しかし、彼のサイトのデモでは、5つのカラムと多数の行があります。
 
ミハイル・マルキュカイツ


ここで、私が賭けに出ることにした。これは実践からです。オプティマイザーを使っていると、そういうことが見えてくるんです。

列数が行数より少ない場合、入力数はネットワーク多項式の条件サイズより小さくなる。

列と行の数が同じなら、入力数と多項式の大きさはほぼ同じになる。

列が行より多い場合、多項式のサイズは入力数より小さくなる。

つまり、列と行の数がほぼ等しいことが必要なのです。すると、十分な数の入力で多項式が得られ、その大きさは入力の数にほぼ等しくなる。

つまりはファイルが大きくなればなるほど、モデルはマルチパラメトリックになる。入力数と多項式のサイズが大きくなり、モデルがより賢くなったことがわかる。で、その上で。

また、同じファイルを複数回実行する場合、入力パラメータのセットは常に異なる。これは、分割の際にサンプルがランダムに分割されるためである。しかし、同じファイルを実行し、全く異なるモデルが得られたとしても、少なくとも同じように動作するはずです。これは、与えられたファイルの中にどの魚がいるのか、という問いに対する答えです。実行ごとに異なる場合は、データが出力と無関係であることを意味します。こんな感じで...。

多項式は、すべてを取り出して、あるネットワークに3、別のネットワークに3を残すようにしか作れない。
 
elibrarius:
Polynomは全てを取り出して、片方のネットワークに3つ、もう片方に3つ残すだけの構造になっています。

コードをよく見てください。1、0、-1の3つの状態があります。つまり、これは2つのメッシュの結果で、トレードにシグナルを 送るため......。
 
ミハイル・マルキュカイツ


カップリング係数って何?使用した入力のリストですが、各多項式の前に正規化があり、8つの入力が記述されていますので、ファイルの下の方を見てください。

//変数 x0: Del

//変数 x1: Del1

//変数 x2: VDel

//変数 x3: VDel1

//変数 x4: VDel6

//変数 x5: ST5

//変数 x6: VAD11

//変数 x7: VVolum4

3つの入力はどこにあるのか?8人いるとき。
x0...x7 = p0...p7 - 上の式から(名前が違うだけ)、この式はReshetovのニューロンについての論文から引用されたものです。そして、この式によれば、入力はA、B、Cの3つだけである。
 
マキシム・ドミトリエフスキー

しかし、彼のサイトのデモは5カラムと大量の行があります。

彼のデモファイルがわかったことです・・・・・・。データを繰り返すということがありますが、5つの列があり、その各行が3つの値1-1il0のうちの1つだけを記録することができると想像してください。この場合、行が重複してしまい、データセットが2倍になってしまいます。単純に列をコピーするだけで、一般化レベルは90%まで大きく伸びますが、残念ながらREBUILDINGになります。そうなんです、何度もテストしているので......。
 
エリブラリウス
x0...x7 = p0...p7 - 上の式から(名前が違うだけ)、この式はReshetovのニューロンについての論文から引用されたものです。そして、この式によれば、入力はA、B、Cの3つだけである。

そう、そのRNNの記事は、このオプティマイザーとは全く関係なく、全く別の仕事なのだ、わからないのか?オプティマイザーの内部ではこの記事の内容が使えるのですが、どちらかというと全く別の作品です......。
 
ミハイル・マルキュカイツ

彼のデモファイルがわかったことです......。5つの列があり、各行が3つの値1-1il0のうちの1つだけを含むことができると想像してください。この場合、行が重複してしまい、データセットが2倍になってしまいます。行をコピーするだけで、一般化レベルは90%まで大幅に向上しますが、残念ながらREBUILDINGになります。そうなんです、何度もテストしているので......。

半々のサンプルですね。 今、他の機種と比較しているところです。
 
え、どこでパワーをもらえるのか...。more power :-)
 
マキシム・ドミトリエフスキー

半々くらいでしょうか? 他の機種と比較しているところです


実は、トレーニングセットを2つのサンプルに分けるのは、とても厄介なんです...。過去から未来までの時間という概念がない。分類するために必要なのではなく、近似するために必要なのだ。

しかし、この分割も非常に厄介な方法で行われます。ここにヒントがあります。出力変数の0と1の数が等しくなるようにすることが重要です。そして、割り算は分かりやすく進み、数が等しくない場合は足し算に進む。一般的に、どのような場合にそこに分割する巧妙な方法...

 
ミハイル・マルキュカイツ

コードをよく見てください。1、0、-1の3つの状態があります。つまり、2つのグリッドで、トレードのためのシグナルを発信するための結果なんですね......。

それぞれのネットの仕組みを別々に考えているんです。そして、その出力から何を得るかは、好みの問題である)

ところで、あなたのファイルからコードを見ると、記事のようにではなく、別の式があります、すなわち、ありません。

double RNN(double p1,double p2,double p3)
  {
//--- вероятности для правил из базы знаний экспертной системы
   double y0 = x0; // Вероятность правила №0 в процентах
   double y1 = x1; // Вероятность правила №1 в процентах
   double y2 = x2; // Вероятность правила №2 в процентах
   double y3 = x3; // Вероятность правила №3 в процентах
   double y4 = x4; // Вероятность правила №4 в процентах
   double y5 = x5; // Вероятность правила №5 в процентах
   double y6 = x6; // Вероятность правила №6 в процентах
   double y7 = x7; // Вероятность правила №7 в процентах

//--- база знаний, состоящая из набора взаимоисключающих правил
   double probability=
                      (1.0 - p1) * (1.0 - p2) * (1.0 - p3) * y0 + // Правило №0
                      (1.0 - p1) * (1.0 - p2) * p3 * y1 +         // Правило №1
                      (1.0 - p1) * p2 * (1.0 - p3) * y2 +         // Правило №2
                      (1.0 - p1) * p2 * p3 * y3 +                 // Правило №3
                      p1 * (1.0 - p2) * (1.0 - p3) * y4 +         // Правило №4
                      p1 * (1.0 - p2) * p3 * y5 +                 // Правило №5
                      p1 * p2 * (1.0 - p3) * y6 +                 // Правило №6
                      p1 * p2 * p3 * y7;                          // Правило №7

//--- конвертируем проценты в вероятности
   probability=probability/100.0;

//--- возвращаем результат в виде вероятности
   return(probability);
  }

а

double getBinaryClassificator1(double v0, double v1, double v2, double v3, double v4, double v5, double v6, double v7) {
   double x0 = 2.0 * (v0 + 1189.0) / 2047.0 - 1.0;
   double x1 = 2.0 * (v1 + 810.0) / 2247.0 - 1.0;
   double x2 = 2.0 * (v2 + 1636.0) / 2155.0 - 1.0;
   double x3 = 2.0 * (v3 + 558.0) / 1252.0 - 1.0;
   double x4 = 2.0 * (v4 + 139.0) / 494.0 - 1.0;
   double x5 = 2.0 * (v5 + 74.97643) / 144.15451 - 1.0;
   double x6 = 2.0 * (v6 + 1026.56016) / 1938.48639 - 1.0;
   double x7 = 2.0 * (v7 + 4167.0) / 7074.0 - 1.0;
   double decision = 3.162907268170426 * sigmoid(x0)
  -1.0554004772410066 * sigmoid(x1 + x2 + x3)
  + 3.8921930574940347 * sigmoid(x0 + x1 + x4)
  -1.3775531643479957 * sigmoid(x1 + x2 + x3 + x4)
  -0.44704575810784447 * sigmoid(x0 + x5)
  -0.012703915477316044 * sigmoid(x0 + x1 + x5)
  -7.231026668467576 * sigmoid(x2 + x5)
  -0.059339966683175004 * sigmoid(x2 + x4 + x5)
  -2.786314588867378 * sigmoid(x0 + x1 + x2 + x4 + x5)
  + 2.1339726561913768 * sigmoid(x0 + x1 + x6)
  -0.49562529077183975 * sigmoid(x0 + x4 + x6)
  + 5.2147434454399475 * sigmoid(x0 + x3 + x4 + x6)
  -2.890797352663095 * sigmoid(x5 + x6)
  + 0.10933021175693726 * sigmoid(x0 + x5 + x6)
  -1.6844056248405446 * sigmoid(x1 + x2 + x5 + x6)
  -0.18093137034202272 * sigmoid(x1 + x3 + x5 + x6)
  + 0.6607987033451893 * sigmoid(x1 + x7)
  -1.8854921735476415 * sigmoid(x0 + x1 + x3 + x7)
  -1.1169615655906233 * sigmoid(x2 + x5 + x7)
  -0.6844731589452674 * sigmoid(x4 + x6 + x7)
  -0.4231236774571158 * sigmoid(x1 + x2 + x3 + x4 + x6 + x7)
  + 5.763615625891075 * sigmoid(1.0 + x1 + x2 + x3 + x5)
  -0.3138985187519697 * sigmoid(1.0 + x0 + x1 + x4 + x5)
  -1.8910224663455044 * sigmoid(1.0 + x1 + x3 + x4 + x5)
  + 2.1204658352467995 * sigmoid(1.0 + x2 + x3 + x4 + x5)
  + 6.219005597826903 * sigmoid(1.0 + x2 + x3 + x4 + x6)
  -3.740916662914772 * sigmoid(1.0 + x0 + x1 + x3 + x4 + x5 + x6);
   return decision;
}

どうやら著者は数式を修正したようです

だから、(元の計算式のように)3つの入力はないかもしれないが、それでも8つある......。新方式の本質をまだ理解していない。

理由: