1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| import pandas as pd from sklearn.preprocessing import MinMaxScaler from sklearn.metrics import mean_squared_error from keras.models import Sequential from keras.layers import LSTM, Dense import numpy as np import matplotlib.pyplot as plt filepath = '/data810_2.xlsx' data = pd.read_excel(filepath) data['Time'] = pd.to_datetime(data['Time'], format='%Y-%m-%d-%H.%M.%S.%f') data = data.sort_values('Time') values = data['Data'].values.reshape(-1, 1) scaler = MinMaxScaler() scaled = scaler.fit_transform(values)
train_size = int(len(scaled) * 0.67) train, test = scaled[0:train_size], scaled[train_size:]
def create_dataset(dataset, look_back=1): X, Y = [], [] for i in range(len(dataset) - look_back - 1): a = dataset[i:(i + look_back), 0] X.append(a) Y.append(dataset[i + look_back, 0]) return np.array(X), np.array(Y)
look_back = 3 trainX, trainY = create_dataset(train, look_back) testX, testY = create_dataset(test, look_back)
trainX = np.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1])) testX = np.reshape(testX, (testX.shape[0], 1, testX.shape[1]))
model = Sequential() model.add(LSTM(50, input_shape=(1, look_back))) model.add(Dense(1)) model.compile(loss='mean_squared_error', optimizer='adam') model.fit(trainX, trainY, epochs=100, batch_size=1)
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 = np.sqrt(mean_squared_error(trainY[0], trainPredict[:, 0])) print('Train Score: %.2f RMSE' % (trainScore)) testScore = np.sqrt(mean_squared_error(testY[0], testPredict[:, 0])) print('Test Score: %.2f RMSE' % (testScore))
plt.plot(testY[0], label='Actual') plt.plot(testPredict[:, 0], label='Predicted') plt.legend() plt.show()
|