一维cnn时间序列预测代码
时间: 2023-08-11 09:07:54 浏览: 97
以下是一个基本的一维 CNN 时间序列预测的 Python 代码示例:
``` python
import numpy as np
from keras.layers import Conv1D, MaxPooling1D, Flatten, Dense
from keras.models import Sequential
# 生成时间序列数据
def generate_data(n):
x = np.arange(n)
y = np.sin(x) + np.random.normal(0, 0.1, n)
return y
# 定义时间窗口大小和步长
window_size = 10
stride = 1
# 生成训练数据和目标数据
data = generate_data(1000)
X_train = []
y_train = []
for i in range(window_size, len(data)):
X_train.append(data[i-window_size:i])
y_train.append(data[i])
X_train = np.array(X_train)
y_train = np.array(y_train)
# 构建一维 CNN 模型
model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(window_size, 1)))
model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(50, activation='relu'))
model.add(Dense(1))
# 编译模型
model.compile(loss='mse', optimizer='adam')
# 训练模型
model.fit(X_train.reshape(-1, window_size, 1), y_train, epochs=100, batch_size=64)
# 生成测试数据和目标数据
test_data = generate_data(200)
X_test = []
y_test = []
for i in range(window_size, len(test_data)):
X_test.append(test_data[i-window_size:i])
y_test.append(test_data[i])
X_test = np.array(X_test)
y_test = np.array(y_test)
# 预测结果
y_pred = model.predict(X_test.reshape(-1, window_size, 1))
# 打印预测结果和真实值
for i in range(len(y_pred)):
print('Predicted:', y_pred[i], 'True:', y_test[i])
```
其中,`generate_data` 函数用于生成时间序列数据。`window_size` 和 `stride` 分别表示时间窗口大小和步长,用于生成训练数据和目标数据。`Conv1D` 是一维卷积层,用于提取时间序列数据的特征。`MaxPooling1D` 是一维最大池化层,用于减小特征图的大小。`Flatten` 层将多维特征图压缩成一维向量,`Dense` 是全连接层,用于进行回归预测。`compile` 方法用于编译模型,`fit` 方法用于训练模型,`predict` 方法用于预测结果。最后,打印预测结果和真实值。
阅读全文