モチベーション(この記事は、どんな【疑問】の解消を目指すのか?)
LSTMのモデル作りたいんだけど、
どうやってデータ準備すればいいの?
って混乱してませんか?
その混乱の原因って、ずばり、これに尽きると思う。
・準備するべきデータの形 / 世界観 を理解してない
もうホント、これに尽きる。
逆に言うと、”世界観”さえ掴めば!理解できる。
なので、その混乱を解消するぞぉ!!という思いで、この記事書きます。
かなり、気合入れて作ったので、是非参考にしてください:)
この記事は、ディープラーニングの実務で、ご活躍されている、巣籠先生の本を参考にしています。
本編
結論から言うと、理解するべきステップ(世界観)は、大きく3つです。
- いくつ前(何秒/分/時間)までを、予測に使いたいのか?を決める。
(何か、コードを書く必要はない。ただ決めるだけで良い。) - 同じ変数同士で、ベクトルをつくる。
(インプットが2変数なら、下記のようなイメージ。)
( [ [x1(t), x1(t+1), x1(t+2)], [x2(t), x2(t+1), x2(t+2)] ] )
(一般的な、教師あり学習のデータ準備とは、違うから、気を付けて!!) - 出来上がったら、Numpyの3次元配列に変換する
(Kerasのお作法)
でもさぁ、言葉だけで言われても、わからないよね。。。
なので、図解で美しく(しつこく)、説明します!
データ準備のイメージ(図解で、右脳で、理解!)
下記、”回帰データ準備” vs ”LSTMのデータ準備"で、対比させて、説明します。
使うデータは、こちら。
"回帰のデータ準備"
これは、皆さん、馴染みがあるんじゃないかな?
だって、X_input_dataframe.valuesでやっちゃえば済むような処理だし、直感的にわかりやすいですよね。
*実は普通の回帰モデルでも、t-1の変数を説明変数とするモデル
(Psudo-time seriesモデル/Naxモデル)を作ることできます。
が、その特集は、次回!
"LSTMのデータ準備"
まずは、時系列モデルの考え方の、おさらいから!
いいですか?
ちゃんと理解してますか?
これ理解出来たら、LSTMのデータ準備の仕方も、直感的にイメージできるようになるので、しっかりおさらいを!
では、LSTMってどうやってデータ準備するの?
にお答えします。
今回は、「過去3時点前までの情報から予測する」LSTMを例にします。
「は? 何言ってんの? よくわかんないぞ(プンプン)」ってなってしまった方、
もう一度、冷静に考えてみて。
回帰の場合は、基本的に、過去の値とか関係ないよね?
アイスクリームの売り上げ予測・回帰version だったら、
例えば、”2019/09/29(日)における”、
X(平均気温、日照時間)を説明変数として、
”2019/09/29(日)における売り上げ” を予測するでしょ?
だから、、、回帰の場合は、、、同じ時点の変数でまとめないといけない!!!
でも、LSTMの場合は、時系列モデルだから、こうなるよね?
”2019/09/29(日)における売り上げを予測するために、”
【[ [平均気温(3日前), 平均気温(2日前), 平均気温(1日前)],
[日照時間(3日前), 日照時間(2日前), 日照時間(1日前)] ]】を説明変数とする。
でしょ?
つまり、時系列情報が重要!であり、それを一緒にまとめてあげることが重要!なんですよね。
もし、まだわからない箇所がありましたら、遠慮なく、お申し付けください!
世界観がわかったら、下記の記事を見て、pythonで実践してみよう!