【CEEMDAN-VMD-Transformer-LSTM】双重分解+Transformer-LSTM多变量时序预测,多变量输入模型。matlab代码,2023b及其以上。
1.CEEMDAN分解,计算样本熵,根据样本熵进行kmeans聚类,调用VMD对高频分量二次分解,VMD分解的高频分量与前分量作为Transformer-LSTM模型的目标输出分别预测后相加。
2.CEEMDAN-VMD-Transformer-LSTM模型处理数据,具有更高的准确率,能够跟踪数据的趋势以及变化。VMD 模型处理非线性、非平稳以及复杂的数据,表现得比EMD 系列更好,因此将重构的数据通过VMD 模型分解,提高了模型的准确度。
评价指标包括:R2、MAE、MSE、RMSE和MAPE等,代码质量极高,方便学习和替换数据。参数可方便更改,程序和excel数据放在一个文件夹,注释明细。
num_size = 0.8; % 训练集占数据集比例
num_train_s = round(num_size * num_samples); % 训练集样本个数
%% 以下几行代码是为了方便归一化,一般不需要更改!
P_train = res(1: num_train_s,1);
P_train = reshape(cell2mat(P_train)',n_in*or_dim,num_train_s);
T_train = res(1: num_train_s,2);
T_train = cell2mat(T_train)';
P_test = res(num_train_s+1: end,1);
P_test = reshape(cell2mat(P_test)',n_in*or_dim,num_samples-num_train_s);
T_test = res(num_train_s+1: end,2);
T_test = cell2mat(T_test)';
%% 划分训练集和测试集
M = size(P_train, 2);
N = size(P_test, 2);
orm = size(P_train,1) ; % 记录特征数据维度
n_out = 1 ; % % 预测步长
% 数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);
[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);
智能算法及其模型预测