FEEMD-快速EEMD

FEEMD是EEMD分解的快速实现,有学习于2014年开发并实现。相关文献发表在物理A期刊:

[1] Wang Y H ,  Yeh C H ,  Young H , et al. On the computational complexity of the empirical mode decomposition algorithm[J]. Physica A Statistical Mechanics & Its Applications, 2014, 400:159-167.

具体实现原理可参考相关文献。

直接上代码:

[imf] = feemd(X,Nstd,NE,numImf); % X为输入数据;Nstd,NE,可根据数据类型查找相关文献,numImf为自定义分解个数。
toc;

[m,n]=size(imf)
figure;  
for i=1:m
  subplot(round(m/2),2,i); plot(imf(i,:),'r','LineWIdth',1.5);
  ylabel(['IMF',int2str(i)]);
  xlim([1,n])
end
subplot(round(m/2),2,1); title('FEEMD分解');

FEEMF程序中包含四个参数,X为输入数据;Nstd,NE,可根据数据类型查找相关文献,numImf为自定义分解个数。

通过运算,可得出下面的分解图。

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
EEMD-BO-LSTM是一种用于时间序列预测的深度学习模型,它结合了经验模态分解(EEMD)、Bagging-Optimization(BO)和长短时记忆网络(LSTM)三种技术。下面是EEMD-BO-LSTM的详细介绍: 1. 经验模态分解(EEMD)是一种信号处理技术,它可以将非线性和非平稳信号分解成若干个固有模态函数(IMF),每个IMF都代表了信号中的一个特定频率范围内的振动模式。EEMD通过对信号进行多次分解,可以得到更加精细的IMF分量。 2. Bagging-Optimization(BO)是一种集成学习技术,它通过对多个模型进行训练和组合,来提高模型的预测性能。BO算法通过对模型的超参数进行优化,来提高模型的泛化能力和鲁棒性。 3. 长短时记忆网络(LSTM)是一种递归神经网络,它可以有效地处理时间序列数据,并且能够捕捉到序列中的长期依赖关系。LSTM通过使用门控单元来控制信息的流动,从而避免了梯度消失和梯度爆炸的问题。 EEMD-BO-LSTM模型的基本思路是:首先使用EEMD对原始时间序列进行分解,得到多个IMF分量;然后对每个IMF分量分别训练一个LSTM模型,并使用BO算法对LSTM模型的超参数进行优化;最后将多个LSTM模型的预测结果进行加权平均,得到最终的预测结果。 下面是EEMD-BO-LSTM模型的代码实现: ```python # 导入必要的库 import numpy as np from pyeemd import EEMD from keras.models import Sequential from keras.layers import LSTM, Dense from sklearn.metrics import mean_squared_error from sklearn.model_selection import train_test_split from sklearn.preprocessing import MinMaxScaler # 定义EEMD-BO-LSTM模型类 class EEMD_BO_LSTM: def __init__(self, n_imfs=5, n_estimators=10, max_depth=5, n_epochs=100, batch_size=32): self.n_imfs = n_imfs self.n_estimators = n_estimators self.max_depth = max_depth self.n_epochs = n_epochs self.batch_size = batch_size self.eemd = EEMD() self.scaler = MinMaxScaler() self.models = [] # 定义训练模型的方法 def fit(self, X, y): # 对原始数据进行归一化处理 X = self.scaler.fit_transform(X) y = self.scaler.fit_transform(y.reshape(-1, 1)) # 使用EEMD对原始数据进行分解 imfs = self.eemd.eemd(X, self.n_imfs) # 训练多个LSTM模型 for i in range(self.n_imfs): X_imf = imfs[i].reshape(-1, 1) X_train, X_test, y_train, y_test = train_test_split(X_imf, y, test_size=0.2, shuffle=False) model = Sequential() model.add(LSTM(self.max_depth, input_shape=(1, 1))) model.add(Dense(1)) model.compile(loss='mean_squared_error', optimizer='adam') model.fit(X_train.reshape(-1, 1, 1), y_train, epochs=self.n_epochs, batch_size=self.batch_size, verbose=0) self.models.append(model) # 定义预测方法 def predict(self, X): # 对原始数据进行归一化处理 X = self.scaler.transform(X) # 使用EEMD对原始数据进行分解 imfs = self.eemd.eemd(X, self.n_imfs) # 对每个IMF分量分别进行预测 y_pred = np.zeros((X.shape[0], 1)) for i in range(self.n_imfs): X_imf = imfs[i].reshape(-1, 1) y_pred_imf = self.models[i].predict(X_imf.reshape(-1, 1, 1)) y_pred += y_pred_imf # 对多个LSTM模型的预测结果进行加权平均 y_pred /= self.n_imfs # 对预测结果进行反归一化处理 y_pred = self.scaler.inverse_transform(y_pred) return y_pred.reshape(-1) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值