<株進捗>8/9やったこと・・・学習モデルのデバッグ、プログラムバグ修正

今日やったことサマリ

  • 学習モデルはそれなりに動いている
  • 標準化のバグが予測おかしくしていた?

今日やったこと

学習モデルのデバッグ

昨日の続きです。
株が学習できない理由の絞り込み。
仮説1:学習がうまく行っていないんじゃないの? に対する検証として、2次関数〜4次関数が学習できているかを確かめました。
今日会社に行く前に処理を流してからでかけ、帰ったら終わっていたので確認しました。
4次関数

学習3000回/5000回
f:id:kurupical:20170809235332p:plain:w300f:id:kurupical:20170809235409p:plain:w300

学習10000回/20000回
f:id:kurupical:20170809235426p:plain:w300f:id:kurupical:20170809235501p:plain:w300

右往左往しながらも、20000回の時点では学習が結構な精度でできていました。 他のものも確認したのですが、概ねできている。

仮説1:学習がうまく行っていない? → うまく行ってる!

標準化バグ修正

仮説2:プログラムバグ
標準化処理を行うことで学習が早くなると言われており、私もそれを実装しているのですが そこにバグがありました。(今回のデバッグにより発見!) 標準化処理を行わないで株の学習を行うと学習スピードが異常に遅い(というか止まる)ので、標準化処理は必須です。

標準化処理はざっくり以下の順番でやるつもりでした。

1.学習
①学習対象データを取り込み標準化
②学習する

2.予想
①予想に使うデータを取り込み標準化(1日目〜100日目の終値
②101日目の終値を予想する
③2日目〜100日目と、②で予想した101日目の終値を使用し102日目の終値を予想する
④3日目〜100日目と、②③で予想した101日目〜102日目の終値を使用し103日目の終値を予想する


(以下略)

ですが、2①の実装もれにより、学習時は標準化されたデータで学習しているにも関わらず予測時は生データを使って学習していました。
ですので、2次関数でもご覧のありさま。
f:id:kurupical:20170810000435p:plain:w300
2②の予想がうまくいかないのでそれに引きずられて2③、2④…と予想がおかしくなっていくということでした。

ということで修正して再度2次関数を予測
f:id:kurupical:20170810000950p:plain:w300
予想が実際の値より先走っているように見えます。何回か行ったのですが結果はすべておなじ。

ひょっとすると予想の正しい順番は
2.予想
①予想に使うデータを取り込み標準化(1日目〜100日目の終値
②101日目の終値を予想する
②' 2日目〜101日目のデータを標準化
③2日目〜100日目と、②で予想した101日目の終値を使用し102日目の終値を予想する
③' 3日目〜102日目のデータを標準化
④3日目〜100日目と、②③で予想した101日目〜102日目の終値を使用し103日目の終値を予想する


なのかもしれません。
今日はここで力尽きてしまったので、次回は上記を実装して検証→OKなら株でリベンジ!!したいと思います。

雑記

学習モデルをさんざん疑っていろいろ改造したのですが結局プログラムの凡ミスというありさまでした。
かなり回り道をしてしまったのですが、そこでいろいろ勉強できたのでよかったかなと…。