「.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)