æ¥çµå¹³åæ ªäŸ¡ãLSTMãçšããŠäºæž¬ããŠã¿ã
æŠèР仿µè¡ãã®æ·±å±€åŠç¿ã§æ¥çµå¹³åæ ªäŸ¡ãäºæ³ããŠã¿ãŸããã çµè«ããèšãã°ãå šãäºæ³ã§ãããæšæã§ããã LSTMãšã¯ LSTMãšã¯ãªã«ã¬ã³ããã¥ãŒã©ã«ãããã¯ãŒã¯ïŒRNNïŒãšåŒã°ããæ©æ¢°åŠç¿ææ³ã®äžã€ã§ãã RNNãçšããããšã§ãçŸåšãšéå»äžå®æéã®æç³»åããŒã¿ãããæªæ¥ã®ããŒã¿ãäºæž¬ããããšãã§ããŸãã ãŸããRNNãæ¹è¯ããLSTMã§ã¯ãé·æã®ãã¬ã³ããåæ ããããããšãããŠããŸãã 詳ããã¯ãã¡ãã®ãµã€ããã芧ãã ããã åŠç¿ããŒã¿ãšãã¢ãã«ãšã ãã¡ãã®ãµã€ããããéå»4ã¶æã®1æéè¶³ã®ããŒã¿ãããŠã³ããŒãããåŠç¿ããŒã¿ãšããŠçšããŸããã ã¢ãã«ã®é ãå±€ã®ãŠãããæ°ã¯100ãéå»20æéã®æ ªäŸ¡ãã1æéå ã®æ ªäŸ¡ãäºæž¬ããã¢ãã«ãçšããŸãããåŠç¿æ¹æ³ã¯AdamãçšããŸããã å®è£ Keras(TensorFlow)ãçšããŠå®è£ ããŸãããåããŠäœ¿ã£ããã§ãããçãæžããŠäŸ¿å©ã§ããã以äžããœãŒã¹ã³ãŒããèŒããŠãããŸãã # coding: utf-8 import numpy as np from keras.models import Sequential from keras.layers import Dense, Activation from keras.layers.recurrent import LSTM from keras.optimizers import Adam from keras.initializers import TruncatedNormal from keras.callbacks import EarlyStopping from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt import seaborn import pandas as pd df = pd.read_csv('~/deep_learning/csv/nikkei4_7.csv') x = df['å§å€'] / df['å§å€'].max() f = list(x) length_of_sequences = len(f) maxlen = 20 data = [] target = [] for i in range(0, length_of_sequences - maxlen): data.append(f[i:i+maxlen]) target.append(f[i+maxlen]) X = np.array(data).reshape(len(data), maxlen, 1) Y = np.array(target).reshape(len(data), 1) N_train = int(len(data)*0.9) N_validation = len(data) - N_train X_train, X_validation, Y_train, Y_validation = \ train_test_split(X, Y, test_size=N_validation) n_in = len(X[0][0]) n_hidden = 100 n_out = len(Y[0]) weight_hidden = TruncatedNormal(stddev=np.sqrt(1/n_hidden)) weight_out = TruncatedNormal(stddev=np.sqrt(1/n_out)) model = Sequential() model.add(LSTM(n_hidden, init=weight_hidden, input_shape=(maxlen, n_out))) model.add(Dense(n_out, init=weight_out)) model.add(Activation('linear')) optimizer = Adam(lr=0.001, beta_1=0.9, beta_2=0.999) model.compile(loss='mean_squared_error', optimizer=optimizer) epochs = 500 batch_size = 10 early_stopping = \ EarlyStopping(monitor='val_loss', patience=10, verbose=1) hist = model.fit(X_train, Y_train, epochs=epochs, batch_size=batch_size, validation_data=(X_validation, Y_validation), callbacks=[early_stopping]) ## predict 1 step future original = [f[i] for i in range(length_of_sequences)] predicted = [None for i in range(maxlen)] for i in range(1, length_of_sequences - maxlen): Z = X[:i] z_ = Z[-1:] y = model.predict(z_) predicted.append(y[0][0]) plt.figure() plt.plot(original, label="original") plt.plot(predicted, label="predicted") plt.legend() plt.xlabel("step") plt.ylabel("price") plt.show() çµæ äžã®ã¹ã¯ãªãããèµ°ãããçµæãã€ãã®çµæãåŸãããŸããã äžèŠäºæž¬ã§ããŠããããã«èŠããŸãã ããããªããããºãŒã ããŠã¿ããšã ãã®ããã«ãå®éã®åãããé ããŠããããšãããããŸãã ããã§ã¯å šãæå³ããããŸããã äžã®äžãããªã«çã話ã¯ãããŸãããã ...