rainPredictPlot = np.empty_like(data) trainPredictPlot[:, :] = np.nan trainPredictPlot[look_back:len(trainPredict)+look_back, :] = trainPredict testPredictPlot = np.empty_like(data) testPredictPlot[:, :] = np.nan testPredictPlot[len(trainPredict)+(look_back*2)+1:len(data)-1, :] = testPredict data3 = data[10000:10565] plt.plot(scaler.inverse_transform(data)) trainPredictPlot1 = trainPredictPlot[10000:10565] testPredictPlot1 = testPredictPlot[10000:10565] plt.plot(trainPredictPlot, color='green') plt.plot(testPredictPlot, color='red') plt.legend(['true', 'xpred', 'cpred']) plt.show()
时间: 2024-01-17 10:04:41 浏览: 28
这段代码是用于绘制一个预测结果图,其中trainPredictPlot和testPredictPlot是两个预测结果数组,分别代表训练集和测试集的预测结果。这两个数组的长度都是等于原始数据的长度,但是在未预测的部分都被赋值为了nan,只有预测过的部分才有实际的预测值。data3是原始数据的一个部分,plt.plot(scaler.inverse_transform(data))是绘制原始数据的曲线,plt.plot(trainPredictPlot, color='green')和plt.plot(testPredictPlot, color='red')分别是绘制训练集和测试集的预测结果曲线,颜色分别为绿色和红色。最后plt.legend(['true', 'xpred', 'cpred'])是给这三条曲线添加一个图例。
相关问题
绘制训练集真实值和预测值 trainPredictPlot = np.empty_like(data.values) trainPredictPlot[:, :] = np.nan trainPredictPlot[look_back:len(trainPredict)+look_back, :] = trainPredict plt.figure(figsize=(10,5)) plt.plot(data.values, label='True Data') plt.plot(trainPredictPlot, label='Predicted Data') plt.title('Training Set') plt.xlabel('Time/h') plt.ylabel('kwh') plt.legend() plt.show() # 绘制测试集真实值和预测值 testPredictPlot = np.empty_like(data.values) testPredictPlot[:, :] = np.nan testPredictPlot[len(trainPredict)+(look_back*2)+1:len(data)-1, :] = testPredict plt.figure(figsize=(10,5)) plt.plot(data.values, label='True Data') plt.plot(testPredictPlot, label='Predicted Data') plt.title('Testing Set') plt.xlabel('Time/h') plt.ylabel('kwh') plt.legend() plt.show()改写这段代码,使得训练集和测试集的曲线分别绘制在两张图上
修改后的代码如下:
```
# 绘制训练集真实值和预测值
trainPredictPlot = np.empty_like(data.values)
trainPredictPlot[:, :] = np.nan
trainPredictPlot[look_back:len(trainPredict)+look_back, :] = trainPredict
plt.figure(figsize=(10,5))
plt.plot(data.values, label='True Data')
plt.plot(trainPredictPlot, label='Predicted Data')
plt.title('Training Set')
plt.xlabel('Time/h')
plt.ylabel('kwh')
plt.legend()
plt.show()
# 绘制测试集真实值和预测值
testPredictPlot = np.empty_like(data.values)
testPredictPlot[:, :] = np.nan
testPredictPlot[len(trainPredict)+(look_back*2)+1:len(data)-1, :] = testPredict
plt.figure(figsize=(10,5))
plt.plot(data.values, label='True Data')
plt.plot(testPredictPlot, label='Predicted Data')
plt.title('Testing Set')
plt.xlabel('Time/h')
plt.ylabel('kwh')
plt.legend()
plt.show()
```
这样修改后,训练集和测试集的真实值和预测值将分别绘制在两张图上。
使用keras里面的lstm进行时间序列预测_实验:使用LSTM递归神经网络进行时间序列预测...
好的,让我们开始使用Keras中的LSTM模型进行时间序列预测。
首先,让我们导入所需的库:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Dense, LSTM
from sklearn.preprocessing import MinMaxScaler
```
接下来,我们将加载数据并进行预处理:
```python
# 加载数据
data = pd.read_csv('data.csv', index_col=0)
# 将数据转换为numpy数组
dataset = data.values
# 将数据类型转换为浮点型
dataset = dataset.astype('float32')
# 将数据缩放至0到1的范围内
scaler = MinMaxScaler(feature_range=(0, 1))
dataset = scaler.fit_transform(dataset)
# 将数据拆分为训练数据和测试数据
train_size = int(len(dataset) * 0.67)
test_size = len(dataset) - train_size
train_data, test_data = dataset[0:train_size, :], dataset[train_size:len(dataset), :]
# 将数据转换为适合LSTM输入的格式
def create_dataset(dataset, look_back=1):
X, Y = [], []
for i in range(len(dataset) - look_back - 1):
a = dataset[i:(i + look_back), 0]
X.append(a)
Y.append(dataset[i + look_back, 0])
return np.array(X), np.array(Y)
look_back = 5
train_X, train_Y = create_dataset(train_data, look_back)
test_X, test_Y = create_dataset(test_data, look_back)
# 将输入数据重塑为LSTM输入的3D格式
train_X = np.reshape(train_X, (train_X.shape[0], 1, train_X.shape[1]))
test_X = np.reshape(test_X, (test_X.shape[0], 1, test_X.shape[1]))
```
现在,我们将创建LSTM模型并进行训练:
```python
# 创建LSTM模型
model = Sequential()
model.add(LSTM(4, input_shape=(1, look_back)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(train_X, train_Y, epochs=100, batch_size=1, verbose=2)
# 使用训练好的模型进行预测
train_predict = model.predict(train_X)
test_predict = model.predict(test_X)
# 将预测结果反缩放回原始范围
train_predict = scaler.inverse_transform(train_predict)
train_Y = scaler.inverse_transform([train_Y])
test_predict = scaler.inverse_transform(test_predict)
test_Y = scaler.inverse_transform([test_Y])
# 计算均方根误差
train_score = np.sqrt(mean_squared_error(train_Y[0], train_predict[:, 0]))
test_score = np.sqrt(mean_squared_error(test_Y[0], test_predict[:, 0]))
print('Train Score: %.2f RMSE' % (train_score))
print('Test Score: %.2f RMSE' % (test_score))
```
最后,我们将绘制训练和测试数据的预测结果以及实际值:
```python
# 绘制训练数据的预测结果和实际值
train_predict_plot = np.empty_like(dataset)
train_predict_plot[:, :] = np.nan
train_predict_plot[look_back:len(train_predict) + look_back, :] = train_predict
plt.plot(scaler.inverse_transform(dataset))
plt.plot(train_predict_plot)
plt.show()
# 绘制测试数据的预测结果和实际值
test_predict_plot = np.empty_like(dataset)
test_predict_plot[:, :] = np.nan
test_predict_plot[len(train_predict) + (look_back * 2) + 1:len(dataset) - 1, :] = test_predict
plt.plot(scaler.inverse_transform(dataset))
plt.plot(test_predict_plot)
plt.show()
```
这就是使用Keras中的LSTM模型进行时间序列预测的基本流程。