tic % 计时
%% 清空环境导入数据
clc %清空命令行的命令
clear all %清空工作区变量
close all %关闭程序运行过程中生成的所有图形窗口
warning off all
format compact;
currentFolder = pwd;
addpath(genpath(currentFolder)); %添加该目录以及子文件到路径
%% 初始数据导入数据
data = xlsread('data.xlsx', 'Sheet1');
n=6;
[x,y]=data_process(data,n);%前n个时刻 预测下一个时刻
%划分数据
n=size(x,1);
m=round(n*0.7);%前70%训练 后30%测试
input_train=x(1:m,:)';
input_test=x(m+1:end,:)';
output_train=y(1:m,:)';
output_test=y(m+1:end,:)';
%-------------------训练数据、测速数据个数确定--------------------
%% 划分训练集和测试集
M = size(input_train, 2);
N = size(input_test, 2);
% input_train=input_train'; output_train=output_train';
% input_test=input_test'; output_test=output_test';
% 数据归一化
[inputn_train,inputps] =mapminmax(input_train);
[outputn_train,outputps]=mapminmax(output_train);
inputn_test =mapminmax('apply',input_test,inputps);
outputn_test=mapminmax('apply',output_test,outputps);
%% --------------BiLSTM优化----------------------
% 参数设置
SearchAgents = 5; % 种群数量
Max_iterations =10; % 迭代次数
lowerbound = [1e-10 0.0001 10 ];%三个参数的下限
upperbound = [1e-2 0.002 400 ];%三个参数的上限
dim = 3;%数量,即要优化的BiLSTM超参数个数
fobj = @(x)fun(x,inputn_train,outputn_train,outputps); %调用函数fun计算适应度函数值
%% 赋值;
[Best_score,Best_pos,Convergence_curve]=NGO(SearchAgents,Max_iterations,lowerbound,upperbound,dim,fobj) %% 北方苍鹰算法
%得到最优参数
L2Regularization = Best_pos(1,1); % 最佳L2正则化系数
InitialLearnRate = Best_pos(1,2); % 最佳初始学习率
NumOfUnits =abs(round( Best_pos(1,3))); % 最佳隐藏层节点数
%% ------------------利用优化参数重新训练BiLSTM并预测----------------------------
% 数据输入x的特征维度
inputSize = size(inputn_train,1);
% 数据输出y的维度
outputSize = size(outputn_train,1);
% 设置网络结构
layers = [ ...
sequenceInputLayer(inputSize) %输入层,参数是输入特征维数
bilstmLayer(NumOfUnits) %学习层,隐含层神经元的个数
dropoutLayer(0.2) %权重丢失率
fullyConnectedLayer(outputSize) %全连接层,也就是输出的维数
regressionLayer]; %回归层,该参数说明是在进行回归问题,而不是分类问题
% trainoption(bilstm)
opts = trainingOptions('adam', ... %优化算法
'MaxEpochs',100, ... %最大迭代次数
'GradientThreshold',1,... %梯度阈值,防止梯度爆炸
'ExecutionEnvironment','cpu',... %对于大型数据集合、长序列或大型网络,在 GPU 上进行预测计算通常比在 CPU 上快。其他情况下,在 CPU 上进行预测计算通常更快。
'InitialLearnRate',InitialLearnRate, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropPeriod',120, ...
'LearnRateDropFactor',0.2, ... % 指定初始学习率 0.005,在 100 轮训练后通过乘以因子 0.2 来降低学习率。
'L2Regularization', L2Regularization, ... % 正则化参数
'Verbose',false, ... %如果将其设置为true,则有关训练进度的信息将被打印到命令窗口中。
'Plots','training-progress'... %构建曲线图, 若将'training-progress'替换为'none',则不画出曲线
); % 'MiniBatchSize',outputSize*30, ...
% 训练
BiLSTMnet = trainNetwork(inputn_train ,outputn_train ,layers,opts); % 网络训练
% 预测
[BiLSTMnet,BiLSTMoutputr_train]= predictAndUpdateState(BiLSTMnet,inputn_train); % 训练样本拟合值
BiLSTMoutput_train = mapminmax('reverse',BiLSTMoutputr_train,outputps); % 数据反归一化
%网络测试输出
BiLSTMoutputr_test= [];
for i = 1:N
[BiLSTMnet,BiLSTMoutputr_test(:,i)] = predictAndUpdateState(BiLSTMnet,inputn_test(:,i),'ExecutionEnvironment','cpu');
end
BiLSTMoutput_test= mapminmax('reverse',BiLSTMoutputr_test,outputps); %反归一化
toc
%% -----------------预测结果-------------------------
% 数据格式转换
BiLSTM_train =BiLSTMoutput_train';
BiLSTM_test = BiLSTMoutput_test';
train_DATA=output_train'; %训练样本标签
test_DATA= output_test'; %测试样本标签
%% 绘图
%% 均方根误差 RMSE
error1 = sqrt(sum((BiLSTM_train - train_DATA).^2)./M);
error2 = sqrt(sum((BiLSTM_test- test_DATA).^2)./N);
%%
%%
%均方误差 MSE
mse1 = sum((BiLSTM_train - train_DATA).^2)./M;
mse2 = sum((BiLSTM_test - test_DATA).^2)./N;
%%
%RPD 剩余预测残差
SE1=std(BiLSTM_train-train_DATA);
RPD1=std(train_DATA)/SE1;
SE=std(BiLSTM_test-test_DATA);
RPD2=std(test_DATA)/SE;
%% 平均绝对误差MAE
MAE1 = mean(abs(train_DATA - BiLSTM_train));
MAE2 = mean(abs(test_DATA - BiLSTM_test));
%% 平均绝对百分比误差MAPE
MAPE1 = mean(abs((train_DATA - BiLSTM_train)./train_DATA));
MAPE2 = mean(abs((test_DATA - BiLSTM_test)./test_DATA));
%% 训练集拟合效果图
%% 训练集绘图
figure
plot(BiLSTM_train,'-','Color',[255 0 0]./255,'linewidth',1,'Markersize',5,'MarkerFaceColor',[250 0 0]./255)
hold on
plot(train_DATA,'-','Color',[150 150 150]./255,'linewidth',0.8,'Markersize',4,'MarkerFaceColor',[150 150 150]./255)
legend('NGO-BiLSTM预测值','真实值')
xlabel('预测样本')
ylabel('预测结果')
string={'训练集预测结果对比';[' RMSE= ' num2str(error1) ' MSE= ' num2str(mse1) ' RPD= ' num2str(RPD1) ')' ]};
title(string)
hold on ;h=lsline();
set(h,'LineWidth',1,'LineStyle','-','Color',[1 0 1])
%% 训练集误差图
figure
bar((BiLSTM_train - train_DATA)./train_DATA)
legend('NGO-BiLSTM模型训练集相对误差','Location','NorthEast','FontName','华文宋体')
title('NGO-BiLSTM模型训练集相对误差','fontsize',12,'FontName','华文宋体')
ylabel('误差','fontsize',12,'FontName','华文宋体')
xlabel('样本','fontsize',12,'FontName','华文宋体')
hold on ;h=lsline();
set(h,'LineWidth',1,'LineStyle','-','Color',[1 0 1])
%% 测试集绘图
figure
plot(BiLSTM_test,'-','Color',[0 0 255]./255,'linewidth',1,'Markersize',5,'MarkerFaceColor',[0 0 255]./255)
hold on
plot(test_DATA,'-','Color',[0 0 0]./255,'linewidth',0.8,'Markersize',4,'MarkerFaceColor',[0 0 0]./255)
legend('NGO-BiLSTM预测值','真实值')
xlabel('预测样本')
ylabel('预测结果')
string={'测试集预测结果对比';[' RMSE= ' num2str(error2) ' MSE= ' num2str(mse2) ' RPD= ' num2str(RPD2) ')']};
title(string)
hold on ;h=lsline();
set(h,'LineWidth',1,'LineStyle','-','Color',[1 0 1])
%% 测试集误差图
figure
bar((BiLSTM_test - test_DATA)./test_DATA)
legend('NGO-BiLSTM模型测试集相对误差','Location','NorthEast','FontName','华文宋体')
title('NGO-BiLSTM模型测试集相对误差','fontsize',12,'FontName','华文宋体')
ylabel('误差','fontsize',12,'FontName','华文宋体')
xlabel('样本','fontsize',12,'FontName','华文宋体')
hold on ;h=lsline();
set(h,'LineWidth',1,'LineStyle','-','Color',[1 0 1])
% 绘制适应度曲线图
figure
plot(Convergence_curve,'linewidth',1.5);
grid on
xlabel('迭代次数','fontsize',12,'FontName','宋体');
ylabel('适应度函数','fontsize',12,'FontName','宋体');
title('优化收敛曲线')
grid on
%% 打印出评价指标
disp(['-----------------------误差计算--------------------------'])
disp(['评价结果如下所示:'])
disp(['平均绝对误差MAE为:',num2str(MAE2)])
disp(['均方误差MSE为: ',num2str(mse2)])
disp(['均方根误差RMSEP为: ',num2str(error2)])
disp(['剩余预测残差RPD为: ',num2str(RPD2)])
disp(['平均绝对百分比误差MAPE为: ',num2str(MAPE2)])
grid
前程算法屋
- 粉丝: 5459
- 资源: 782
最新资源
- 数据库设计管理课程设计系统设计报告(powerdesign+sql+DreamweaverCS)图书借阅管理系统设计与开发2
- 数据库设计管理课程设计系统设计报告(powerdesign+sql+DreamweaverCS)图书借阅管理系统设计与开发
- 使用大预言模型LLM构建虚拟人物画像
- 数据库设计管理课程设计系统设计报告(powerdesign+sql+DreamweaverCS)图书借阅管理系统
- 数据库设计管理课程设计系统设计报告(powerdesign+sql+DreamweaverCS)图书发行信息管理系统设计与开发
- 数据安全 数据安全基础 DSG
- Java Web 学习教程(从基础到进阶,带您逐步构建 Web 应用)
- 数据库设计管理课程设计系统设计报告(powerdesign+sql+DreamweaverCS)体育项目比赛管理系统设计与开发
- 数据库设计管理课程设计系统设计报告(powerdesign+sql+DreamweaverCS)人事管理信息系统设计与开发4
- 数据安全 数据安全治理 DSG
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈