俺にも執筆活動させろボケ

ボートで畳み込み

あまりにもランダムの壁すら超えない、

というかまあ見た目の問題で超えてはいる。

f:id:nemui3900:20181005115035j:plain

左から123,124,125,126,132,134なので

予想がイン寄りに傾ければ自ずとACCも上がるのだ。

しかしきれいに落ちていくかというとそうでもなく多くの12より132のほうが強いという特徴的な形をしている。

つまりは畳み込みを使うべきだと思うわけで

じゃあ畳み込みを使えるデータの形状ってどんなものなのかっていうと

ボートレース場データ|BOAT RACE オフィシャルウェブサイト

まさにこれなのでこれをベースに特徴量を考えていこうと思う。

まずは場ごとの四季折々のデータをDBにスクレイピングして入れるところから

ここで別VPCと自宅PCで同じコードでうまくpd.io.html.read_html(url)

が動作しない問題に直面した、家のPCでやるか。環境構築の問題なので先送りで。

ひたすらDBに書き込んで取れたのでベクトル化を進める。

f:id:nemui3900:20181005141743j:plain

四季*24のレース場で結構な量あってだるかったなあ。

 

ディープラーニングを始めようと思う人達へ

ある程度ブームは過ぎてそろそろ冬の時代を感じるAIことディープラーニングですが。

そんなAIをやってみようという特異な人たちに送る僕からのアドバイス

数学的要素は本当のところいらないので別に勉強しなくていいです。

しかし式の意味だけは理解している必要があります、

0+0=0

この式を見たときに左が足し算で右が答え

f(x)=y

この式を見たときは左が関数で右が答え、曲線か直線かは知らないがyが連続していく。

総和だとか外積だとか内積だとかが式として浮かんでるとやりやすい。必要なのはそのくらいの浅い知識。

まあそんなことも本当はどうでも良くて解きたい問題と説明できるデータがたくさんあるとこと、

そしてその問題とデータが魅力的ならばみんなが助けてくれる可能性が上がる。

つまりいきなりディープラーニング勉強しても続かないので

問題とデータを持った状態でいることのほうがもっとも重要。

解き方なんて後からいくらでも探せる、試せるので。

スクレイピングとかSQLとかpandasとnumpyを理解することが、

説明変数をうまく作ることがディープラーニングの本質なんじゃねえかと思う次第です。

逃亡生活(ボート)part9

120のカテゴリに使うニューロンの数の目安はどんくらいかなあ。

まあいい

まずは単純なホールドアウト法でいこう

12:4:2(バックテストで残しとく)

f:id:nemui3900:20181001134239j:plain

やっぱり512にした

epochs=3000で試す。

やってみないとよくわからないことが多すぎるのでよくわかってない間にトレーニング回して調べて試したいことをためとくべきだなあ。

チューニングできるようになるまでなかなか遠そうだ。

逃亡生活(ボート)part8

取れたには取れたが当地勝率と実際問題かぶっていて、

これを入れるのはどうかという考えが出てきたのでスルーしておく。

年齢・体重まできたので平均STと全国と当地の勝率二連率三連率。

そしてモーターとボート、チルト。

FとLは一回入れずに回してみる。

特徴量のndarrayとラベルのndarrayが出来上がった。

ここまでクソ長かった、まあ主に不勉強によるところがでかいが。

ということで保存しておこう

次回いよいよガチ目のNNを回すの巻

逃亡生活(ボート)part7

ようやくだらだら取得していたレコードが18万を超え、

そろそろビッグデータの扱いについて考えないといけない。

いちばん大事なのって実用性だと思う、

ということで一回.read_sqlで全部取得してみてどれくらいかかるか見てみる。

2分ぐらいで終わるわ、すごいすごいpandas。

f:id:nemui3900:20181001083102j:plain

なんか102件ぬけてますけど?

まあいいやこれで。

とりあえずこれで一回ガチでどの程度予想できるかやってみるか。

使う特徴量を選別→ndarrayに前処理して追加していく

最初はラベルのoheからやる、わかりやすいから。

f:id:nemui3900:20181001085743j:plain

1着2着しかないデータがあるっぽいのでそのレコードを除外する。

正規表現で除外するのが多分一般的かと思うがめんどくさいのでできなかったIDを返す関数にしよう。

f:id:nemui3900:20181001091515j:plain

77個あった

これをインデックスでドロップしていく

ac.drop(de, axis=0)

単にこれでよかった、払い戻し金とかぶったらとか考えてしまったが多分文字列だったはず。

年齢は前回やっているので、次は体重。

ターゲットと年齢体重まで入ったので

ここで一旦blogを閉じる

 

次回

場のデータ

ボートレース場データ | BOAT RACE オフィシャルウェブサイト

ここに過去3ヶ月間の枠ごとの勝率があるのでぶち込む

 

逃亡生活(ボート)part6

いまやっと17万レコードまで取れた。

もっとリザルトがわかるように可視化を頑張っていかないといけないなあ。

つーことでここを読む

コールバック - Keras Documentation

www.slideshare.net

なるほど、前回のよくわからんモデルをACCとかLOSSをTensorBoradで見てみるか。

No graph definition files were found.

なるほど、わからん。

今日は食いすぎたので漫画でもよんでゴロゴロしてあした頑張る方向で。

追記:相対パスで指定できないだけだった、絶対パスでログの場所を指定すると表示される。前もおんなじことした気がするなあ。完全に忘れてたけど。

逃亡生活(ボート)part5

正解のラベル作るところから

"1-2-3"というラベルのままではhot-oneにできないので

pandasの機能で文字列を分割する。

前回は一つのラベルでやってしまったので一括でやっていく

note.nkmk.me

馬鹿すぎてえらい時間かかったわ、なんで3回も4回もタプルにしようとしたりしてるんだろう。疲れてるのよモルダー。

ということでblog作業をひたすら放置していきなり結果

モデルはこんな感じ

f:id:nemui3900:20180928201905j:plain

f:id:nemui3900:20180928201923j:plain

結果ランダムより悪いね、過学習ってやつか。いや違う20しかテスト用に用意してないだけでランダムと同じだわ。

次回から年齢は入れなくて良さそうだけどどうでしょうねえ。

流石に疲れすぎててblogやってる場合でもない気がするのでだらだらします。