時系列予測のためのLSTM
系列の準備、ステートレスLSTMとステートフルLSTM、ルックバックウィンドウ、マルチステップ予測について学習します。
「時系列予測のためのLSTM」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
時系列にLSTMを使う理由
LSTM(長短期記憶)は、ゲート付きのメモリセルを使って長い系列にわたるパターンを記憶する再帰型ニューラルネットワークです。十分なデータがあれば、ARIMAでは捉えられない非線形な依存関係もモデル化できるため、複雑な系列に適しています。
系列のウィンドウ化
LSTMはウィンドウから学習します。ウィンドウとは、次の値を予測するために使う、過去のステップの固定長の切り出しです。ウィンドウサイズが10の場合、モデルはステップ1~10を見てステップ11を予測し、次に2~11を見て12を予測する、という処理を繰り返します。
コードでウィンドウを作成する
ヘルパー関数を使うと、1次元の系列を入力とターゲットのペアに変換できます。
import numpy as np
def make_windows(series, window):
X, y = [], []
for i in range(len(series) - window):
X.append(series[i:i+window])
y.append(series[i+window])
return np.array(X), np.array(y)
X, y = make_windows(values, window=10)データのスケーリング
ニューラルネットワークは、スケーリングされた入力を使うと学習しやすくなります。MinMaxScalerを使って値を[0, 1]に写像し、後で予測値を逆変換することを忘れないでください。
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaled = scaler.fit_transform(values.reshape(-1, 1))LSTM用の形状変更
KerasのLSTMレイヤーでは、入力が(samples, timesteps, features)の形状になっている必要があります。単変量系列では、featuresは1です。
# X is (samples, timesteps); add a feature axis
X = X.reshape((X.shape[0], X.shape[1], 1))
print(X.shape) # (samples, timesteps, 1)モデルの構築
単純な構成は、次の値を予測するDense(1)出力レイヤーに、1つのLSTM(50)レイヤーを接続するものです。
from tensorflow.keras import Sequential
from tensorflow.keras.layers import LSTM, Dense
model = Sequential([
LSTM(50, input_shape=(X.shape[1], 1)),
Dense(1)
])Dense(1)を使う理由
1ステップ先の予測は、数値を1つ出力する回帰問題なので、最後のレイヤーには活性化関数なしのDense(1)を使います。複数ステップを予測する場合は、Dense(n_steps)を使います。
コンパイル
adamオプティマイザーとmse(平均二乗誤差)損失を使います。これは、連続値のターゲットに対する回帰で標準的に使われる選択です。
model.compile(optimizer="adam", loss="mse")学習
ウィンドウ化したデータでモデルを学習させます。検証データの分割によって、エポックごとの汎化性能を監視できます。
history = model.fit(
X, y,
epochs=50,
batch_size=32,
validation_split=0.2
)予測
新しいウィンドウに対して予測し、その後で逆変換して元のスケールに戻します。
pred_scaled = model.predict(X_test)
pred = scaler.inverse_transform(pred_scaled)積層とチューニング
より難しい系列には、LSTMを積層し(最後以外のすべてでreturn_sequences=Trueを設定します)、ドロップアウトを追加します。レイヤーを増やすとより深いパターンを捉えられますが、より多くのデータが必要になり、過学習のリスクも高まります。
model = Sequential([
LSTM(50, return_sequences=True, input_shape=(X.shape[1], 1)),
LSTM(50),
Dense(1)
])確認テスト
LSTMによる予測の知識を確認しましょう。
まとめ
ウィンドウを準備し、MinMaxScalerでスケーリングし、(samples, timesteps, features)に形状を変更して、LSTM(50) + Dense(1)を構築しました。さらにadam/mseでコンパイルして学習し、予測値を逆変換して元のスケールに戻しました。これで時系列コースは終了です。次のコースはRecommendation Systemsです。
よくある質問
「時系列予測のためのLSTM」レッスンは無料ですか?
はい。「時系列予測のためのLSTM」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「時系列予測のためのLSTM」で何を学びますか?
系列の準備、ステートレスLSTMとステートフルLSTM、ルックバックウィンドウ、マルチステップ予測について学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「時系列予測のためのLSTM」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 時系列の構成要素と定常性
- ARIMAとSARIMAモデル
- 自動予測のためのProphet
- 時系列予測のためのLSTM