「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。 散布図
https://github.com/AileenNielsen/TimeSeriesAnalysisWithPython/blob/master/data/AirPassengers.csv
url = 'https://raw.githubusercontent.com/AileenNielsen/TimeSeriesAnalysisWithPython/master/data/AirPassengers.csv' from urllib import request request.urlretrieve(url, './work/AirPassengers.csv')
df = pd.read_csv('./work/AirPassengers.csv')
df.head()
df.tail()
df.columns = ['Month', 'Passengers']
plt.plot(df['Passengers']) plt.xticks(np.arange(0, 145, 12)) plt.grid() plt.show()
from statsmodels.tsa.seasonal import seasonal_decompose sd = seasonal_decompose(df['Passengers'].values, period=12) # periodで周期を指定 sd.plot() plt.show()
data = df['Passengers'].values.astype('f')
scale = data.max() data /= scale
x = data[:-1] y = data[1:] print('x:',len(x)) print('y:', len(y))
print('x:', np.shape(x), ' y:', np.shape(y)) x = x.reshape(len(x), 1, 1) y = y.reshape(len(y), 1) print('x:', np.shape(x), ' y:', np.shape(y))
# 訓練データのサンプル数を指定 train_size = int(len(data) * 0.7) # データの分割 x_train = x[:train_size] x_test = x[train_size:] y_train = y[:train_size] y_test = y[train_size:] # shapeを確認 print('x_train:', x_train.shape) print('x_test :', x_test.shape) print('y_train:', y_train.shape) print('y_test :', y_test.shape)
model = Sequential() model.add(LSTM(30, batch_input_shape=(None, 1, 1))) # 中間層が30のLSTM model.add(Dense(1)) # 回帰なので最後の出力値は1つ
model.compile(loss='mean_squared_error', optimizer=Adam())
model.summary()
batch_size = 20 n_epoch = 200 hist = model.fit(x_train, y_train, epochs=n_epoch, validation_data=(x_test, y_test), verbose=0, batch_size=batch_size)
y_pred = model.predict(x)
def pred_n_passengers(y_pred, scale, year, month): index = ((year - 1949) * 12) + (month - 1) # 1949/1からのデータ return y_pred[index] * scale # 正規化した値を元に戻す。
year = 1960 month = 4 print("org : ", data[((year - 1949) * 12) + (month - 1)] * scale) print("pred: ", pred_n_passengers(y_pred, scale, year, month))
plt.plot(data, color='blue') # 実測値 plt.plot(y_pred, color='red') # 予測値 plt.show()
def plot_history_loss(hist): plt.plot(hist.history['loss'],label="loss for training") plt.plot(hist.history['val_loss'],label="loss for validation") plt.title('model loss') plt.xlabel('epoch') plt.ylabel('loss') plt.legend(loc='best') plt.show() plot_history_loss(hist)