区间预测python|QR-CNN-BiLSTM+KDE分位数-卷积-双向长短期记忆神经网络-核密度估计-回归时间序列区间预测
模型输出展示:
(图中是只设置了20次迭代的预测结果,宽度较宽,可自行修改迭代参数,获取更窄的预测区间)
注:可输出所有时间点的概率预测结果,数量较多,程序中为了随机采样了部分时间点绘制了预测结果
模型详细介绍:
模型详细介绍如下:
1、 输入:多变量(多特征),输出:单变量(单特征),即多变量回归
2、 实现了:区间预测(采用分位数回归)+概率预测(采用核密度估计)
3、 绘图:区间预测结果+多个概率预测结果
4、 评价指标为:85%、90%、95%三个置信水平下的PICP、PINAW及CRPS值
5、 本程序采用数据为:光伏数据(包含辐照度、温度等多个变量),数据为附赠
6、 Python程序,基于tensorflow(会发包版本)
7、 数据可直接读取excel文件,更换简单,只保证在我的数据上能运行出较为理想结果(若需更好的结果自行调试),其他数据集效果自己调试。
8、程序中包含数据预处理部分,包含缺失值处理、归一化与反归一化等
9、本程序分位数个数设置为200个,这个可以自行调整。
模型用途:
1、 光伏预测
2、 负荷预测
3、 风电预测等
模型原理介绍:
QR-CNN-BiLSTM模型是一个结合了Quantile Regression (QR),卷积神经网络 (CNN) 和双向长短期记忆网络 (BiLSTM) 的混合模型,它可以用于进行区间预测。区间预测不同于点预测,它提供了一个预测区间来表示未来值的不确定性,而不是给出一个具体的数值。这种模型特别适用于时间序列数据,可以捕捉数据的时间依赖性和非线性特征。除此之外,模型采用了核密度估计实现了概率预测。
模型实现流程:
1、数据预处理:
数据标准化:将时间序列数据标准化,以便模型更容易学习。
序列化:将时间序列数据转换为可供模型学习的序列样本。
缺失值填补:补充缺失值
2、 构建模型:
Quantile Regression
(QR):分位数回归用于估计条件分位数函数。在区间预测中,我们通常对特定的分位数(如5%和95%)感兴趣,这样可以构建一个90%的预测区间。
卷积神经网络 (CNN):CNN可以从序列数据中提取局部特征。在时间序列分析中,卷积层可以帮助模型捕捉到短期的趋势和模式。
在这里插入图片描述
双向长短期记忆网络
(BiLSTM):BiLSTM是一种特殊的RNN,它能够学习长期依赖关系。BiLSTM通过两个方向的LSTM层来处理数据,一个处理正向序列,另一个处理反向序列。这样可以同时捕捉到过去和未来的信息。
3、训练模型:
定义损失函数:在QR中,损失函数是基于分位数的,这意味着不同的分位数会有不同的损失函数。
优化器选择:选择一个适合的优化器,如Adam,来最小化损失函数。
训练过程:使用训练数据来训练模型,通过反向传播算法来更新模型的权重。
4、预测、评估:
使用训练好的模型进行预测,对于每个预测点,模型会输出多个分位数的预测值,形成预测区间。
还会使用核密度估计实现概率密度预测
评估模型的性能,可以通过计算预测区间覆盖实际值的比例、区间宽度等指标来进行。
5、超参数调整:
根据模型的性能,可能需要调整模型的超参数,如学习率、批大小、隐藏层的单元数等,以获得更好的预测效果。
程序源码(完整程序和数据,请私信博主获取,也可闲鱼搜索:阿鹿学术2,直接下单):
私信未及时回复可添加k—o—u—k–o—u:1493502034
def create_cnn_bilstm_model(input_shape, cnn_filters, cnn_kernel_size, cnn_activation, max_pool_size,
lstm_units, dropout_rate, dense_units, dense_activation1, dense_activation2, learning_rate):
model = Sequential()
model.add(MaxPooling1D(pool_size=max_pool_size,padding='same'))
model.add(Dense(units=dense_units, activation=dense_activation1))
model.add(Dropout(dropout_rate))
……
optimizer = Adam(learning_rate=learning_rate)
model.compile(optimizer=optimizer, loss=loss)
return model