基于CEEMDAN-CNN-BiLSTM组合模型时间序列预测python代码

本文详细介绍了使用CEEMDAN分解、CNN和BiLSTM构建的时间序列预测模型的Python实现,包括预处理步骤、模型结构和多种评价指标。结果显示,该模型在测试集上表现出色,适用于不同类型的预测任务。
摘要由CSDN通过智能技术生成

整理了基于CEEMDAN-CNN-BiLSTM组合模型时间序列预测python代码,该代码注释十分齐全,采用RMSE、MAE、MAPE和R2等多种评价指标,效果优异,适合想发文章的同学。

1)首先对原始数据进行预处理;

2)对处理完的数据进行CEEMDAN分解,分解为K个模态分量和1个残差分量;

3)将各个模态分量输入模型,建立模型进行预测;

4)将各个预测结果相加得到最终的结果。

+----------------+--------------------+--------------------+-------------------+--------------------+--------------------+

|  测试集指标|    RMSE    |    MAE    |    MAPE    |     R2     |

| 预测指标: | 45.6469516 | 33.9829297 | 8.15348538% | 72.354598% |

值得注意的是,该模型根据需要可以更改为:

 单输入单步预测,
 单输入多步预测,
 多输入单步预测,
 多输入多步预测,

代码获取链接:基于CEEMDAN-CNN-BiLSTM组合模型时间序列预测python代码

CEEMDAN是一种信号分解方法,它可以将非线性和非平稳信号分解成若干个固有模态函数(IMF)的叠加。下面是CEEMDANPython实现代码: ```python import numpy as np from scipy.interpolate import UnivariateSpline def emd(x): x = x.astype(np.float64) t = np.arange(len(x)) imf = np.zeros((len(x), 2)) while True: if np.max(np.abs(x)) < 1e-10: break h = x sd = np.inf while sd > 0.1: spl = UnivariateSpline(t, h) h1 = h - spl(t) spl = UnivariateSpline(t, h1) h2 = h1 - spl(t) sd = np.sqrt(np.mean(h2 ** 2)) h = h1 - h2 imf[:, 0] += h imf[:, 1] += x - h x = imf[:, 1] return imf def ceemdan(x, n_imfs): x = x.astype(np.float64) imfs = np.zeros((len(x), n_imfs)) for i in range(n_imfs): imf = emd(x) imfs[:, i] = imf[:, 0] x -= imf[:, 0] imfs[:, -1] += x return imfs ``` 其中,`emd`函数实现了一次EMD分解,`ceemdan`函数实现了多次EMD分解,得到多个IMF。具体实现过程如下: 1. 首先将输入信号`x`转换为浮点数类型,并生成时间序列`t`。 2. 进入循环,如果信号的最大值小于1e-10,则跳出循环。 3. 将当前信号`x`赋值给变量`h`,并初始化标准差`sd`为正无穷。 4. 进入内层循环,使用样条插值方法拟合信号`h`,得到拟合曲线`spl(t)`。 5. 计算残差信号`h1=h-spl(t)`,再次使用样条插值方法拟合`h1`,得到拟合曲线`spl(t)`。 6. 计算残差信号`h2=h1-spl(t)`的标准差`sd`,如果`sd>0.1`,则将`h=h1-h2`,继续进行内层循环;否则跳出内层循环。 7. 将分解得到的IMF分别存储在二维数组`imf`的第一列中,将剩余信号存储在第二列中。 8. 将剩余信号作为新的输入信号,继续进行EMD分解,直到剩余信号的最大值小于1e-10或者达到最大迭代次数。 9. `ceemdan`函数调用多次`emd`函数,得到多个IMF,最后一个IMF加上剩余信号作为最后一个分量。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值