【CEEMDAN-VMD-TCN-LSTM】双重分解+时间卷积神经网络+长短期记忆神经网络多变量时序预测,多变量输入模型。matlab代码,2021b及其以上。
1.CEEMDAN分解,计算样本熵,根据样本熵进行kmeans聚类,调用VMD对高频分量二次分解,VMD分解的高频分量与前分量作为时间卷积长短期记忆神经网络模型的目标输出分别预测后相加。
2.CEEMDAN-VMD-TCN-LSTM模型处理数据,具有更高的准确率,能够跟踪数据的趋势以及变化。VMD 模型处理非线性、非平稳以及复杂的数据,表现得比EMD 系列更好,因此将重构的数据通过VMD 模型分解,提高了模型的准确度。
评价指标包括:R2、MAE、MSE、RMSE和MAPE等,代码质量极高,方便学习和替换数据。参数可方便更改,程序和excel数据放在一个文件夹,注释明细。
%% 构建TCN
layer = sequenceInputLayer(f_,Name="input"); % 输入层
lgraph = layerGraph(layer);
LayN = layer.Name; % 每层名字
for i = 1:numChan
KD = 2^(i-1); % 空洞系数、扩张系数
layers = [
convolution1dLayer(KerSize,numChannel,DilationFactor=KD,Padding="causal",Name="conv1_"+i) % 卷积层
layerNormalizationLayer % 归一层
spatialDropoutLayer(dropoutFactor) % 失活层
convolution1dLayer(KerSize,numChannel,DilationFactor=KD,Padding="causal")
layerNormalizationLayer
reluLayer
spatialDropoutLayer(dropoutFactor)
additionLayer(2,Name="add_"+i)];
% 整合网络
lgraph = addLayers(lgraph,layers);
lgraph = connectLayers(lgraph,LayN,"conv1_"+i);
% 残差连接.
if i == 1
layer = convolution1dLayer(1,numChannel,Name="convSkip");
lgraph = addLayers(lgraph,layer);
lgraph = connectLayers(lgraph,LayN,"convSkip");
lgraph = connectLayers(lgraph,"convSkip","add_" + i + "/in2");
else
lgraph = connectLayers(lgraph,LayN,"add_" + i + "/in2");
end
LayN = "add_" + i;
end
智能算法及其模型预测