多变量lstm股票预测代码
时间: 2023-08-06 20:04:19 浏览: 106
以下是一个使用多变量LSTM进行股票预测的Python代码示例,供参考:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, LSTM
# 读取数据
data = pd.read_csv('stock_data.csv')
# 选择需要预测的特征变量
features = ['Open', 'High', 'Low', 'Close', 'Volume']
# 数据预处理
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data[features])
# 划分训练集和测试集
train_size = int(len(scaled_data) * 0.8)
test_size = len(scaled_data) - train_size
train_data = scaled_data[0:train_size, :]
test_data = scaled_data[train_size:len(scaled_data), :]
# 构建训练数据集
def create_dataset(dataset, look_back=1):
data_X, data_Y = [], []
for i in range(len(dataset) - look_back - 1):
a = dataset[i:(i + look_back), :]
data_X.append(a)
data_Y.append(dataset[i + look_back, 0])
return np.array(data_X), np.array(data_Y)
look_back = 60
train_X, train_Y = create_dataset(train_data, look_back)
test_X, test_Y = create_dataset(test_data, look_back)
# 构建LSTM模型
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(train_X.shape[1], train_X.shape[2])))
model.add(LSTM(units=50))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(train_X, train_Y, epochs=100, batch_size=64, verbose=2)
# 预测测试集
test_predict = model.predict(test_X)
test_predict = scaler.inverse_transform(test_predict)
test_Y = scaler.inverse_transform([test_Y])
# 计算预测误差
test_rmse = np.sqrt(np.mean(np.power((test_Y - test_predict), 2)))
print('Test RMSE: %.2f' % test_rmse)
# 绘制预测结果和实际结果的曲线
plt.plot(test_Y.flatten(), label='Real')
plt.plot(test_predict.flatten(), label='Predict')
plt.legend()
plt.show()
```
其中,`stock_data.csv`为股票历史数据文件,包含Open、High、Low、Close和Volume等特征变量。通过`MinMaxScaler`进行数据归一化处理,并将数据集分为训练集和测试集。通过`create_dataset`函数构建LSTM模型所需的训练数据集,其中`look_back`参数表示使用前多少个时间步来预测下一个时间步的股票价格。构建LSTM模型后,使用`model.predict`方法对测试集进行预测,并使用`scaler.inverse_transform`方法将预测结果反归一化处理。最后,计算预测误差并绘制预测结果和实际结果的曲线。
阅读全文