Created
February 10, 2018 01:08
-
-
Save rakuishi/7e46efbcbb17e17c664275052408e0f3 to your computer and use it in GitHub Desktop.
再帰型ニューラルネットワーク
We can make this file beautiful and searchable if this error is corrected: It looks like row 146 should actually have 2 columns, instead of 1 in line 145.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"Month","International airline passengers: monthly totals in thousands. Jan 49 ? Dec 60" | |
"1949-01",112 | |
"1949-02",118 | |
"1949-03",132 | |
"1949-04",129 | |
"1949-05",121 | |
"1949-06",135 | |
"1949-07",148 | |
"1949-08",148 | |
"1949-09",136 | |
"1949-10",119 | |
"1949-11",104 | |
"1949-12",118 | |
"1950-01",115 | |
"1950-02",126 | |
"1950-03",141 | |
"1950-04",135 | |
"1950-05",125 | |
"1950-06",149 | |
"1950-07",170 | |
"1950-08",170 | |
"1950-09",158 | |
"1950-10",133 | |
"1950-11",114 | |
"1950-12",140 | |
"1951-01",145 | |
"1951-02",150 | |
"1951-03",178 | |
"1951-04",163 | |
"1951-05",172 | |
"1951-06",178 | |
"1951-07",199 | |
"1951-08",199 | |
"1951-09",184 | |
"1951-10",162 | |
"1951-11",146 | |
"1951-12",166 | |
"1952-01",171 | |
"1952-02",180 | |
"1952-03",193 | |
"1952-04",181 | |
"1952-05",183 | |
"1952-06",218 | |
"1952-07",230 | |
"1952-08",242 | |
"1952-09",209 | |
"1952-10",191 | |
"1952-11",172 | |
"1952-12",194 | |
"1953-01",196 | |
"1953-02",196 | |
"1953-03",236 | |
"1953-04",235 | |
"1953-05",229 | |
"1953-06",243 | |
"1953-07",264 | |
"1953-08",272 | |
"1953-09",237 | |
"1953-10",211 | |
"1953-11",180 | |
"1953-12",201 | |
"1954-01",204 | |
"1954-02",188 | |
"1954-03",235 | |
"1954-04",227 | |
"1954-05",234 | |
"1954-06",264 | |
"1954-07",302 | |
"1954-08",293 | |
"1954-09",259 | |
"1954-10",229 | |
"1954-11",203 | |
"1954-12",229 | |
"1955-01",242 | |
"1955-02",233 | |
"1955-03",267 | |
"1955-04",269 | |
"1955-05",270 | |
"1955-06",315 | |
"1955-07",364 | |
"1955-08",347 | |
"1955-09",312 | |
"1955-10",274 | |
"1955-11",237 | |
"1955-12",278 | |
"1956-01",284 | |
"1956-02",277 | |
"1956-03",317 | |
"1956-04",313 | |
"1956-05",318 | |
"1956-06",374 | |
"1956-07",413 | |
"1956-08",405 | |
"1956-09",355 | |
"1956-10",306 | |
"1956-11",271 | |
"1956-12",306 | |
"1957-01",315 | |
"1957-02",301 | |
"1957-03",356 | |
"1957-04",348 | |
"1957-05",355 | |
"1957-06",422 | |
"1957-07",465 | |
"1957-08",467 | |
"1957-09",404 | |
"1957-10",347 | |
"1957-11",305 | |
"1957-12",336 | |
"1958-01",340 | |
"1958-02",318 | |
"1958-03",362 | |
"1958-04",348 | |
"1958-05",363 | |
"1958-06",435 | |
"1958-07",491 | |
"1958-08",505 | |
"1958-09",404 | |
"1958-10",359 | |
"1958-11",310 | |
"1958-12",337 | |
"1959-01",360 | |
"1959-02",342 | |
"1959-03",406 | |
"1959-04",396 | |
"1959-05",420 | |
"1959-06",472 | |
"1959-07",548 | |
"1959-08",559 | |
"1959-09",463 | |
"1959-10",407 | |
"1959-11",362 | |
"1959-12",405 | |
"1960-01",417 | |
"1960-02",391 | |
"1960-03",419 | |
"1960-04",461 | |
"1960-05",472 | |
"1960-06",535 | |
"1960-07",622 | |
"1960-08",606 | |
"1960-09",508 | |
"1960-10",461 | |
"1960-11",390 | |
"1960-12",432 | |
International airline passengers: monthly totals in thousands. Jan 49 ? Dec 60 | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
%matplotlib inline | |
import pandas as pd | |
import numpy as np | |
import matplotlib.pyplot as plt | |
import math | |
from sklearn.metrics import mean_squared_error | |
from sklearn.preprocessing import MinMaxScaler | |
from keras.models import Sequential | |
from keras.layers import Dense, Activation, LSTM | |
# データの読み込み(データセット中のYのみロード) | |
dataframe = pd.read_csv('/root/userspace/public/data/international-airline-passengers.csv', usecols=[1], engine='python', skipfooter=3) | |
dataset = dataframe.values.astype('float32') | |
# [0,1]に正規化 | |
scaler = MinMaxScaler(feature_range=(0, 1)) | |
dataset = scaler.fit_transform(dataset) | |
# 訓練データとテストデータを分割(時系列の予測が目的のため、ある時点から先をテストデータとする) | |
train_size = int(len(dataset) * 0.67) | |
test_size = len(dataset) - train_size | |
train, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:] | |
# X=[data[t-1],...,data[t-lookback]], Y=data[t]となるデータセットに変換 | |
def create_dataset(dataset, look_back=1): | |
dataX, dataY = [], [] | |
for i in range(len(dataset)-look_back-1): | |
a = dataset[i:(i+look_back), 0] | |
dataX.append(a) | |
dataY.append(dataset[i + look_back, 0]) | |
return np.array(dataX), np.array(dataY) | |
look_back = 3 | |
trainX, trainY = create_dataset(train, look_back) | |
testX, testY = create_dataset(test, look_back) | |
# [samples, time steps, features]へ変形 | |
trainX = np.reshape(trainX, (trainX.shape[0], trainX.shape[1], 1)) | |
testX = np.reshape(testX, (testX.shape[0], testX.shape[1], 1)) | |
# LSTM | |
model = Sequential() | |
model.add(LSTM(4, input_shape=(look_back, 1))) | |
model.add(Dense(1)) | |
model.compile(loss='mean_squared_error', optimizer='adam') | |
model.fit(trainX, trainY, epochs=100, batch_size=1, verbose=2) | |
# テストデータに対する予測(評価のため訓練データも) | |
trainPredict = model.predict(trainX) | |
testPredict = model.predict(testX) | |
# 正規化を元に戻す | |
trainPredict = scaler.inverse_transform(trainPredict) | |
trainY = scaler.inverse_transform([trainY]) | |
testPredict = scaler.inverse_transform(testPredict) | |
testY = scaler.inverse_transform([testY]) | |
# 平均二乗誤差のルートで評価 | |
trainScore = math.sqrt(mean_squared_error(trainY[0], trainPredict[:,0])) | |
print('Train RMSE: %.2f' % (trainScore)) | |
testScore = math.sqrt(mean_squared_error(testY[0], testPredict[:,0])) | |
print('Test RMSE: %.2f' % (testScore)) | |
# 訓練データ部分の予測データ | |
trainPredictPlot = np.empty_like(dataset) | |
trainPredictPlot[:, :] = np.nan | |
trainPredictPlot[look_back:len(trainPredict)+look_back, :] = trainPredict | |
# テストデータ部分の予測データ | |
testPredictPlot = np.empty_like(dataset) | |
testPredictPlot[:, :] = np.nan | |
testPredictPlot[len(trainPredict)+(look_back*2)+1:len(dataset)-1, :] = testPredict | |
plt.plot(scaler.inverse_transform(dataset), label='Dataset') | |
plt.plot(trainPredictPlot, label='Prediction under train data') | |
plt.plot(testPredictPlot, label='Prediction under test data') | |
plt.legend() | |
plt.show() | |
# from IPython.display import SVG | |
# from keras.utils.vis_utils import model_to_dot | |
# SVG(model_to_dot(model).create(prog='dot', format='svg')) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment