声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类算法的家人,可关注我的VX公众号:python算法小当家,不定期会有很多免费代码分享~
CNN-Transformer实现完美融合
CNN层在特征维度上提取有价值的信息,补偿了Transformer编码器从多元数据集中挖掘信息的有限能力。同时在不同编码器层之间使用多头注意层能有效地提高预测精度。
本文将使用CNN-Transformer完成电力负荷多元时间序列预测,这个模型当前用的人还比较少,且不仅适用于电力负荷预测,如光伏预测、股价预测等时间序列预测也是可以用的。下面先给大家看实验结果,模型原理在后面!!!
CNN-Transformer时间序列预测
输入数据(部分展示)
date | dry bulb temperature | dew point temperature | wet bulb temperature | humidity | price | Load |
---|---|---|---|---|---|---|
2007/5/1 0:00 | 17.6 | 10.1 | 13.6 | 61 | 56.27 | 8014.32 |
2007/5/1 0:30 | 17.3 | 10.25 | 13.55 | 63 | 53.64 | 7872.69 |
2007/5/1 1:00 | 17 | 10.4 | 13.5 | 65 | 39.47 | 7693.98 |
2007/5/1 1:30 | 16.75 | 10.55 | 13.45 | 67 | 51.36 | 7569.55 |
数据集介绍:
date:日期
dry bulb temperature:干球温度
dew point temperature:露点温度
wet bulb temperature:湿球温度
humidity:湿度
price:电价
Load:负荷(输出)
数据划分
# 定义输入数据,输出标签数据的格式的函数 ,同时将数据转换模型可接受的3D格式
def create_dataset(datasetX, datasetY, look_back=1, T=1):
dataX, dataY = [], []
for i in range(0, len(datasetX) - look_back, T):
a = datasetX[i:(i + look_back), :]
dataX.append(a)
dataY.append(datasetY[i + look_back:i + look_back + T, 0])
return np.array(dataX), np.array(dataY)
create_dataset函数用于将输入数据和输出标签数据格式化,并转换成模型可接受的3D格式。该函数通过滑动窗口的方式从时间序列数据中创建特征和标签。
模型创建
model = create_model(
input_shape=(look_back, num_features),
num_blocks=3, embed_dim=32, dense_dim=64,
num_heads=4, dropout_rate=0.1, output_sequence_length=T)
create_model函数用于创建CNN-Transformer时间序列预测模型。参数说明如下:
- input_shape:输入数据的形状,通常为三维元组,包含look_back和num_features。
- num_blocks:模型中的块数,表示模型由多少个重复模块组成。
- embed_dim:嵌入维度,表示嵌入层的输出维度。
- dense_dim:密集层的维度,表示全连接层的节点数量。
- num_heads:多头注意力机制的头数,表示每个注意力层的注意力头数量。
- dropout_rate:Dropout的比例,表示在训练过程中随机丢弃神经元的比例,防止过拟合。
- output_sequence_length:输出序列的长度,通常与预测步长T一致。