LSTM预测算法预测未来两天数据python代码,并画图
时间: 2024-06-01 16:03:02 浏览: 147
这里提供一个简单的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
```
然后,我们需要读取数据并进行预处理。这里我们以某个公司股票价格的时间序列数据为例:
```python
df = pd.read_csv('stock_price.csv', index_col='Date', parse_dates=True)
data = df.filter(['Close']).values
train_data_len = int(np.ceil(0.8 * len(data)))
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data)
train_data = scaled_data[0:train_data_len, :]
x_train = []
y_train = []
for i in range(60, train_data_len):
x_train.append(train_data[i-60:i, 0])
y_train.append(train_data[i, 0])
x_train, y_train = np.array(x_train), np.array(y_train)
x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1))
```
这里将数据按照80%训练集和20%测试集的比例进行划分,使用MinMaxScaler进行归一化处理,然后将训练集按照60个为一组进行切分,即将前60个数据作为输入,第61个数据作为输出,以此类推。
接下来,我们可以构建LSTM模型:
```python
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(x_train.shape[1], 1)))
model.add(LSTM(50, return_sequences=False))
model.add(Dense(25))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mean_squared_error')
```
这里我们构建了一个包含两个LSTM层的模型,其中第一个LSTM层返回的是序列,第二个LSTM层则不返回序列。最后,我们添加了两个全连接层,其中最后一个输出层的输出维度为1,表示只输出一个值。
接下来,我们可以使用训练集对模型进行训练:
```python
model.fit(x_train, y_train, batch_size=1, epochs=1)
```
最后,我们可以使用模型对未来两天的数据进行预测,并将预测结果绘制成图表:
```python
test_data = scaled_data[train_data_len - 60:, :]
x_test = []
y_test = data[train_data_len:, :]
for i in range(60, len(test_data)):
x_test.append(test_data[i-60:i, 0])
x_test = np.array(x_test)
x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1))
predictions = model.predict(x_test)
predictions = scaler.inverse_transform(predictions)
rmse = np.sqrt(np.mean((predictions - y_test)**2))
print('RMSE:', rmse)
train = data[:train_data_len]
valid = data[train_data_len:]
valid['Predictions'] = predictions
plt.figure(figsize=(16, 8))
plt.title('LSTM Model')
plt.xlabel('Date', fontsize=18)
plt.ylabel('Close Price USD ($)', fontsize=18)
plt.plot(train['Close'])
plt.plot(valid[['Close', 'Predictions']])
plt.legend(['Train', 'Val', 'Predictions'], loc='lower right')
plt.show()
```
这里我们使用了测试集进行预测,并将预测结果和真实值绘制成图表,以便于观察预测结果的准确性。
完整的代码如下:
阅读全文