这是我的代码:
def create_dataset(signal_data, look_back=1):
dataX, dataY = [], []
for i in range(len(signal_data) - look_back):
dataX.append(signal_data[i:(i + look_back), :])
dataY.append(signal_data[i + look_back, -1])
return np.array(dataX), np.array(dataY)
look_back = 20
df = pd.read_csv('stock.csv')
signal_data = df[["close", "open", "high", "low", "volume"]].values.astype('float32')
scaler = MinMaxScaler()
signal_data = scaler.fit_transform(signal_data)
train_size = int(len(signal_data) * 0.80)
test_size = len(signal_data) - train_size
train = signal_data[0:train_size]
test = signal_data[train_size:]
x_train, y_train = create_dataset(train, look_back)
x_test, y_test = create_dataset(test, look_back)
...
model.add(LSTM)
当我执行predict = model.predict(x_test)
和scaler.transfrom(predict)
时,会发生错误:
on-broadcastable output operand with shape (5,1) doesn't match the broadcast shape (5,5)
数据集具有5个特征。当我使用model.predict()
时,输出形状为(n,1),但是scaler.transform
需要(n,5)形状。
如果我在transform
之前model.predict
,则无法transform
,因为尺寸为3,
如果我在transform
之后model.predict
,形状是(n,1),那么我就不能transform
。
因此,我无法在scaler.transform
上应用model.predict()
。
我该如何解决这个问题?
答案 0 :(得分:0)
您的问题有点不清楚,但是根据您提供的信息,我正在提出自己的看法。
您已经使用以下代码转换了整个数据集:
signal_data = scaler.fit_transform(signal_data)
因此,您无需再次转换x_test
。您可以直接在其上调用model.predict
。如果您要测试的新数据尚未按上述方法进行转换,则必须对其进行转换。确保该新测试数据集也具有5个特征(而不是3个),因为您的模型已经训练了5个特征。
最后,时间序列预测结束后,如果您希望将缩放后的数据转换回其原始版本,则可以使用MinMaxScaler
实例的inverse_transform
函数。