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種データの用途は次のようになります。

  1. 訓練デ-タセット train_dataset

    RNN モデルを訓練するためのデ-タセットです。
    なるべく沢山のデ-タを作成します。
    今回は、訓練デ-タセットと検証デ-タセットが一部重複します。
    約5000本あるデ-タのすべてを訓練デ-タとして利用します。

  2. 検証デ-タセット val_dataset

    モデルの評価をするためのデ-タセットです。
    今回は全体の2%のデ-タのほぼ直近のものを使用します。
    訓練デ-タセットと重複することになります。

  3. テストデ-タセット test_dataset

    テストデ-タで訓練・学習度合いを確認します。
    どのくらい目的値と乖離しているかみるためのものです。
    今回は、全体の2%のデ-タの直近のものを使用します。
    訓練、検証デ-タとの違いは、目的値がテストデ-タにはありません。

訓練デ-タセット作成

まず最初に、訓練デ-タセットを作成します。
keras モジュ-ルを import します。
from tensorflow import keras
train_dataset = keras.utils.timeseries_dataset_from_array( )
とし、括弧内に引数を設定すれば完了です。

  1. 第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. 第 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,
    とします。

  3. 第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,
)

ここまでで、訓練デ-タセットが作成できました。
引き続き、検証デ-タセットを作成します。


  • WSL2 Python RNN 検証デ-タセット作成 に進む
  • 70VPS に戻る