- データの読み込み
import pandas as pd
data=pd.read_csv('data.csv')
- 特徴エンジニアリング、Time と Close が必要です
data = data[['Time', 'Close']]
- matplotlib のインストール
sudo /home/skka3134/folder/bot/bin/python -m pip install matplotlib
- matplotlib を使用して、日付と終値に基づいてグラフを描画します。matplotlib は 2D 描画ライブラリです。
import matplotlib.pyplot as plt
plt.plot(data['Time'],data['Close'])
plt.show()
5. LSTM ニューラルネットワークのためのデータフレームを準備します。RNN は、シーケンスデータまたは時系列データを使用する人工ニューラルネットワークの一種です。LSTM は、長いシーケンスのトレーニング中に勾配消失と勾配爆発の問題を解決するための特殊な RNN です。
from copy import deepcopy as dc
def prepare_dataframe_for_lstm(df, n_steps):
df = dc(df)
df.set_index('Time', inplace=True)
for i in range(1, n_steps+1):
df[f'Close(t-{i})'] = df['Close'].shift(i)
df.dropna(inplace=True)
return df
lookback = 7
shifted_df = prepare_dataframe_for_lstm(data, lookback)
6. numpy に変換する
shifted_df = prepare_dataframe_for_lstm(data, lookback)
shifted_df_as_np = shifted_df.to_numpy()
7. sklearn のインストール、誤差を減らすために sklearn の MinMaxScaler を使用する必要があります。
sudo /home/skka3134/folder/bot/bin/python -m pip install Scikit-Learn
- -1 から 1 にスケーリングし、元に戻す
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(-1, 1))
shifted_df_as_np = scaler.fit_transform(shifted_df_as_np)
9. 入力 X と出力 Y を作成します
X = shifted_df_as_np[:, 1:]
y = shifted_df_as_np[:, 0]
X = dc(np.flip(X, axis=1))
10. X を分割し、前 95%をトレーニングに使用し、残りの 5%をテストに使用します
split_index = int(len(X) * 0.95)
- reshape
X_train = X[:split_index]
X_test = X[split_index:]
y_train = y[:split_index]
y_test = y[split_index:]
X_train = X_train.reshape((-1, lookback, 1))
X_test = X_test.reshape((-1, lookback, 1))
y_train = y_train.reshape((-1, 1))
y_test = y_test.reshape((-1, 1))
X_train = torch.tensor(X_train).float()
y_train = torch.tensor(y_train).float()
X_test = torch.tensor(X_test).float()
y_test = torch.tensor(y_test).float()