質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

940閲覧

LSTMを用いて、コロナの感染者数を予測したい。

aknt

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/12/30 08:09

前提・実現したいこと

pythonでlstmを用いて、新型コロナウイルスの感染者数の予測を行っています。
ある程度予測はできたのですが、グラフにプロットしてみると、日付と感染者数がうまく適用されていません。どのような方法で解決すればよいですか。

該当のソースコード

基本のライブラリを読み込む

from keras.layers.core import Dropout
import numpy as np
import pandas as pd

グラフ描画

from matplotlib import pylab as plt

グラフを横長にする

from matplotlib.pylab import rcParams
rcParams['figure.figsize'] = 15, 6

データの読み込み

filepath = 'covid-19.csv'
data = pd.read_csv(filepath,index_col=0,parse_dates=['Date'])

型変換

input_data = data['Newly confirmed cases'].values.astype(float)
print("input_data : " , input_data.shape ,type(input_data))

スケールの正規化

norm_scale = input_data.max()
input_data /= norm_scale
print(input_data[0:5])

入力データと教師データの作成

def make_dataset(low_data, maxlen):

data, target = [], [] for i in range(len(low_data)-maxlen): data.append(low_data[i:i + maxlen]) target.append(low_data[i + maxlen]) re_data = np.array(data).reshape(len(data), maxlen, 1) re_target = np.array(target).reshape(len(data), 1) return re_data, re_target

RNNへの入力データ数

window_size = 12

入力データと教師データへの分割

X, y = make_dataset(input_data, window_size)

学習データ / 検証データ分割

split_rate = 0.7 # 学習データの割合
train_size = int(len(X) * split_rate)

X_train = X[:train_size]
X_test = X[train_size:]
y_train = y[:train_size]
y_test = y[train_size:]

ライブラリのインポート

import keras
from keras.models import Sequential
from keras.layers import Dense, Activation, LSTM
from keras.optimizers import Adam
import tensorflow as tf
from keras.layers import RepeatVector
from keras.layers import TimeDistributed

ネットワークの構築

m= Sequential() # Sequentialモデル
m.add(LSTM(500, activation='tanh',batch_input_shape=(None, window_size, 1))) # LSTM 50層
m.add(Dense(1))

#コンパイル
m.compile(loss='mean_squared_error', optimizer='rmsprop' , metrics = ['accuracy'])
#m.summary()

学習用パラメータ

batch_size = 20
n_epoch = 150

学習

hist = m.fit(X_train, y_train,
epochs=n_epoch,
validation_data=(X_test, y_test),
verbose=0,
batch_size=batch_size)

損失値(Loss)の遷移のプロット

plt.plot(hist.history['loss'],label="train set")
plt.plot(hist.history['val_loss'],label="test set")
plt.title('model loss')
plt.xlabel('epoch')
plt.ylabel('loss')
plt.legend()
plt.show()

#イメージ説明pred_train = m.predict(X_train)
y_pred_test = m.predict(X_test)

RMSEで評価

def rmse(y_pred, y_true):
return np.sqrt(((y_true - y_pred) ** 2).mean())
print("RMSE Score")
print(" train : " , rmse(y_pred_train, y_train))
print(" test : " , rmse(y_pred_test, y_test))

推定結果のプロット

plt.plot(X[:,0], color='blue', label="observed") # 元データ
plt.plot(y_pred_train, color='red', label="train") # 予測値(学習)
plt.plot(range(len(X_train),len(X_test)+len(X_train)),y_pred_test, color='green', label="test") # 予測値(検証)
plt.legend()
plt.grid()
plt.show()
イメージ説明

試したこと

dfをdatetime型に変換したのですが(df=pd.date_range('2020/01/16','2021/11/14',freq='D'))、適用されませんでした。

補足情報(FW/ツールのバージョンなど)

Newly confirmed casesは日ごとの全国の感染者数の合計のカラム名です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問