区间概率预测python|QR-CNN-BiLSTM+KDE分位数-卷积-双向长短期记忆神经网络-时间序列区间概率预测+核密度估计

区间预测python|QR-CNN-BiLSTM+KDE分位数-卷积-双向长短期记忆神经网络-核密度估计-回归时间序列区间预测

模型输出展示:

(图中是只设置了20次迭代的预测结果,宽度较宽,可自行修改迭代参数,获取更窄的预测区间)




注:可输出所有时间点的概率预测结果,数量较多,程序中为了随机采样了部分时间点绘制了预测结果

模型详细介绍:

python 复制代码
模型详细介绍如下:
1、	输入:多变量(多特征),输出:单变量(单特征),即多变量回归
2、	实现了:区间预测(采用分位数回归)+概率预测(采用核密度估计)
3、	绘图:区间预测结果+多个概率预测结果
4、	评价指标为:85%、90%、95%三个置信水平下的PICP、PINAW及CRPS值
5、	本程序采用数据为:光伏数据(包含辐照度、温度等多个变量),数据为附赠
6、	Python程序,基于tensorflow(会发包版本)
7、	数据可直接读取excel文件,更换简单,只保证在我的数据上能运行出较为理想结果(若需更好的结果自行调试),其他数据集效果自己调试。
8、程序中包含数据预处理部分,包含缺失值处理、归一化与反归一化等
9、本程序分位数个数设置为200个,这个可以自行调整。

模型用途:

python 复制代码
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

python 复制代码
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
相关推荐
databook11 小时前
Manim实现闪光轨迹特效
后端·python·动效
Juchecar13 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户83562907805113 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_13 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
数据智能老司机20 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机21 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机21 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机21 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i21 小时前
drf初步梳理
python·django
每日AI新事件21 小时前
python的异步函数
python