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 в процентах
そこに賭けるしかない。これは実践からです。オプティマイザーを使いながら、そういうことを観察しています。
しかし、彼のサイトのデモでは、5つのカラムと多数の行があります。
ここで、私が賭けに出ることにした。これは実践からです。オプティマイザーを使っていると、そういうことが見えてくるんです。
列数が行数より少ない場合、入力数はネットワーク多項式の条件サイズより小さくなる。
列と行の数が同じなら、入力数と多項式の大きさはほぼ同じになる。
列が行より多い場合、多項式のサイズは入力数より小さくなる。
つまり、列と行の数がほぼ等しいことが必要なのです。すると、十分な数の入力で多項式が得られ、その大きさは入力の数にほぼ等しくなる。
つまりはファイルが大きくなればなるほど、モデルはマルチパラメトリックになる。入力数と多項式のサイズが大きくなり、モデルがより賢くなったことがわかる。で、その上で。
また、同じファイルを複数回実行する場合、入力パラメータのセットは常に異なる。これは、分割の際にサンプルがランダムに分割されるためである。しかし、同じファイルを実行し、全く異なるモデルが得られたとしても、少なくとも同じように動作するはずです。これは、与えられたファイルの中にどの魚がいるのか、という問いに対する答えです。実行ごとに異なる場合は、データが出力と無関係であることを意味します。こんな感じで...。
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
しかし、彼のサイトのデモは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になります。そうなんです、何度もテストしているので......。
半々のサンプルですね。 今、他の機種と比較しているところです。
半々くらいでしょうか? 他の機種と比較しているところです
実は、トレーニングセットを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つある......。新方式の本質をまだ理解していない。