楽しんで学習するITエンジニアの備忘録ブログ

~日常生活の中にも楽しみを見出したい~

【第3弾】LSTMで時系列分析に挑戦【1秒でもいいからソースコードに触れる】

LSTMで時系列データ分析に挑戦中。

 

冒頭部分はほとんど変わっていないが、今回で第3弾。

 

テーマは、「1949年1月から1960年12月 の国際線での乗客数」

 

f:id:takanarukodou2:20210629012031p:plain

 

データの前処理から見直しを開始した。

 

前回までは、正直サンプルプログラムを動かすことに専念していた。

 

入力データがどのような形式かを理解していなかったので、

 

その辺りから、立ち戻って理解を深めていきたい。

 

■kerasでLSTMを利用する方法をもう少し理解したい

 LSTMはRNNベース。

 

 RNNを利用するには、Inputオブジェクトでbatch_shapeの指定が必要。

 

 kerasのリファレンスを参照すると、Inputオブジェクトにおいて、

 「**kwargs: deprecated arguments support. Supports batch_shape and batch_input_shape.

 といった記載があった。

 

 さらに、batch_shapeについて調査し、バッチサイズの形状?であることが判明。

   ※Keras入力の説明:input_shape、units、batch_size、dimなど (qastack.jp)

 

 X_train.shapeが(96,3,1)であることから、batch_shapeは(1,3,1)とした。

 

■Kerasのシーケンシャルモデルの利用

◆サンプルプログラム
 inputs = Input(dtype='float32',batch_shape = (1, 3, 1), name='inputs')
  ->形状(1, 3, 1)  
 out = Bidirectional(LSTM(8, return_sequences = True, activation='tanh'))(inputs)
  ->形状(1, 3, 16)
 out = Bidirectional(LSTM(8, activation='tanh'))(out)
  ->形状(1, 16)
 outputs = Dense(1, activation='linear', name='output')(out)
  ->全結合層。形状(1, 1)
 
◆引数の説明

 ・LSTMの第1引数:出力の次元数(例:8)

 ・「return_sequences = True」の場合はすべてのセルから出力

  KerasのSimpleRNN,LSTM,GRU等のreturn_sequencesについてのメモ (tcom242242.net)

 ・activation:活性化関数

 ・Bidirectional:双方向LSTM層、精度向上が図れる

 

■モデル構築&推論実行

 推論する部分はpredictメソッドのみで実現しているわけではないので、

 読み解く必要はあるが、その部分の理解はペンディングとする。

 ウィンドウサイズを3ヶ月、つまり、過去3ヶ月分のデータを利用して、

 予測をすることにしたが、若干右横にずれているような気がする。

 ウィンドウサイズの調整が必要か?

 LSTMの理論が忘却の彼方なので、こちらも復習した方が良さそうだ。

 

f:id:takanarukodou2:20210701004101p:plain