clc;
clear
close all
X = xlsread('data.xlsx');
X = X(5665:8640,:); %选取3月份数据
load vmd_data.mat
IMF = u;
disp('…………………………………………………………………………………………………………………………')
disp('VMD-CNNLSTM预测')
disp('…………………………………………………………………………………………………………………………')
%% 对每个分量建模
for uu=1:size(IMF,2)
X_imf=[X(:,1:end-1),IMF(:,uu)];
num_samples = length(X_imf); % 样本个数
kim = 10; % 延时步长(kim个历史数据作为自变量)
zim = 1; % 跨zim个时间点进行预测
or_dim = size(X_imf,2);
% 重构数据集
for i = 1: num_samples - kim - zim + 1
res(i, :) = [reshape(X_imf(i: i + kim - 1,:), 1, kim*or_dim), X_imf(i + kim + zim - 1,:)];
end
% 训练集和测试集划分
outdim = 1; % 最后一列为输出
num_size = 0.7; % 训练集占数据集比例
num_train_s = round(num_size * num_samples); % 训练集样本个数
f_ = size(res, 2) - outdim; % 输入特征维度
P_train = res(1: num_train_s, 1: f_)';
T_train = res(1: num_train_s, f_ + 1: end)';
M = size(P_train, 2);
P_test = res(num_train_s + 1: end, 1: f_)';
T_test = res(num_train_s + 1: end, f_ + 1: end)';
N = size(P_test, 2);
% 数据归一化
[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);
%% 数据平铺
for i = 1:size(P_train,2)
trainD{i,:} = (reshape(p_train(:,i),size(p_train,1),1,1));
end
for i = 1:size(p_test,2)
testD{i,:} = (reshape(p_test(:,i),size(p_test,1),1,1));
end
targetD = t_train;
targetD_test = t_test;
numFeatures = size(p_train,1);
layers0 = [ ...
% 输入特征
sequenceInputLayer([numFeatures,1,1],'name','input') %输入层设置
sequenceFoldingLayer('name','fold') %使用序列折叠层对图像序列的时间步长进行独立的卷积运算。
% CNN特征提取
convolution2dLayer([3,1],16,'Stride',[1,1],'name','conv1') %添加卷积层,64,1表示过滤器大小,10过滤器个数,Stride是垂直和水平过滤的步长
batchNormalizationLayer('name','batchnorm1') % BN层,用于加速训练过程,防止梯度消失或梯度爆炸
reluLayer('name','relu1') % ReLU激活层,用于保持输出的非线性性及修正梯度的问题
% 池化层
maxPooling2dLayer([2,1],'Stride',2,'Padding','same','name','maxpool') % 第一层池化层,包括3x3大小的池化窗口,步长为1,same填充方式
% 展开层
sequenceUnfoldingLayer('name','unfold') %独立的卷积运行结束后,要将序列恢复
%平滑层
flattenLayer('name','flatten')
lstmLayer(25,'Outputmode','last','name','hidden1')
dropoutLayer(0.2,'name','dropout_1') % Dropout层,以概率为0.2丢弃输入
fullyConnectedLayer(1,'name','fullconnect') % 全连接层设置(影响输出维度)(cell层出来的输出层) %
regressionLayer('Name','output') ];
lgraph0 = layerGraph(layers0);
lgraph0 = connectLayers(lgraph0,'fold/miniBatchSize','unfold/miniBatchSize');
%% Set the hyper parameters for unet training
options0 = trainingOptions('adam', ... % 优化算法Adam
'MaxEpochs', 150, ... % 最大训练次数
'GradientThreshold', 1, ... % 梯度阈值
'InitialLearnRate', 0.01, ... % 初始学习率
'LearnRateSchedule', 'piecewise', ... % 学习率调整
'LearnRateDropPeriod',70, ... % 训练75次后开始调整学习率
'LearnRateDropFactor',0.01, ... % 学习率调整因子
'L2Regularization', 0.001, ... % 正则化参数
'ExecutionEnvironment', 'cpu',... % 训练环境
'Verbose', 1, ... % 关闭优化过程
'Plots', 'none'); % 画出曲线
% % start training
% 训练
net = trainNetwork(trainD,targetD',lgraph0,options0);
%analyzeNetwork(net);% 查看网络结构
% 预测
t_sim1 = predict(net, trainD);
t_sim2 = predict(net, testD);
% 数据反归一化
T_sim1 = mapminmax('reverse', t_sim1, ps_output);
T_sim2 = mapminmax('reverse', t_sim2, ps_output);
T_train1 = T_train;
T_test2 = T_test;
% 数据格式转换
imf_T_sim1(:,uu) = double(T_sim1);% cell2mat将cell元胞数组转换为普通数组
imf_T_sim2(:,uu) = double(T_sim2);
end
num_samples = length(X); % 样本个数
kim = 10; % 延时步长(kim个历史数据作为自变量)
zim = 1; % 跨zim个时间点进行预测
or_dim = size(X,2);
% 重构数据集
for i = 1: num_samples - kim - zim + 1
res(i, :) = [reshape(X(i: i + kim - 1,:), 1, kim*or_dim), X(i + kim + zim - 1,:)];
end
% 训练集和测试集划分
T_train = res(1: num_train_s, f_ + 1: end)';
T_test = res(num_train_s + 1: end, f_ + 1: end)';
%% 各分量预测的结果相加
T_sim_a = sum(imf_T_sim1,2);
T_sim_b = sum(imf_T_sim2,2);
VMDCNNLSTM_TSIM1 = T_sim_a';
VMDCNNLSTM_TSIM2 = T_sim_b';
save VMDCNNLSTM VMDCNNLSTM_TSIM1 VMDCNNLSTM_TSIM2
% 指标计算
disp('…………训练集误差指标…………')
[mae1,rmse1,mape1,error1]=calc_error(T_train,T_sim_a');
fprintf('\n')
figure('Position',[200,300,600,200])
plot(T_train);
hold on
plot(T_sim_a')
legend('真实值','预测值')
title('VMD-CNN-LSTM训练集预测效果对比')
xlabel('样本点')
ylabel('发电功率')
disp('…………测试集误差指标…………')
[mae2,rmse2,mape2,error2]=calc_error(T_test,T_sim_b');
fprintf('\n')
figure('Position',[200,300,600,200])
plot(T_test);
hold on
plot(T_sim_b')
legend('真实值','预测值')
title('VMD-CNN-LSTM预测集预测效果对比')
xlabel('样本点')
ylabel('发电功率')
figure('Position',[200,300,600,200])
plot(T_sim_b'-T_test)
title('VMD-CNN-LSTM-误差曲线图')
xlabel('样本点')
ylabel('发电功率')
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1.Matlab实现VMD-CNN-LSTM变分模态分解结合卷积长短期记忆神经网络多变量时间序列预测(完整源码和数据) 2.运行环境matlab2021及以上,评价指标MAE、MAPE、MSE、RMSE; 3.输入多个特征,输出单个变量。 4.main1_VMD完成数据分解,运行main2_VMD_CNNLSTM完成数据预测,多图输出。 5.excel数据集,所有文件放在一个文件夹; 6.程序语言为matlab,程序可出预测效果图,误差分析图;代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 7.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 8.作者介绍:某大厂资深算法工程师,从事Matlab、Python算法仿真工作8年;擅长智能优化算法、神经网络预测、信号处理、元胞自动机等多种领域的算法仿真实验.
资源推荐
资源详情
资源评论























收起资源包目录
















共 14 条
- 1
资源评论

- weixin_422725462024-03-13内容与描述一致,超赞的资源,值得借鉴的内容很多,支持!
- m0_725768092024-04-26资源中能够借鉴的内容很多,值得学习的地方也很多,大家一起进步!
- m0_664397452025-06-21资源质量不错,和资源描述一致,内容详细,对我很有用。
- 普通网友2024-08-15感谢大佬分享的资源,对我启发很大,给了我新的灵感。

机器学习之心
- 粉丝: 3w+
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 三位厦门大学的学生面对小学期的python大作业他们将用什么样的作品水水而过
- QT6 画家 QPainter 的源代码带注释 1300 行 本类奠定了 QT 的绘图基础
- 基于 MySQL 与 Python 的选课大作业及校招填表辅助系统
- 网站建设方案(人才网).doc
- 新建文件夹福建省莆田市基于云计算的电子政务公共平台顶层设计【阶段成果】v1.5.doc
- 行业网站建设方案.doc
- 基于JSP的酒店客房管理系统.doc
- 武汉大学分析化学课件-第26章-分析仪器测量电路、信号处理及计算机应用基础.ppt
- 基于网络环境的集体备课研究课题研究报告.docx
- 网络营销SEO精简版.pptx
- 软件委托开发流程及相关规范(211215095509).pdf
- 数控铣床加工中心编程实例PPT培训课件.ppt
- 计算机网络基础(继续教育试题及答案).docx
- 网络会计对传统会计的影响及发展【会计实务操作教程】.pptx
- 行政事业单位会计信息化建设路径.doc
- 网络营销内涵.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
