一、卷积神经网络
卷积神经网络(CNN)是一种利用卷积运算的深度学习结构。这允许神经网络减少特征空间,有效地过滤输入,防止过度拟合。并且由于其可以通过卷积运算有效地滤除时间序列中的噪声,使得能够产生一系列不包括异常值的稳健特性。同时CNN通常比LSTM训练更快,因为它们的操作可以并行。
卷积是通过一个内核来实现的,这个内核在模型拟合过程中也经过了训练。内核的步长决定了它在卷积的每一步移动的步数。在时序数据中,由于内核只能在时间维度中移动,导致内核只在一个方向(向右)移动,因此是一维卷积。另外为了防止卷积过程中丢失太多信息,通常会在原始数据的前后进行0值填充,然后不断移动内核,取其在不同位置与特征向量的点积,由于填充的关系,最终的得到的结果长度与原始特征向量的长度相同。
输入、输出与内核长度关系:output length = input length – kernel length + 1
二、CNN模型使用
CNN模型除了单独使用外,还可以与LSTM进行组合,形成一个单一的模型。
1、单步模式
1.1 CNN
由于CNN卷积操作的存在,因此为了保证预测输出达到所要求的长度,需要对输入数据进行处理,处理办法有两种,一种是加大输入长度,假如内核长度为3,那么当需要预测24个步长的数据时,根据input length=output length+kernel length-1可得应输入长度为24+3-1=26;另外一种办法是使用填充,在输入的前后进行0填充,下文中使用第一种方法。
KERNEL_WIDTH = 3
LABEL_WIDTH = 24
INPUT_WIDTH = LABEL_WIDTH + KERNEL_WIDTH - 1
conv_window = DataWindow(input_width=KERNEL_WIDTH, label_width=1, shift=1, label_columns=['traffic_volume'])
wide_conv_window = DataWindow(input_width=INPUT_WIDTH, label_width=LABEL_WIDTH, shift=1, label_columns=['traffic_volume'])
cnn_model = Sequential(