Я использую эту формулу, чтобы предсказать цену акций в Jupyter:
import keys
import datetime
from binance.client import Client
import pandas as pd
client = Client(keys.APIKey, keys.SecretKey)
symbol= 'BTCUSDT'
BTC= client.get_historical_klines(symbol=symbol, interval=Client.KLINE_INTERVAL_30MINUTE, start_str="1 year ago UTC")
%matplotlib inline
BTC= pd.DataFrame(BTC, columns=['Open time', 'Open', 'High', 'Low',
'Close', 'Volume', 'Close time',
'Quote asset volume','Number of trades',
'Taker buy base asset volume',
'Taker buy quote asset volume','Ignore'])
BTC['Open time'] = pd.to_datetime(BTC['Open time'], unit='ms')
BTC.set_index('Open time', inplace=True)
BTC
data= BTC.iloc[:,3:4].astype(float).values
from sklearn.preprocessing import MinMaxScaler
scaler= MinMaxScaler()
data=scaler.fit_transform(data)
training_set= data[:10000]
test_set=data[10000:]
X_train= training_set[0:len(training_set)-1]
y_train= training_set[1:len(training_set)]
X_test= test_set[0:len(test_set)-1]
y_test= test_set[1:len(test_set)]
import numpy as np
X_train = np.reshape(X_train, (len(X_train), 1, X_train.shape[1]))
x_test = np.reshape(X_test, (len(X_test), 1, X_test.shape[1]))
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
model = Sequential()
model.add(LSTM(256, return_sequences=True, input_shape=(X_train.shape[1], X_train.shape[2])))
model.add(LSTM(256))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(X_train, y_train, epochs=50, batch_size=16, shuffle=False)
predicted_price= model.predict(X_test)
predicted_price= scaler.inverse_transform(predicted_price)
real_price = scaler.inverse_transform(y_test)
Но вместо того, чтобы получить График Real vs Predicted, я получаю эту ошибку:
ValueError Traceback (последний вызов был последним) в ----> 1 предсказанный_прием = model.predict ([X_test]) 2 прогнозируемый_прием = scaler.inverse_transform (предсказанный_приз) 3 real_price = scaler.inverse_transform (y_test)
E: \ anaconda3 \ lib \ site-packages \ keras \ engine \ training.py в предикате (self, x, batch_size, подробный, шаги, обратные вызовы, max_queue_size, worker, use_multiprocessing) 1439 1440
Case 2: Symboli c тензоры или Numpy массивоподобные. -> 1441 x, _, _ = self._standardize_user_data (x) 1442, если self.stateful: 1443, если x [0] .shape [0]> batch_size и x [0] .shape [0]% batch_size! = 0:
E: \ anaconda3 \ lib \ site-packages \ keras \ engine \ training.py в _standardize_user_data (self, x, y, sample_weight, class_weight, check_array_lengths, batch_size) 577 feed_input_shapes, 578 check_batch_axis = False, False, Не применяйте размер пакета. -> 579 exception_prefix = 'input') 580 581, если y не None:
E: \ anaconda3 \ lib \ site-packages \ keras \ engine \ training_utils.py в standardize_input_data (данные, имена, формы , check_batch_axis, exception_prefix) 133 ': ожидаемые' + names [i] + 'будут иметь' + 134 str (len (shape)) + 'размеры, но получили массив' -> 135 'с shape' + str (data_shape) ) 136 если нет check_batch_axis: 137 data_shape = data_shape [1:]
ValueError: Ошибка при проверке ввода: ожидалось, что lstm_1_input будет иметь 3 измерения, но получил массив с формой (7505, 1)
Даже с этим журналом я не могу указать root причину, чтобы исправить это.