CNN-LSTM预测代码
时间: 2023-10-24 14:07:46 浏览: 117
【单变量输入多步预测】基于CNN-BiLSTM的风电功率预测研究附Matlab代码.rar
5星 · 资源好评率100%
以下是一个简单的CNN-LSTM预测代码示例,用于预测时间序列数据:
```python
import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers import Dense, Conv1D, MaxPooling1D, LSTM, Dropout
from sklearn.preprocessing import MinMaxScaler
# 加载数据
data = pd.read_csv('data.csv')
# 数据预处理
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data)
# 划分训练集和测试集
train_size = int(len(scaled_data) * 0.7)
train_data = scaled_data[0:train_size, :]
test_data = scaled_data[train_size:len(scaled_data), :]
# 创建训练集和测试集
def create_dataset(dataset, look_back):
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 = 30
trainX, trainY = create_dataset(train_data, look_back)
testX, testY = create_dataset(test_data, look_back)
# 将数据重塑为3D格式,以便输入到CNN-LSTM模型中
trainX = np.reshape(trainX, (trainX.shape[0], trainX.shape[1], 1))
testX = np.reshape(testX, (testX.shape[0], testX.shape[1], 1))
# 创建CNN-LSTM模型
model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(look_back, 1)))
model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
model.add(Dropout(0.5))
model.add(MaxPooling1D(pool_size=2))
model.add(LSTM(100))
model.add(Dropout(0.5))
model.add(Dense(1))
# 编译模型
model.compile(loss='mean_squared_error', optimizer='adam')
# 训练模型
model.fit(trainX, trainY, epochs=50, batch_size=64)
# 在测试集上进行预测
testPredict = model.predict(testX)
# 反归一化预测值
testPredict = scaler.inverse_transform(testPredict)
# 反归一化观察值
testY = scaler.inverse_transform([testY])
# 计算均方根误差
rmse = np.sqrt(np.mean((testPredict - testY) ** 2))
print('Test RMSE: %.3f' % rmse)
```
该代码包括以下步骤:
1. 加载数据并进行数据预处理;
2. 划分训练集和测试集;
3. 创建训练集和测试集;
4. 将数据重塑为3D格式,以便输入到CNN-LSTM模型中;
5. 创建CNN-LSTM模型;
6. 编译模型;
7. 训练模型;
8. 在测试集上进行预测;
9. 反归一化预测值和观察值;
10. 计算均方根误差(RMSE)。
请注意,该代码仅用于演示目的。实际上,您可能需要根据您的数据和问题进行一些修改和调整。
阅读全文