機械学習, Rails, Androidが好きです - プログラマdogwood008のライフハック

最近のマイブームは機械学習, Ruby on Rails, Android、中でも機械学習を使った金融商品の自動取引に興味があります。

Deep Learning, TensorFlow, Keras, DQN を使ってFXの自動取引をする その6

今回は試しに学習させてみたところ、途中でエラーが出て止まってしまった。再帰的に直前の存在する日時インデックスを取得するメソッドにバグがあったので、この機会にもっとシンプルな実装へ変更した。

(前略)
[2017-04-01 15:05:29,613] before
2010-09-04T16:01:00.000000+0000
[2017-04-01 15:05:29,613] 2010-09-04T16:01:00.000000+0000
1283616000.0
[2017-04-01 15:05:29,613] 1283616000.0
after
[2017-04-01 15:05:29,614] after2010-09-04T16:01:00.000000+0000
[2017-04-01 15:05:29,614] 2010-09-04T16:01:00.000000+0000
1283616060.0
[2017-04-01 15:05:29,614] 1283616060.0
Fatal Python error: Cannot recover from stack overflow.

Current thread 0x00007f451c9c2700 (most recent call first):
  File "/opt/conda/lib/python3.5/site-packages/pandas/core/base.py", line 877 in _values
  File "/opt/conda/lib/python3.5/site-packages/pandas/indexes/base.py", line 1305 in <lambda>
  File "/opt/conda/lib/python3.5/site-packages/pandas/indexes/base.py", line 1084 in is_monotonic_increasing
  File "/opt/conda/lib/python3.5/site-packages/pandas/tseries/frequencies.py", line 755 in __init__
  File "/opt/conda/lib/python3.5/site-packages/pandas/tseries/frequencies.py", line 724 in infer_freq
  File "/opt/conda/lib/python3.5/site-packages/pandas/tseries/base.py", line 303 in inferred_freq
  File "/opt/conda/lib/python3.5/site-packages/pandas/tseries/index.py", line 1466 in _get_string_slice
  File "/opt/conda/lib/python3.5/site-packages/pandas/tseries/index.py", line 1414 in get_loc
  File "/opt/conda/lib/python3.5/site-packages/pandas/tseries/base.py", line 234 in __contains__
  File "/opt/conda/lib/python3.5/site-packages/pandas/core/indexing.py", line 1410 in _has_valid_type
  File "/opt/conda/lib/python3.5/site-packages/pandas/core/indexing.py", line 1482 in _getitem_axis
  File "/opt/conda/lib/python3.5/site-packages/pandas/core/indexing.py", line 1312 in __getitem__
  File "Keras-RL_DQN_FX.py", line 60 in get_last_exist_datetime_recursively
  File "Keras-RL_DQN_FX.py", line 65 in get_last_exist_datetime_recursively
  File "Keras-RL_DQN_FX.py", line 65 in get_last_exist_datetime_recursively
  File "Keras-RL_DQN_FX.py", line 65 in get_last_exist_datetime_recursively
  File "Keras-RL_DQN_FX.py", line 65 in get_last_exist_datetime_recursively
  File "Keras-RL_DQN_FX.py", line 65 in get_last_exist_datetime_recursively
(後略)

現在の問題点その4

試しに学習させたところ、 HistData.get_last_exist_datetime_recursively() に 2010-09-04T16:01:00 を与えるとスタックオーバーフローで終了するバグがあった。

現在の問題点その4に対する解

もっとシンプルな実装に変更する。

github.com

Deep Learning, TensorFlow, Keras, DQN を使ってFXの自動取引をする その5

現在の問題点その3

一つ心配事は、土日等休場日も学習すべきかどうかである。おそらく、48時間全く値動きがないことを学習しても仕方ないので、これは飛ばして良いと思う。問題はその次の数分の欠測である。欠測の間は値動き無しとして学習するのが良いのか、純粋に経過時間(分)で学習するのが良いのかは、明確な答えを持っていない。一旦、閾値までの間値動きがなければ、次の値動きまでスキップするようにしようと思う。

現在の問題点その3に対する解

時間のある時にきちんとチェックする必要があるが、UdacityのMachine Learning for Tradingでは、休場中を特別な扱いはしていなかったような記憶がある(間違っていたら修正する必要がある)。したがって、メソッド is_datetime_diff_in_threshould() を作ったが、今は使わないでおくことにする。

github.com

170331 トレンドニュース

Creating and Starting a Preemptible Instance  |  Compute Engine Documentation  |  Google Cloud Platform

学習モデルを1エポック毎または学習結果が良くなるエポック毎にアウトプットしておいて、Soft Off信号を受け取ったらそれをGCSなりS3なりに置けば良いか https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance#handle_preemptioncloud.google.com

Container Engine でプリエンプティブ VM を使用する  |  Container Engine  |  Google Cloud Platform

プリエンプティブVM=AWSのスポットインスタンス https://cloud.google.com/container-engine/docs/preemptible-vm?hl=jacloud.google.com

GoogleのクラウドプラットホームはプリエンプティブルVMの料金を最大33%値下げ | TechCrunch Japan

jp.techcrunch.com

170330 トレンドニュース

脱「経験頼み」酪農でAI活用を|NHK 北海道のニュース

www3.nhk.or.jp

How to Check-Point Deep Learning Models in Keras - Machine Learning Mastery

学習の途中経過をチェックポイントとして保存し、後から読み込んで利用する方法。AWSのスポットインスタンスを使って、インスタンスが死ぬ直前にHDF5ファイルを吐けば安価で学習を回せるか? machinelearningmastery.com

CPU/GPU/AWSでのTensorflow実行速度比較 - Qiita

qiita.com

AWS GPU TensorFlow Docker · fluxcapacitor/pipeline Wiki · GitHub

github.com

GCP GPU Tensorflow Docker · fluxcapacitor/pipeline Wiki · GitHub

github.com

Google Cloud Datalab notebook を GCP で実行 – TensorFlow

http://tensorflow.classcat.com/2016/10/25/google-cloud-datalab-notebook-on-gcp/tensorflow.classcat.com

Distributed TensorFlow を Google Cloud Platform で動かしてみる - Qiita

qiita.com

This fintech startup uses machine learning to give international students credit cards

面白い試み thenextweb.com

Deep Learning, TensorFlow, Keras, DQN を使ってFXの自動取引をする その4

現在の問題点その3

一つ心配事は、土日等休場日も学習すべきかどうかである。おそらく、48時間全く値動きがないことを学習しても仕方ないので、これは飛ばして良いと思う。問題はその次の数分の欠測である。欠測の間は値動き無しとして学習するのが良いのか、純粋に経過時間(分)で学習するのが良いのかは、明確な答えを持っていない。一旦、閾値までの間値動きがなければ、次の値動きまでスキップするようにしようと思う。

問題点その3へのアプローチ

存在しないデータフレームのインデックス(日時)が与えられた時、例外のエラーを吐く代わりに、(与えられた日時から見て)直近の未来のインデックス(日時)とその時の値群を返すメソッド get_next_exist_dateframe()HistData クラスに作成。これで欠測値をスキップして値を取得できる。

この後の予定

スキップするにしても、2分スキップするのと2日スキップするのとでは意味合いが異なってくる。閾値以下であればスキップし、そうでなければスキップせず「値動きがない」状態を学習するようにしてみる。どっちが良いのかはわからないので、一度動かしてみて、結果を見てフィードバックするのが良いか。

github.com