【负荷预测】基于变分模态分解(VMD-CNN-LSTM)的短期电力负荷预测【Python】

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 本项目实现了一种基于变分模态分解(VMD)的短期电力负荷预测模型——VMD-CNN-LSTM。通过VMD技术将原始电力负荷数据分解为多个平稳子序列,结合温度和时间等特征构建矩阵,输入CNN-LSTM模型训练,最终叠加重构得到预测结果。此方法有效应对非线性和非平稳性引起的误差,精度高且稳定性强。程序采用Python编写,注释清晰,运行稳定,并提供直观的可视化结果。附带部分代码及详细运行结果展示,下载链接已提供。

1 主要内容

该程序实现一种基于变分模态分解的短期电力预测模型——VMD-CNN-LSTM 模型。该模型利用 VMD 技术对原始电力负荷数据及其相关特征进行分解,并通过全连接层来输出预测结果,这种方法精度较高,可有效应对电力负荷数据的非平稳性和非线性引起的预测误差,主要原理是通过将负荷数据分解为多个相对平稳的子序列,并与其他影响因素重构特征矩阵,再使用模型重新训练,从而提升预测精度。该程序采用python编写,注释清楚,运行稳定,出图效果好!


变分模态分解法


在 2014 年,Konstantin Dragomiretski 和 Dominique Zosso 提出了一种用于信号分解技术的新方法——变分模态分解法(Variational mode decomposition,VMD)。这种方法是非递归的,采用自适应的变分框架来分解信号。VMD 与传统的信号分解技术相比,其分解后的子序列在保留了原始数据序列趋势特征的同时,也能有效避免了“模态混叠”对预测模型的干扰,且在处理噪声较大的信号时表现出更好的分解性能和更强的鲁棒性。

VMD 分解原始数据的步骤如下:

Step1. 针对每个模态序列,使用希尔伯特变换计算与每个模态序列相关的分析信号,以此来获取单边频谱信号。


Step2. 通过向每个子序列新增指数项来对中心频率进行调整,并将子序列的频谱信号移动至基带。


Step3. 通过解调信号的高斯平滑度得到的约束变分表达式。



tep4. 为了将上述两个公式转化成无约束的求解式,引入二次惩罚项α和拉格朗日惩罚算子λ,得到增广拉格朗日表达式。


Step5. 利用乘数的交替方向法寻找增广拉格朗日表达式的鞍点,得到各模态序列的频域更新。


式中,n 表示迭代次数。

拉格朗日乘法算子λ需要满足下式。


Step6. 循环求解增广拉格朗日表达式鞍点,直到模态分量满足:


式中,ε是一个常量,决定了分解的精度和迭代次数。

VMD-CNN-LSTM负荷预测


首先通过 VMD 分解原始电力负荷数据序列,得到 8个平滑稳定的 IMF 子序列,在一定程度上解决了原始数据带来的非线性问题。其次分别将 8 个子序列与温度和时间等特征进行合并,构建特征矩阵,并进行归一化处理。之后将处理好的8个特征矩阵输入CNN-LSTM 模型中进行训练,输出8个子序列的预测值;最后将8个预测子序列进行叠加重构,输出最终的电力负荷预测结果。


2 部分代码


# 显示图形。residuals = actual_test - pre_testplt.figure(figsize=(6,4), dpi=120)plt.hist(residuals, bins=30, edgecolor='k', alpha=0.7)plt.title('Residual Distribution')plt.xlabel('Prediction Error')plt.ylabel('Frequency')plt.axvline(x=0, color='r', linestyle='--')plt.show()plt.figure(figsize=(10,3), dpi=120)plt.fill_between(range(len(pre_test)),                  pre_test[:,0] - 1.96*np.std(residuals),                 pre_test[:,0] + 1.96*np.std(residuals),                 alpha=0.3, color='gray', label='95% CI')plt.plot(pre_test[:,0], '--', linewidth=1, label='Predicted')plt.plot(actual_test[:,0], '-', linewidth=1, label='Actual')plt.title('Prediction with Confidence Interval')plt.legend()plt.show()

3 运行结果

4 下载链接

链接

相关文章
|
9月前
|
机器学习/深度学习 数据采集 数据挖掘
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
309 2
|
9月前
|
机器学习/深度学习 算法 安全
【PSO-LSTM】基于PSO优化LSTM网络的电力负荷预测(Python代码实现)
【PSO-LSTM】基于PSO优化LSTM网络的电力负荷预测(Python代码实现)
416 0
|
8月前
|
机器学习/深度学习 数据采集 并行计算
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
862 2
|
9月前
|
机器学习/深度学习 数据采集 算法
Python|基于改进粒子群IPSO与LSTM的短期电力负荷预测研究
Python|基于改进粒子群IPSO与LSTM的短期电力负荷预测研究
358 4
|
9月前
|
机器学习/深度学习 数据采集 算法
【CNN-BiLSTM-attention】基于高斯混合模型聚类的风电场短期功率预测方法(Python&matlab代码实现)
【CNN-BiLSTM-attention】基于高斯混合模型聚类的风电场短期功率预测方法(Python&matlab代码实现)
449 4
|
8月前
|
机器学习/深度学习 数据采集 算法
基于VMD-LSTM的电力负荷预测研究(Matlab代码实现)
基于VMD-LSTM的电力负荷预测研究(Matlab代码实现)
529 0
|
8月前
|
机器学习/深度学习 传感器 数据采集
基于贝叶斯优化CNN-LSTM混合神经网络预测(Matlab代码实现)
基于贝叶斯优化CNN-LSTM混合神经网络预测(Matlab代码实现)
1204 0
|
8月前
|
机器学习/深度学习 传感器 数据采集
【故障识别】基于CNN-SVM卷积神经网络结合支持向量机的数据分类预测研究(Matlab代码实现)
【故障识别】基于CNN-SVM卷积神经网络结合支持向量机的数据分类预测研究(Matlab代码实现)
493 0
|
10月前
|
机器学习/深度学习 人工智能 PyTorch
零基础入门CNN:聚AI卷积神经网络核心原理与工业级实战指南
卷积神经网络(CNN)通过局部感知和权值共享两大特性,成为计算机视觉的核心技术。本文详解CNN的卷积操作、架构设计、超参数调优及感受野计算,结合代码示例展示其在图像分类、目标检测等领域的应用价值。
543 7
|
9月前
|
机器学习/深度学习 数据采集 TensorFlow
基于CNN-GRU-Attention混合神经网络的负荷预测方法(Python代码实现)
基于CNN-GRU-Attention混合神经网络的负荷预测方法(Python代码实现)
484 0

推荐镜像

更多