Pythonと機械学習

Pythonも機械学習も初心者ですが、頑張ってこのブログで勉強してこうと思います。

学習パラメータの最適化

バックテストの実施期間により、学習パラメータであるトレーニングデータ数と、トレーニングデータと教師データのセット数を最適化してやる必要がありそうです。

バックテストの学習パラメータを最適化するスクリプトを作ってみました。
最適化といっても学習パラメータを総当たりで変更して一番資金上昇率が高い学習パラメータを算出するものですが。。

最適化実施後は、学習パラメータのベスト解を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グラフで出力する様にしています。
グラフ上をクリックして視点をぐりぐり動かせます。

f:id:darden:20160806134451p:plain

上から見た図
f:id:darden:20160806134510p:plain

ん〜。綺麗な曲面にはなっていませんね。パラメータをちょっとずらすと資金上昇率が結構変わっちゃいますね。

でもなんとなくそれぞれの学習パラメータが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"]))