区间概率预测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
相关推荐
.生产的驴2 小时前
SpringBoot AOP切入点表达式
spring boot·后端·python
逆水寻舟2 小时前
算法学习记录2
python·学习·算法
B站计算机毕业设计超人3 小时前
计算机毕业设计Python深度学习美食推荐系统 美食可视化 美食数据分析大屏 美食爬虫 美团爬虫 机器学习 大数据毕业设计 Django Vue.js
大数据·python·深度学习·机器学习·数据分析·课程设计·推荐算法
码农超哥同学3 小时前
Python面试题:请解释 `lambda` 函数是什么,并举一个例子
开发语言·python·面试·编程
sssjjww3 小时前
python输出日志out.log相关问题(缓存机制)
java·python·缓存
Uluoyu3 小时前
python爬虫爬取中国国际招标有限公司
开发语言·爬虫·python
Python私教3 小时前
zdppy+onlyoffice+vue3解决文档加载和文档强制保存时弹出警告的问题
vue.js·python
菜鸟赵大宝4 小时前
【Python】Python中TODO的用法解析
python·pycharm
Narutolxy4 小时前
如何高效管理和迁移Python开发环境:从Conda到纯Python的转换指南
开发语言·python·conda
萌狼蓝天4 小时前
[python]Markdown图片引用格式批处理桌面应用程序
开发语言·python