Win11 WSL2 Ubuntu Python RNN
Win11 WSL2 Ubuntu Python RNN 概要
過去 Colab を使って Python RNN で 豪ドル/円チャ-ト を探求してみました。
その内容は
Python Colaboratory Ⅱ - 時系列ディ-プラ-ニングⅡ
から参照することができます。
しかしながら、その時使用した豪ドル/円の動きを格納した
CSV ファイルはたった 100本のデータしかないため精度に欠けていました。
しかし、たった100本のデータでもそれなりの予測はしてくれました。
今回はこのデータを50倍に増やし精度を上げたいと思います。
Win11 WSL2 Ubuntu Python RNN データ
豪ドル/円予測で使用するデータを準備します。
大容量の豪ドル/円日足データが必要です。
マネーパートナーズのサイトに入るとダウンロードできるのですが会員登録が必要です。
はじめての方へ
に行って登録してみて下さい。
ちょっと古いものになりますが、下記から大容量データ
mane_chart_go_long.csv
をダウンロードすることができるようにしました。
これを manep-w フォルダを作成し、
Linux/Ubuntu-22.04/home/yamada/public_html/manep-w/mane_chart_go_long.csv
として保存してください。
この中からデータ数と終値(売り)を抜き出します。
xl_df = pd.read_csv(
"/home/yamada/public_html/manep-w/mane_chart_go_long.csv", encoding="cp932")
Idx = xl_df.index
Close = xl_df["終値(売り)"].values
Win11 WSL2 Ubuntu Python RNN データ前処理
5000本もある大容量データを、訓練・検証・テストデータ に振り分けるのですが、どの程度の比率で分けるのかが大きな問題です。
小容量のデータの時は多少の重なりは気にせずなるべく大きなデータ量を割り当てていました。
でも今回は有り余るデータがあります。
大容量データがある場合、諸先輩は下記のような比率で分配するのが良いと言っています。
{訓練データ:検証データ:テストデータ = 8:1:1}
このアドバイスに準じると
4000:500:500
になるのですが、今回は訓練データをなるべく増やしておおよそ
{訓練データ:検証データ:テストデータ = 5000:100:100}
にしたいと思います。
全データは 5000本で訓練データに 5000 すべてを割当てるので、検証データとテストデータは一部重複することになります。
この辺は難しい問題ですね。
現状正解はないのが実情かと思います。
Win11 WSL2 Ubuntu Python RNN 3種データ作成
3種の timeseries_dataset デ-タを作成していきます。
3種の timeseries_dataset デ-タを作成
が参考になります。
3種データの用途は次のようになります。
- 訓練デ-タセット train_dataset
RNN モデルを訓練するためのデ-タセットです。
なるべく沢山のデ-タを作成します。
今回は、訓練デ-タセットと検証デ-タセットが一部重複します。
約5000本あるデ-タのすべてを訓練デ-タとして利用します。
- 検証デ-タセット val_dataset
モデルの評価をするためのデ-タセットです。
今回は全体の2%のデ-タのほぼ直近のものを使用します。
訓練デ-タセットと重複することになります。 - テストデ-タセット test_dataset
テストデ-タで訓練・学習度合いを確認します。
どのくらい目的値と乖離しているかみるためのものです。
今回は、全体の2%のデ-タの直近のものを使用します。
訓練、検証デ-タとの違いは、目的値がテストデ-タにはありません。
訓練デ-タセット作成
まず最初に、訓練デ-タセットを作成します。
keras モジュ-ルを import します。
from tensorflow import keras
train_dataset = keras.utils.timeseries_dataset_from_array( )
とし、括弧内に引数を設定すれば完了です。
- 第1引数元デ-タ raw_data
第1引数は元デ-タです。
Close の最初から最後までのデータを使用しますので
raw_data = Close.copy()
まずこの値(約5000個)を使って、平均(mean)及び標準偏差(std)を求めます。
mean = np.mean(raw_data)
print("Mean", mean)
raw_data -= mean
std = np.std(raw_data)
print("Std ",std)
各値を標準偏差値に変換
raw_data /= std
print("各標準偏差値")
print(raw_data)
この raw_data を第1引数元デ-タにします。 - 第 2~4 引数目的値 targets 他
第2引数は目的値 targets です。
目的値は、 シ-ケンス(20個のデ-タまとまり)の次にあります。
delay = sampling_rate × sequence_length
= 1 × 20
でした。よって、
targets = raw_data[delay:],
sampling_rate=sampling_rate,
sequence_length=sequence_length,
とします。 - 第5引数 batch_size
第5引数は batch_size です。
これがなかなか!
よく分かりません。
適当です。
バッチサイズとは1回に計算するデータの数のことなのですが、
最大値は全学習データ数、今回の例では 5000。
指定しなければデフォルトで 32。
一般的に2の累乗(2, 4, 8, 16 ・・・・)を指定しているようです。
バッチサイズを小さくすると、
局所解(もっと良い解が存在)に嵌りずらくなる。
使用するメモリ量が少なくなる。
収束も速くなる。
とのことなので、少し小さめが良いようです。
指定しないとデフォルトは32となります。
今回は
batch_size = 32
として
batch_size = batch_size,
とします。
訓練デ-タセット部分をまとめると、次のようになります。
from tensorflow import keras raw_data = Close.copy() mean = np.mean(raw_data) print("Mean", mean) raw_data -= mean std = np.std(raw_data) print("Std ",std) raw_data /= std print("各標準偏差値") print(raw_data) batch_size = 32 train_dataset = keras.utils.timeseries_dataset_from_array( raw_data, targets = raw_data[delay:], sampling_rate = sampling_rate, sequence_length = sequence_length, batch_size = batch_size, )
ここまでで、訓練デ-タセットが作成できました。
引き続き、検証デ-タセットを作成します。