clc;
clear
close all
X = xlsread('data.xlsx');
X = X(5665:8640,:); %选取3月份数据
load vmd_data.mat
IMF = u;
disp('…………………………………………………………………………………………………………………………')
disp('VMD-CNNBiLSTM预测')
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')
bilstmLayer(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);
VMDCNNBiLSTM_TSIM1 = T_sim_a';
VMDCNNBiLSTM_TSIM2 = T_sim_b';
save VMDCNNBiLSTM VMDCNNBiLSTM_TSIM1 VMDCNNBiLSTM_TSIM2
% 指标计算
disp('…………训练集误差指标…………')
[mae1,rmse1,mape1,error1]=calc_error(T_train,T_sim_a');
fprintf('\n')
figure
plot(T_train);
hold on
plot(T_sim_a')
legend('真实值','预测值')
title('VMD-CNN-BiLSTM训练集预测效果对比')
xlabel('样本点')
ylabel('发电功率')
disp('…………测试集误差指标…………')
[mae2,rmse2,mape2,error2]=calc_error(T_test,T_sim_b');
fprintf('\n')
figure
plot(T_test);
hold on
plot(T_sim_b')
legend('真实值','预测值')
title('VMD-CNN-BiLSTM预测集预测效果对比')
xlabel('样本点')
ylabel('发电功率')
figure
plot(T_sim_b'-T_test)
title('VMD-CNN-BiLSTM-误差曲线图')
xlabel('样本点')
ylabel('发电功率')

机器学习之心
- 粉丝: 3w+
最新资源
- 组建EPC项目管理组织机构的设想.-1doc.doc
- 二院综合布线系统施工方案.doc
- 国债项目管理办法.doc
- 还您一个健康的网络医院网络安全解决方案.doc
- 办公软件应用教案.doc
- 计算机系统综合设计课程项目集合-minisys-包含Verilog实现的五级流水单发射哈佛结构可中断CPU支持57条MIPS指令-总线下挂式外设如拨码开关矩阵键盘数码管蜂鸣器LED.zip
- 更新版国家开放大学电大专科《网络营销与策划》单项多项选择题题库及答案.docx
- 数值分析雅克比高斯迭代法MATLAB程序.doc
- 大厦网络语音综合布线设计方案.doc
- 虚拟化与云安全解决方案.docx
- 循迹小车设计报告-基于单片机C.doc
- 移动互联网时代的运营商定位(简版).pptx
- 云计算架构技术与实践概述.pptx
- 数学常用巧算速算法.doc
- 数值积分算法与MATLAB实现设计.doc
- 配置网络信息管理系统的开发环境PPT课件.ppt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


