Advertisement
Guest User

basic lstm

a guest
Dec 30th, 2020
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.01 KB | None | 0 0
  1. import matplotlib.pyplot as plt
  2. from datetime import datetime
  3. import pandas as pd
  4. import numpy as np
  5. import requests
  6.  
  7. import silence_tensorflow.auto
  8. from keras.models import Sequential
  9. from keras.layers import Dense
  10. from keras.layers import LSTM
  11. from sklearn.preprocessing import MinMaxScaler
  12. from sklearn.metrics import mean_squared_error
  13.  
  14. # Dataset
  15. if True:
  16.     json = requests.get('https://api.kraken.com/0/public/OHLC?pair=BTCUSDT&interval=1440&since=1483228800').json()
  17.     data = json['result']
  18.     data = data[list(data.keys())[0]]
  19.     df = pd.DataFrame(data, columns = ['date', 'open', 'high', 'low', 'close', 'vwap', 'volume', 'number_of_trades'])
  20.    
  21.     for x in df.columns:
  22.         if df[x].dtypes == np.dtype(object):
  23.             df[x] = df[x].astype(np.float32)
  24.            
  25.     df['date'] = pd.to_datetime(df['date'], unit='s')
  26.     dataset = df['close'][-1000:]
  27. else:
  28.     from random import random
  29.     dataset = [random() for x in range(100)]
  30.  
  31. look_back = int(len(dataset)/10)
  32. print(dataset)
  33.  
  34. # Prepare data
  35. dataset = np.array(dataset).reshape(-1, 1)
  36. scaler = MinMaxScaler(feature_range=(0, 1))
  37. dataset = scaler.fit_transform(dataset)
  38.  
  39. def split(dataset, p):
  40.   train_size = int(len(dataset) * p)
  41.   test_size = len(dataset) - train_size
  42.   return dataset[0:train_size,:], dataset[train_size:len(dataset), :]
  43.  
  44. def create_dataset(_dataset, _look_back=1):
  45.     data_x, data_y = [], []
  46.     for i in range(len(_dataset) - _look_back - 1):
  47.         a = _dataset[i:(i + _look_back), 0]
  48.         data_x.append(a)
  49.         data_y.append(_dataset[i + _look_back, 0])
  50.     data_x = np.array(data_x)
  51.     data_x = np.reshape(data_x, (data_x.shape[0], 1, data_x.shape[1]))
  52.     return data_x, np.array(data_y)
  53.  
  54. train, test = split(dataset, 0.5)
  55. train_x, train_y = create_dataset(train, look_back)
  56. test_x, test_y = create_dataset(test, look_back)
  57.  
  58. # Model
  59. model = Sequential()
  60. model.add(LSTM(4, input_shape=(1, look_back)))
  61. model.add(Dense(1))
  62. model.compile(loss='mean_squared_error', optimizer='adam')
  63. model.fit(train_x, train_y, epochs=1, batch_size=1)
  64.  
  65. train_predict = model.predict(train_x)
  66. test_predict = model.predict(test_x)
  67.  
  68. # Transform result
  69. train_predict = scaler.inverse_transform(train_predict)
  70. train_y = scaler.inverse_transform([train_y])
  71. test_predict = scaler.inverse_transform(test_predict)
  72. test_y = scaler.inverse_transform([test_y])
  73.  
  74. # Plot
  75. def to_plot(dataset, predict, start, end):
  76.   predict_plot = np.empty_like(dataset)
  77.   predict_plot[:, :] = np.nan
  78.   predict_plot[start:end, :] = predict
  79.   return predict_plot
  80.  
  81. train_predict_plot = to_plot(dataset, train_predict, look_back, len(train_predict) + look_back)
  82. test_predict_plot = to_plot(dataset, test_predict, look_back + len(train_predict) + look_back + 1, len(dataset) - 1)
  83. dates = pd.date_range(start=df['date'][0], periods=len(dataset))
  84.  
  85. plt.plot(dates, scaler.inverse_transform(dataset), label='dataset')
  86. plt.plot(dates, train_predict_plot, label='train')
  87. plt.plot(dates, test_predict_plot, label='test')
  88. plt.gcf().autofmt_xdate()
  89. plt.legend()
  90. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement