ディープラーニングで時系列データの未来予測をしてみよう〜RNN(LSTM)〜【Python時系列分析#4】

  Рет қаралды 17,754

データサイエンス塾!!

データサイエンス塾!!

Күн бұрын

Пікірлер: 49
@mayukosato
@mayukosato Жыл бұрын
いつも勉強になります! ディープラーニングを使った回帰(?)も取り上げていただけたら嬉しいです。 職場でディープラーニングを使った顧客生涯価値の予測の話が出てきて、GoogleにDNNの記事があるのを見つけたのですが、今ひとつピンときませんでした。 因果推論の動画も楽しみにしています。残暑も厳しいかと思いますが、お体に気をつけて。
@nishimaki
@nishimaki Жыл бұрын
嬉しいコメントありがとうございます! ディープラーニングを使用して数値を予測することも可能ですね。 以下の動画は画像分類ですが、インプットとアウトプットの形式を数値データにすれば実装可能なので、もしよろしければ取り急ぎご参考にしてください。 kzbin.info/www/bejne/ipmug4Ztd5p6fLs まだまだ暑い日が続きますが、どうかご自愛ください。
@mayukosato
@mayukosato Жыл бұрын
@@nishimaki 画像分類を応用するとは思いつきませんでした!早速挑戦します。 丁寧なリプライ、ありがとうございます😊
@nishimaki
@nishimaki 3 жыл бұрын
本動画で使用しているソースとファイルのダウンロードは下記URLからどうぞ。 analysis-navi.com/?p=3868
@hayatomiura6103
@hayatomiura6103 3 жыл бұрын
非常に勉強になりました!多変量LSTMの解説動画も期待しています!
@nishimaki
@nishimaki 3 жыл бұрын
ご視聴ありがとうございます。 多変量は一応、動画の後半で扱っているつもりなのですが。。。汗 こちらとは違いましたかね??
@hayatomiura6103
@hayatomiura6103 3 жыл бұрын
​@@nishimaki 動画の後半で予測された気温は、過去の気温と降水量、日照時間の3つが説明変数に使われているのでしょうか?
@nishimaki
@nishimaki 3 жыл бұрын
はい、前半では気温のみを説明変数かつ目的変数に、 後半では3つの変数すべてを説明変数かつ目的変数としております!(グラフがごちゃごちゃになるので1つずつしか表示しておらず、分かりづらかったかもしれませんが。。。)
@hayatomiura6103
@hayatomiura6103 3 жыл бұрын
@@nishimaki なるほど、ありがとうございます!(単変量を3つ同時にやっているものだと勘違いしていました・・・汗) これからの動画も楽しみにしています!
@blue0118
@blue0118 2 жыл бұрын
7:56 「基本的には標準化を、データの最大値・最小値が定まっていて外れ値が存在しない場合には正規化を使用する」と別の場所で習ったのですが、気象データという最大値や最小値が決まらないデータに対してなぜ正規化を用いているのでしょうか?
@nishimaki
@nishimaki 2 жыл бұрын
標準化と正規化のどちらにするか、決まったルールは無いので難しい所とは思います。 東京の1日平均気温はまず-5度〜40度には収まるでしょうし、日照時間は必ず0〜24の間なので正規化でも良いかなと考えましたが、 降水量は上限が読めないので仰る通り標準化の方が適していたかもしれません!
@blue0118
@blue0118 2 жыл бұрын
@@nishimaki ありがとうございます!
@km7702
@km7702 3 жыл бұрын
いつも動画を参考にさせて頂いています。ありがとうございます。 自身の勉強も兼ねて時間と圧力のLSTMの作成をしてみました。 途中までは実行できたのですが、未来予測のコードで、valueErrorが出てしまいます。 原因はアップされているコードだと自身のプログラムには必要のない日付のラベルが組み込まれてしまうことでした いろいろと試して見たのですが上手く行きません。御手数ですが、コードのどの部分を消せば日付のラベルを外すことが出来ますか?
@nishimaki
@nishimaki 3 жыл бұрын
こちらこそ、ご視聴ありがとうございます。 日付のラベルを消すだけで宜しいでしょうか?それでしたら、 データフレーム名.reset_index().drop("年月日",axis=1) で消えるかと思います。
@km7702
@km7702 3 жыл бұрын
@@nishimaki ありがとうございます.早速試させて頂きます.
@れんこん-o2z
@れんこん-o2z 6 ай бұрын
動画ありがとうございます。教えていただきたいのですが、 動画後半で3変数を使って予測をしていますが、これは過去の「平均気温」「降水量」「日照時間」から未来の平均気温を予測しているという認識で良いでしょうか。 それとも「平均気温」は過去の平均気温、「降水量」は過去の降水量のみを説明変数としてそれぞれ予測しているのでしょうか。
@nishimaki
@nishimaki 6 ай бұрын
こちらこそご視聴ありがとうございます。はい、LSTMでは一般的に「平均気温」「降水量」「日照時間」すべての変量が平均気温の予測に関与しています。降水量、日照時間についても同様に、すべての変量を用いて予測がされています。
@れんこん-o2z
@れんこん-o2z 6 ай бұрын
ありがとうございます!色々な要素で予測できるのは便利ですね! 度々で申し訳ないのですが、売上予測をする場合に天気を説明変数に用いる場合、これらは晴:1雨:2曇:3のようにすればLSTMで使うことができるんでしょうか?それともこの手法は気温のように連続値でないと駄目でしょうか?
@nishimaki
@nishimaki 6 ай бұрын
はい、それでも実行可能ですが、その場合「晴フラグ」=0 or 1、「曇フラグ」=0 or 1のように2変数に変換する方が望ましいかと思います(2つのフラグがいずれも0なら雨と分かります)。 晴:1雨:2曇:3と変換してしまうと、あくまでコンピュータは数字として処理するので「晴と曇の差は、晴と雨の差の2倍」のような解釈をしてしまい、変な結果が得られてしまう可能性があります。
@れんこん-o2z
@れんこん-o2z 6 ай бұрын
@@nishimaki なるほど、、0か1かで分けた方が良いのですね。ありがとうございます!
@lenonbob9886
@lenonbob9886 3 жыл бұрын
めちゃくちゃ参考になります! 質問ですが、例えば日照時間を説明変数に、降水量と気温を目的変数にしたい場合、どの辺を変えたらいいですかね?
@nishimaki
@nishimaki 3 жыл бұрын
ありがとうございます! その場合は、create_input_data関数を少しいじる必要がありそうですね。 今回、全体のデータフレームからXとyをそれぞれ抽出していますが、 まず日照時間のデータフレームと平均気温・降水量のデータフレームに分離してから、それぞれの要素をX,yにappendしていく形になるかと思います。 具体的でなくてすみませんが。。。
@lenonbob9886
@lenonbob9886 3 жыл бұрын
@@nishimakicreate_input_dataに代入するdf_week_scale_trainとかを変えるだけじゃなくて、データフレーム自体を分割する必要があるって事でしょうか?
@nishimaki
@nishimaki 3 жыл бұрын
やり方は色々あるかと思いますが、データフレームを分割しないならば、 X[j].append(raw_data[j][i:i + look_back]) y[j].append([raw_data[j][i + look_back]]) の1行目のraw_dataをraw_data[["日照時間"]]みたいにして、 2行目のraw_dataをraw_data[["降水量","気温"]]みたいにする方法でも良さそうです。 こちらの方が楽かも知れないですね。
@lenonbob9886
@lenonbob9886 3 жыл бұрын
@@nishimaki 丁寧にありがとうございます😊
@翼翼-h3s
@翼翼-h3s 2 жыл бұрын
@データサイエンス塾!! 分かりやすくいつも勉強させて頂いております! 自分でもほかのデータを使って実装したのですが、精度確認部分で以下のエラーが出ました。。 >model.evaluate(X_test,y_test,batch_size=1) OverflowError: cannot convert float infinity to integer 調べてみると、float が無限大に小さくなりすぎているとの事でした。 >import sys >sys.float_info.min 2.2250738585072014e-308 また、それぞれの中身を見ると行列が空っぽでした。。。 >X_test array([], shape=(0, 30, 1), dtype=int64) >y_test, array([], shape=(0, 1, 1), dtype=int64) この場合精度を実装するにはどうしたらよろしいでしょうか?
@nishimaki
@nishimaki 2 жыл бұрын
ご視聴ありがとうございます! X_test、y_testが空っぽなのがおかしいですね。 ご使用されているデータのフォーマットと、本動画で紹介しているデータのフォーマットは同一でしょうか?
@のん-d6r
@のん-d6r 2 жыл бұрын
最近ディープラーニングを学びはじめました!とても参考にさせて頂いてます!16:55のところでわたしも同じエラーが出たのですが、どうすれば次に進めますでしょうか。
@nishimaki
@nishimaki 2 жыл бұрын
ご視聴ありがとうございます! 早足で進めてしまってすみません。ここでは変数X_trainに代入する処理を実行していなかったため、「"X_train" in not defined」というエラーが出ています。 なので、X_trainを定義したセルを実行すればエラーは消えるかと思います。
@のん-d6r
@のん-d6r 2 жыл бұрын
@@nishimaki x_trainの定義とはどのようにすればよいのでしょうか。私の学習不足で、初歩的な質問ですみません😭
@nishimaki
@nishimaki 2 жыл бұрын
X_train = ○○、という処理を行うと、X_trainが定義されます。 ソースコードは動画のものと同一でしょうか? でしたら、11:27〜説明している部分になります。
@and-mo7ok
@and-mo7ok 2 жыл бұрын
大学の卒論で時系列分析に取り組み始めた初学者です!動画全4本非常にわかりやすかったです 動画と全く関係ないのですが、 深層学習で平均二乗誤差による誤差関数を用いた時に誤差の単位は何になりますか? 1/N( y - t )^2 で求めると思うのですがよくわからなくて、、、 調べても単位のことは書いてるページがなく、身近にも聞けるひとがいなかったため コメントさせていただきました。。。 P.S. 分析しているのは動画と同様に気象の気温です
@nishimaki
@nishimaki 2 жыл бұрын
ご視聴ありがとうございます! 基本的には誤差の単位というものは定義しないと思います。 例えば「モデルAの誤差が0.1で、モデルBの誤差が0.2」だった場合に「誤差が小さいモデルAの方が良い」と判断する際に使うものなので、0.1や0.2の単位が何だろうと関係ないんですよね。 なので、単位はつけずに数値だけで表現されるものと考えて良いかなと。
@and-mo7ok
@and-mo7ok 2 жыл бұрын
@@nishimaki 返信ありがとうございます! あともう一つ関係のない質問なのですが、 気温分析の指標にlossではなくaccuracyを使うのはやはり一般的ではないですか?
@nishimaki
@nishimaki 2 жыл бұрын
accuracyはカテゴリ予測の時に用いる指標なので、気温データなどの数値予測の場合はMAEなどの指標を用いるかと思います。 lossはモデルの学習のための「損失関数」として使用する事が一般的な気がします。
@and-mo7ok
@and-mo7ok 2 жыл бұрын
@@nishimaki なるほど 度々ありがとうございます!
@俊八-w3u
@俊八-w3u 3 жыл бұрын
この動画を参考に、日経平均株価の時系列データで、株価予想をしようと思っているのですが、 NotImplementedError: Cannot convert a symbolic Tensor (sequential_2/lstm_6/strided_slice:0) to a numpy array. This error may indicate that you're trying to pass a Tensor to a NumPy call, which is not supported というエラーがでます、検索すると、numpy のバージョンを落とせみたいなことを言われますが、うまくいきません。 numpy とテンソルフローで、いつもこのエラーがでるので、止まっています。 torchだとこのエラーは出ないのですが、いい方法があればご教示いただければ助かります。 よろしくおねがいします
@nishimaki
@nishimaki 3 жыл бұрын
ご視聴ありがとうございます。 そのエラーには当方も遭遇した事が無いのですが、調べたところnumpyのバージョンを落とす以外にもpythonやTensorflowのバージョンを変える方法もあるようです。 大した情報でなく申し訳ありませんが、お試しください。 ご参考:exerror.com/notimplementederror-cannot-convert-a-symbolic-tensor-lstm_2-strided_slice0-to-a-numpy-array/
@俊八-w3u
@俊八-w3u 3 жыл бұрын
@@nishimaki 忙しい中ありがとうございます、ついでに、天候の時系列分析は、実用性がほぼないので、株価とか、競馬とか、実用的な例題で、かつ、torchでやってもらうのを期待しています。わがままですみません。
@nishimaki
@nishimaki 3 жыл бұрын
ご意見ありがとうございます。ネタ帳に入れさせて頂きます。 今後ともよろしくお願いいたします。
@俊八-w3u
@俊八-w3u 3 жыл бұрын
@@nishimaki お騒がせしました、動きました。ターミナルでnumpyのアンインストールとバージョン下げて再インストールをやって、バージョンダウンしないので諦めていたのですが、anacondaのナビゲーターのenvironmentsのinstalled,numpyの緑のチェックを押した時に出る、mark for specific version installというところで、バージョンダウンしたら、1.19.2が入って、うまくいきました。ありがとうございます。ただし、baseのところでやろうとしたら、pythonのバージョン下げろみたいなことを言われてうまくいきませんでした。
@nishimaki
@nishimaki 3 жыл бұрын
わざわざご連絡頂きましてありがとうございます。解決されましたようで何よりです。
@まくら-l8f
@まくら-l8f 2 жыл бұрын
とても参考になっています。 ありがとう御座います。 質問ですが、学習実行したときにlossがnanとなり予測ができません。 どうすれば良いでしょうか。 データは、2021年の天気を使用してます。
@nishimaki
@nishimaki 2 жыл бұрын
ご視聴ありがとうございます。 ソースコードはダウンロードしたものをそのままお使いでしょうか?
@まくら-l8f
@まくら-l8f 2 жыл бұрын
@@nishimaki ご返信ありがとう御座います。 ソースコードは データ読み込みの週ごとに集計するところを10分ごとに集計するように変えました。 ほかは変えてません。
@nishimaki
@nishimaki 2 жыл бұрын
承知しました。理由は様々考えられますが、まずはX_trainやy_trainに正しく値が入っているかご確認されるのが良いかなと思います。 また、10分ごとに集計するように変えたとのことで、データ自体にnanが入っていないかも今一度ご確認してみてください。
@まくら-l8f
@まくら-l8f 2 жыл бұрын
@@nishimaki データが抜けている箇所があるので、nanが入ってしまっています。 この場合、予測は難しいでしょうか?
@nishimaki
@nishimaki 2 жыл бұрын
データが抜けている状態そのままでは難しいかなと思うので、前後の値に基づいて穴埋めするのが良いかと思います。 時系列データの欠損値を穴埋めする方法ですが、下記動画の9:28〜あたりからご参考になりませんでしょうか? kzbin.info/www/bejne/l33cdoSHa8RgnbM
Quilt Challenge, No Skills, Just Luck#Funnyfamily #Partygames #Funny
00:32
Family Games Media
Рет қаралды 53 МЛН
Do you love Blackpink?🖤🩷
00:23
Karina
Рет қаралды 25 МЛН
Pythonで時系列分析してみよう#1〜時系列データの基本〜
17:05
データサイエンス塾!!
Рет қаралды 19 М.
【6分で分かる】LSTMについて解説!
6:00
スタビジ【誰でもAIデータサイエンス】byウマたん
Рет қаралды 1,8 М.
Pythonで重回帰分析をしてみよう【Python機械学習#4】
17:45
データサイエンス塾!!
Рет қаралды 16 М.
2020年、Deep Learningをはじめましょう!
18:57
Neural Network Console
Рет қаралды 76 М.