頭と尻尾はくれてやる!

iOSアプリなどの開発日記です


SceneKitで頂点情報を取得する

SCNNodeオブジェクトの頂点情報が欲しかったのでどうすれば取得できるのか調べてみた。もちろん(?)Objective-C。

collada - Extracting vertices from scenekit - Stack Overflow

↑こちらのページがとても参考になった。コード書こうかと思ったけどほぼリンク先のままなのでやめとこ。

Blenderで作成したオブジェクトをdaeファイルで出力し、それに対し、boneを表示し上記の方法で得られた頂点を表示してみた。boneとの位置関係もあってる。

SceneKitで頂点を表示

boneとの位置関係が合わずdaeファイル内にそういう項目でもあんのかなあ?とさんざんはまったんだが、Blenderでオブジェクトとboneの親子関係を解消、位置を設定し直して再度親子関係を設定し直したらいけた。
スポンサーサイト






(続)機械学習で株価予測の結果

機械学習で株価予測の結果
↑この続き。内部的にはver2.1。前のは過去5日分で予測したんだけど、さっぱりだったので今回は過去90日で予測する、というように単にデータを大きくしただけ。なのでまあ同じように残念な結果になっちゃうんだろうなあ、、、と思いつつもやっぱり確認しないとスッキリしないのでやってみた。
データが大きくなったことで学習時に時間がかかるようになるのは仕方ないとして、テストデータに対する評価でメモリ不足でMacが固まってしまう事態に至ってしまった。コードを修正して1ヶ月ごとに成績を出すようにするなどして対応。

従来と同じように日経225銘柄の
学習データ:1991年1月から2017年6月末
テストデータ:2017年7月から2017年12月末
のデータに対しCNNでやってる。フレームワークはTensorFlow。
学習時の総データ数916,300個、今回は学習時のバッチサイズも小さくしたので約9,000ステップで1epoch。
学習がサチったかなあ、というところからテストデータに対して評価してみて、さらに学習させたら評価の結果がどう変わるか?というのを確認してみた。

結果をstep数、月ごとで見るとこんな感じ。

TensorBoardによる損失関数の変化

月ごとの利率

数字はそれぞれ1ヶ月あたりの利率(%)。1日じゃないよ、、、orz
学習が進むと良くなったり悪くなったりと安定しないところがある。
ダメだね、こりゃ、、、

今回、メモリ不足対応で仕方なく月ごとの結果で見るようにしたんだけど、、、
最初の頃は
もしかして学習データの終わり(2017年6月末)から離れるほど成績が悪くなるのか?データに年月日の項目も入っているし、、、
学習データの終わりの翌月だけでも使えればいいんだが、、、
なんて思ってたんだが、結局は7月でもマイナスになるくらいで安定しないし、利率も低く予測できてるとは言えない。プラスのところもあるがたまたまなんだろう。

ということで今回のはここで終わり。
深層学習を用いた株価予測の分析
↑データを画像化したCNNなんてのもあるみたいだけど、その前にRNNでやってみようかと思案中。


機械学習で株価予測の結果

機械学習で株価予測、数日かけてデータセットを作成し、学習させてみた(内部的にはver2)。
機械学習で株価予測やってみたが
↑ver1はこんな感じ。

学習過程(Tensorboard)

↑ちゃんと損失関数の値が減ってるやん、、、すごいね、機械学習!すごいね、TensorFlow!

なお銘柄数は225種類、学習時のデータ数は 937,046個、テスト用のデータ数は 27,900個(2017年の後半半年分)。

最終122エポック程度学習させ、テストデータに対する評価。

評価結果1

正解率は49.5%だけどこれは気にしない。期待値の高いのにbetし続けるということなので。
肝心の利率はというと、、、
半年で57%!1年で倍になるやん!!複利で運用すれば、、、!!!
124日間、225銘柄全てにbetした場合の計算なので、1銘柄100万としても2億円ちょい必要か、そりゃ無理だから期待値の高い銘柄選択するようにしないとな。儲けたお金で何しよ〜

などと夢が広がりそうな数字ですが、、、

いや、実はこれ、ただのまぐれの数字。

評価結果2

↑ほんの1000ステップ前は -37%でした。あはははは、、、orz
こういうよかったり、悪かったりというのを繰り返してたので、やはり株価の動きというのは捉えどころがないものなのですねえ(むしろ学習が進むことに感動を覚えたりする今日この頃)。

学習の過程で以前と同じく、学習用データとテスト用データに対する損失関数の値に開きがでてくる、というのが確認できたので、やっぱり過学習ってことになるのかな?NNの表現力に対してデータ数が少ないとは思わないけど、1つのデータが小さいかもしれない(過学習の要因になる?)ので次バージョンはそのあたりを修正しようかと検討中。


解答の範囲検討

機械学習で株価予測、最初1銘柄でやってみたらさっぱりだった(内部的にはこれをver1)ので今回(ver2)いくつか変更してる。その一つが解答の範囲の見直し。
機械学習で株価予測やってみたが
↑ver1ではここに書いてあるようにテキトウに区切って9分割してた。
0 +6%超
1 +4%〜+6%
2 +2%〜+4%
3 0%〜+2%
4 変化なし
5から8はマイナス側の9分割

さすがにテキトウなのはよろしくないのかな?と思ってまずはばらつきぐらいを確認してみた。
なお、上記の記事にも書いてるように日計りを想定しているので
終値 / 始値
の値がどうなの?というのを確認したい。なお、わかりやすいように変化なしの場合が0になるよう-1しておく。これをrateとしとく。
rate = 終値 / 始値 - 1
対象銘柄は現在日経平均に採用されてる225銘柄。

株価変化のばらつき1
↑横軸がrate、縦軸がデータ数なんだけど、横幅をいくつにするかで見え方はどうにでもなる、、、

株価変化のばらつき2
↑幅を広げるとこんな感じにもなる。
なお、全データ数は1,681,289個、うち変化なしが152,567個(9.07%)。

解答分割方法
↑こんな感じで9分割したい。変化なし(4番)は数が決まってるのでどうしようもないんだけど、他はなるべく同じような個数になるようにしたい。図で言えば同じ面積になるように決める。
標準偏差(SD)を求めておいて、正規分布とみなして標準正規分布表を使えばおおよそどう区切れば同じような個数になるかわかる。
SD = 0.0199
L1 = SD * 0.32
L2 = SD * 0.675
L3 = SD * 1.04

実際に分けてグラフで確認してみる。

分割結果1
↑うーん、なんか差が大きいやん。気に入らねえってことで、、、

分割結果2
↑結局手動で微調整して決定した。
最終的には下のような範囲(5から8はマイナス側)で9分割することにした。
0 +3.1%超
1 〜+1.42%
2 〜+0.775%
3 〜+0.31%
4 変化なし

ver1の区切り方がいかにテキトウだったか、だな。


  TopPage  



Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.