使用多变量LSTM进行股票预测的Python完整代码
时间: 2024-03-30 21:35:33 浏览: 55
以下是使用多变量LSTM进行股票预测的Python完整代码,代码中使用了Keras库和Pandas库:
```
import pandas as pd
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, LSTM
from sklearn.preprocessing import MinMaxScaler
# 载入数据集
dataset = pd.read_csv('stock.csv', usecols=[1,2,3,4])
# 将数据集转换为numpy数组
data = dataset.values
# 将数据集归一化
scaler = MinMaxScaler(feature_range=(0,1))
scaled_data = scaler.fit_transform(data)
# 定义函数,将数据集转换为训练集和测试集
def create_dataset(dataset, time_step=1):
dataX, dataY = [], []
for i in range(len(dataset)-time_step-1):
a = dataset[i:(i+time_step), :]
dataX.append(a)
dataY.append(dataset[i+time_step, 0])
return np.array(dataX), np.array(dataY)
# 设置时间步长
time_step = 60
# 创建训练集和测试集
train_data, test_data = scaled_data[0:int(len(data)*0.7), :], scaled_data[int(len(data)*0.7):len(data), :]
# 将训练集和测试集转换为X和Y
trainX, trainY = create_dataset(train_data, time_step)
testX, testY = create_dataset(test_data, time_step)
# 重塑输入以符合LSTM的3D输入格式 [样本数, 时间步长, 特征数]
trainX = np.reshape(trainX, (trainX.shape[0], trainX.shape[1], 4))
testX = np.reshape(testX, (testX.shape[0], testX.shape[1], 4))
# 构建模型
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(trainX.shape[1], 4)))
model.add(LSTM(units=50))
model.add(Dense(units=1))
model.compile(optimizer='adam', loss='mean_squared_error')
# 训练模型
model.fit(trainX, trainY, epochs=50, batch_size=64)
# 使用模型进行预测
train_predict = model.predict(trainX)
test_predict = model.predict(testX)
# 将预测结果转换为原始范围
train_predict = scaler.inverse_transform(train_predict)
trainY = scaler.inverse_transform([trainY])
test_predict = scaler.inverse_transform(test_predict)
testY = scaler.inverse_transform([testY])
# 计算均方根误差
trainScore = np.sqrt(mean_squared_error(trainY[0], train_predict[:,0]))
print('Train Score: %.2f RMSE' % (trainScore))
testScore = np.sqrt(mean_squared_error(testY[0], test_predict[:,0]))
print('Test Score: %.2f RMSE' % (testScore))
```
需要注意的是,这段代码中的数据集是从一个名为'stock.csv'的文件中读取的,且该文件的格式为:每行代表一天的数据,共有四列,分别为'open','high','low'和'close'。在使用该代码时,请将数据集文件名替换为您自己的数据集文件名,并确保数据集文件的格式与上述描述相同。
阅读全文