学習パラメータの最適化
バックテストの実施期間により、学習パラメータであるトレーニングデータ数と、トレーニングデータと教師データのセット数を最適化してやる必要がありそうです。
バックテストの学習パラメータを最適化するスクリプトを作ってみました。
最適化といっても学習パラメータを総当たりで変更して一番資金上昇率が高い学習パラメータを算出するものですが。。
最適化実施後は、学習パラメータのベスト解をbackTestOptResultというディクショナリにして、backTestOptResult.pickleにバイナリファイルで保存しています。
pickleは変数をファイルとして保存してくれるモジュールです。事前にpipでインストールしておいてください。
pip install -U pickle
以下が最適化実施スクリプトです。
main関数内の一番最初で学習パラメータの変更範囲を設定します。
# --トレーニング用パラメータ #トレーニングデータ数 theNumberOfTrainData_Min=20 theNumberOfTrainData_Max = 40 # トレーニングデータと教師データのセット数 theNumberOfTrainAndKyoushiSet_Min=20 theNumberOfTrainAndKyoushiSet_Max = 40
トレーニングデータ数とトレーニングデータと教師データのセット数をそれぞれ20~40まで総当たりの組み合わせを実施します。
最適化終了後に、実施した全学習パラメータに対する資金上昇率を3Dグラフで出力する様にしています。
グラフ上をクリックして視点をぐりぐり動かせます。
上から見た図
ん〜。綺麗な曲面にはなっていませんね。パラメータをちょっとずらすと資金上昇率が結構変わっちゃいますね。
でもなんとなくそれぞれの学習パラメータが30付近にいい結果が出てくるみたいです。
暇な時に、学習パラメータを100ぐらいまで振ってみるのも面白いかもですね。かなり時間はかかりますが。。
最適解をbackTestOptResult.pickleに保存しているので、忘れた時はまた呼び出すことができます。
# -*- coding: utf-8 -*- import datetime import pickle with open("backTestOptResult.pickle", mode='rb') as f: backTestOptResult = pickle.load(f) print("最適化実施日: " + str(backTestOptResult["theDateOpt"])) print("トレーニングデータ数(最適解): " + str(backTestOptResult["theNumberOfTrainData_Opt"])) print("トレーニングデータと教師データのセット数(最適解): " + str(backTestOptResult["theNumberOfTrainAndKyoushiSet_Opt"]))