学習させたデータは東京の2000年から2019年までの気温と日(1~365)で、直近7日分のデータを元に次の日の気温の予測を行えるようにしたいです。
30日分の予測と正解データをグラフで表示させてみたところ、次のようになりました。
予測のグラフが正解データのグラフを一日分ズラしたような形になっていて、何か違うような気がします。
(気温のみを学習させることも試してみましたがほぼ同じ予測結果になりました。)
これは正常に学習と予測が行えているのでしょうか。
間違っている場合はどこが違うのかをお教えいただけるとありがたいです。
Python
1import numpy 2import matplotlib.pyplot as plt 3from tensorflow.keras.models import Sequential 4from tensorflow.keras.layers import Dense,LSTM 5import pandas 6 7dataframe = pandas.read_csv('data.csv',index_col=0) 8 9dataset = dataframe.values 10dataset = dataset.astype('float32') 11data_max = dataframe.max() 12data_min = dataframe.min() 13 14for i in range(len(dataset)): 15 dataset[:,0][i] = (dataset[:,0][i] - data_min['Temperature']) / (data_max['Temperature'] - data_min['Temperature']) 16 dataset[:,1][i] = (dataset[:,1][i] - data_min['Day']) / (data_max['Day'] - data_min['Day']) 17train_size = int(len(dataset) * 0.7) 18test_size = len(dataset) - train_size 19train, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:] 20 21def create_dataset(dataset, look_back=1): 22 dataX, dataY = [], [] 23 for i in range(len(dataset)-look_back-1): 24 xset = [] 25 for j in range(dataset.shape[1]): 26 a = dataset[i:(i+look_back), j] 27 xset.append(a) 28 dataY.append(dataset[i + look_back, 0]) 29 dataX.append(xset) 30 return numpy.array(dataX), numpy.array(dataY) 31 32look_back = 7 33trainX, trainY = create_dataset(train, look_back) 34testX, testY = create_dataset(test, look_back) 35 36trainX = numpy.reshape(trainX, (trainX.shape[0], trainX.shape[1], trainX.shape[2])) 37testX = numpy.reshape(testX, (testX.shape[0], testX.shape[1], testX.shape[2])) 38 39model = Sequential() 40model.add(LSTM(4, input_shape=(testX.shape[1], look_back))) 41model.add(Dense(1)) 42model.compile(loss='mean_squared_error', optimizer='adam') 43model.fit(trainX, trainY, epochs=100, batch_size=1, verbose=2) 44 45testPredict = model.predict(testX) 46testPredict = testPredict[0:30] 47testY = testY[0:30] 48for i in range(30): 49 testPredict[i] = testPredict[i] * (data_max['Temperature'] - data_min['Temperature']) + data_min['Temperature'] 50 testY[i] = testY[i] * (data_max['Temperature'] - data_min['Temperature']) + data_min['Temperature'] 51plt.plot(testPredict,label="testPredict") 52plt.plot(testY,label="testY") 53plt.legend() 54plt.show()
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。