4.1.1の評価パラメタ
自分で学習させたものではなく、Bonanza 4.1.1に入っているfv.binの評価パラメタ値を調べる。(4.0.3の場合については、2009/03/20に書いている。)
KPP 最小値: -11779, 最大値: 8856, 平均値:0.05, 標準偏差: 73.29
KKP 最小値: -3251, 最大値: 4911, 平均値: 0.55, 標準偏差: 11.72
KPPの場合、値の絶対値が229以内に99%, 413以内に99.5%, 1004以内に99.9%が含まれている。
KKPの場合、値の絶対値が159以内に99%, 313以内に99.5%, 741以内に99.9%が含まれている。
この結果から、4.0.3のときよりも値の絶対値が大きい側に全体的に広がっているようだ。この原因は、学習時の探索を深くした(1から2?)ことにあるのだろうが、そのメカニズムまではわからない。
0付近の値の分布率は、以下のようになった。
value | 4.0.3 ratio | 4.1.1 ratio |
---|---|---|
-5 | 0.11% | 0.08% |
-4 | 0.17% | 0.10% |
-3 | 0.51% | 0.12% |
-2 | 5.59% | 3.25% |
-1 | 21.43% | 18.13% |
0 | 34.76% | 35.43% |
1 | 26.12% | 29.19% |
2 | 8.12% | 8.78% |
3 | 0.65% | 0.12% |
4 | 0.19% | 0.10% |
5 | 0.11% | 0.08% |
4.0.3の場合も同様だが、プラスとマイナスの値の分布の非対称が目立つ。理想的には対称な分布になるべき。
この原因は、関数rparam()にあるのではないか?
v = 0でdv = 0のときには、v += istepを実行するようになっているので、第二フェーズの最後のstepでそうなれば必ずプラスになる。
rparam( short *pv, float dv ) { int v, istep; istep = brand(); istep += brand(); v = *pv; if ( v > 0 ) { dv -= (float)FV_PENALTY; } else if ( v < 0 ) { dv += (float)FV_PENALTY; } if ( dv >= 0.0 && v <= SHRT_MAX - istep ) { v += istep; } else if ( dv <= 0.0 && v >= SHRT_MIN + istep ) { v -= istep; } else { out_warning( "A fvcoef parameter is out of bounce.\n" ); } *pv = (short)v; }