如何解决在 Python 的 LSTM 模型中使用 scaler.inverse_transform 时的值错误
我正在使用 LSTM 模型做一个关于股市预测的项目。为此,我采用了多个指标,并在其他值中调整了收盘价和收盘价,作为模型的输入。主要目的是预测调整后的收盘价。 我已经在 0 和 1 之间转换了我的数据并将其输入到 LSTM 模型中。结果也保持在 0 和 1 之间,为了获得正确的输出,我需要将其转换回,因为它与我的原始数据值相同。但在这里我得到一个错误:
ValueError: non-broadcastable output operand with shape (560,1) doesn't match the broadcast shape (560,9)
这就是我制作训练数据的方式
data = df.filter(items= ["High","Low","Open","Close","Adj Close","Volume","VWAP","MACD","RSI"])
data = data.fillna(0)
dataset = data.values
training_data_len = math.ceil(len(dataset) * 0.8)
scaler = MinMaxScaler(feature_range=(0,1))
dataset = scaler.fit_transform(dataset)
x_train = []
y_train = []
# the 60 days are being used to train the data and then the 61st day is used for testing the model
n = 60
for i in range(n,training_data_len):
x_train.append(dataset[i-n : i])
y_train.append(dataset[i,4])
# if i<=60:
# print(x_train)
# print(y_train)
# print()
print("x_train Length : ",len(x_train))
print("y_train Length : ",len(y_train))
# Converting x_train and y_train to numpy arrays
x_train = np.array(x_train)
y_train = np.array(y_train)
构建模型
# Building the LSTM Model
model = Sequential()
model.add(LSTM(100,return_sequences=True,input_shape = (x_train.shape[1],x_train.shape[2])))
model.add(LSTM(100,return_sequences=False))
model.add(Dense(50))
model.add(Dense(25))
#model.add(Dropout(0.5))
model.add(Dense(1))
model.summary()
# Compiling the Model
model.compile(optimizer= "adam",loss="mean_squared_error")
# Traing the Model
model.fit(x_train,y_train,batch_size = 32,epochs = 12)
预测
# Scaling the Testing Data after training data to the end of the total input data
test_data = dataset[training_data_len - 60 :,:]
# Creating the x_test and y_test datasets
x_test = []
y_test = dataset[training_data_len :,4]
for i in range(60,len(test_data)):
x_test.append(test_data[i-60 : i])
# Converting the data to a numpy array
x_test = np.array(x_test)
print(x_test.shape)
print(y_test.shape)
# Models Predictions
predictions = model.predict(x_test)
# predictions = np.reshape(predictions,(predictions.shape[0],x_test.shape[2]))
# y_test = np.reshape(y_test,(y_test.shape[0],1))
predictions = scaler.inverse_transform(predictions) # To change the Scaled Data back to Normal
# Getting the Root Mean Square Error (RMSE)
rmse = np.sqrt(np.mean(predictions - y_test)**2 )
但是在反向缩放时我得到了错误
ValueError: non-broadcastable output operand with shape (560,9)
x_train 形状:(2182,60,9)
y_train 形状:(2182,)
x_test 形状:(560,9)
y_test 形状:(560,1)
如果有人想进一步检查,我可以向他们发送 Python Notebook
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。