tic % 计时
%% 清空环境导入数据
clc %清空命令行的命令
clear all %清空工作区变量
close all %关闭程序运行过程中生成的所有图形窗口
warning off all
format compact;
currentFolder = pwd;
addpath(genpath(currentFolder)); %添加该目录以及子文件到路径
%% 初始数据导入数据
[NUM]=xlsread('data.xlsx');
DATA=NUM;
%-------------------训练数据、测速数据个数确定--------------------
% N= length(DATA); % number of samples
[N,M]=size(DATA);
Nu_train= floor(N * 0.8); % number of learning samples 前80%的数据作为训练数据
Nu_test = N - Nu_train; % 后25%的数据作为测试数据
input_train=DATA(1:Nu_train,1:M-1); %训练样本输入
output_train=DATA(1:Nu_train,M); %训练样本标签
input_test=DATA(Nu_train+1:N,1:M-1); %测试样本输出
output_test=DATA(Nu_train+1:N,M); %测试样本标签
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);
%% --------------LSTM优化----------------------
% 参数设置
SearchAgents = 5; % 种群数量
Max_iterations =10; % 迭代次数
lowerbound = [1e-10 0.0001 10 ];%三个参数的下限
upperbound = [1e-2 0.002 400 ];%三个参数的上限
dim = 3;%数量,即要优化的LSTM超参数个数
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))); % 最佳隐藏层节点数
%% ------------------利用优化参数重新训练LSTM并预测----------------------------
% 数据输入x的特征维度
inputSize = size(inputn_train,1);
% 数据输出y的维度
outputSize = size(outputn_train,1);
% 设置网络结构
layers = [ ...
sequenceInputLayer(inputSize) %输入层,参数是输入特征维数
lstmLayer(NumOfUnits) %学习层,隐含层神经元的个数
dropoutLayer(0.2) %权重丢失率
fullyConnectedLayer(outputSize) %全连接层,也就是输出的维数
regressionLayer]; %回归层,该参数说明是在进行回归问题,而不是分类问题
% trainoption(lstm)
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, ...
% 训练
LSTMnet = trainNetwork(inputn_train ,outputn_train ,layers,opts); % 网络训练
% 预测
[LSTMnet,LSTMoutputr_train]= predictAndUpdateState(LSTMnet,inputn_train); % 训练样本拟合值
LSTMoutput_train = mapminmax('reverse',LSTMoutputr_train,outputps); % 数据反归一化
%网络测试输出
LSTMoutputr_test= [];
for i = 1:Nu_test
[LSTMnet,LSTMoutputr_test(:,i)] = predictAndUpdateState(LSTMnet,inputn_test(:,i),'ExecutionEnvironment','cpu');
end
LSTMoutput_test= mapminmax('reverse',LSTMoutputr_test,outputps); %反归一化
toc
%% -----------------预测结果-------------------------
% 数据格式转换
LSTM_train =LSTMoutput_train';
LSTM_test = LSTMoutput_test';
train_DATA=output_train'; %训练样本标签
test_DATA= output_test'; %测试样本标签
%% 绘图
%% 均方根误差 RMSE
error1 = sqrt(sum((LSTM_train - train_DATA).^2)./M);
error2 = sqrt(sum((LSTM_test- test_DATA).^2)./N);
%%
%决定系数
R1 = 1 - norm(train_DATA - LSTM_train)^2 / norm(train_DATA - mean(train_DATA))^2;
R2 = 1 - norm(test_DATA - LSTM_test)^2 / norm(test_DATA - mean(test_DATA ))^2;
%%
%均方误差 MSE
mse1 = sum((LSTM_train - train_DATA).^2)./M;
mse2 = sum((LSTM_test - test_DATA).^2)./N;
%%
%RPD 剩余预测残差
SE1=std(LSTM_train-train_DATA);
RPD1=std(train_DATA)/SE1;
SE=std(LSTM_test-test_DATA);
RPD2=std(test_DATA)/SE;
%% 平均绝对误差MAE
MAE1 = mean(abs(train_DATA - LSTM_train));
MAE2 = mean(abs(test_DATA - LSTM_test));
%% 平均绝对百分比误差MAPE
MAPE1 = mean(abs((train_DATA - LSTM_train)./train_DATA));
MAPE2 = mean(abs((test_DATA - LSTM_test)./test_DATA));
%% 训练集拟合效果图
%% 训练集绘图
figure
plot(LSTM_train,'-s','Color',[255 0 0]./255,'linewidth',1,'Markersize',5,'MarkerFaceColor',[250 0 0]./255)
hold on
plot(train_DATA,'-o','Color',[150 150 150]./255,'linewidth',0.8,'Markersize',4,'MarkerFaceColor',[150 150 150]./255)
legend('NGO-LSTM预测值','真实值')
xlabel('预测样本')
ylabel('预测结果')
string={'训练集预测结果对比';['(R^2 =' num2str(R1) ' 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((LSTM_train - train_DATA)./train_DATA)
legend('NGO-LSTM模型训练集相对误差','Location','NorthEast','FontName','华文宋体')
title('NGO-LSTM模型训练集相对误差','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(train_DATA,LSTM_train,'or','linewidth',1);
xlabel('真实值')
ylabel('预测值')
string = {'训练集效果图';['R^2_c=' num2str(R1) ' RMSEC=' num2str(error1) ]};
title(string)
hold on ;h=lsline;
set(h,'LineWidth',1,'LineStyle','-','Color',[1 0 1])
%% 测试集绘图
figure
plot(LSTM_test,'-s','Color',[0 0 255]./255,'linewidth',1,'Markersize',5,'MarkerFaceColor',[0 0 255]./255)
hold on
plot(test_DATA,'-o','Color',[0 0 0]./255,'linewidth',0.8,'Markersize',4,'MarkerFaceColor',[0 0 0]./255)
legend('NGO-LSTM预测值','真实值')
xlabel('预测样本')
ylabel('预测结果')
string={'测试集预测结果对比';['(R^2 =' num2str(R2) ' 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((LSTM_test - test_DATA)./test_DATA)
legend('NGO-LSTM模型测试集相对误差','Location','NorthEast','FontName','华文宋体')
title('NGO-LSTM模型测试集相对误差','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(LSTM_test,LSTM_test,'ob');
xlabel('真实值')
ylabel('预测值')
string1 = {'测试集效果图';['R^2_p=' num2str(R2) ' RMSEP=' num2str(error2) ]};
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Matlab实现NGO-LSTM北方苍鹰算法优化长短期记忆网络多输入单输出回归预测(完整源码和数据) 1.data为数据集,输入7个特征,输出1个变量。 2.MainNGOLSTMNN.m为程序主文件,其他为函数文件无需运行。 3.命令窗口输出MAE、MSE、RMSEP、R^2、RPD和MAPE,可在下载区获取数据和程序内容。 4.北方苍鹰算法优化参数为学习率,隐藏层节点个数,正则化参数。 注意程序和数据放在一个文件夹,运行环境为Matlab2018及以上.
资源推荐
资源详情
资源评论
收起资源包目录
回归预测:NGO-LSTM.zip (11个子文件)
NGO-LSTM2.png 30KB
NGO-LSTM4.png 41KB
NGO-LSTM6.png 29KB
NGO-LSTM3.png 41KB
NGO-LSTM7.png 27KB
MainNGOLSTMNN.m 9KB
fun.m 6KB
NGO.m 3KB
NGO-LSTM5.png 29KB
data.xlsx 15KB
NGO-LSTM1.png 68KB
共 11 条
- 1
机器学习之心
- 粉丝: 2w+
- 资源: 1031
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- W3CSchool全套Web开发手册中文CHM版15MB最新版本
- Light Table 的 Python 语言插件.zip
- UIkit中文帮助文档pdf格式最新版本
- kubernetes 的官方 Python 客户端库.zip
- 公开整理-2024年全国产业园区数据集.csv
- Justin Seitz 所著《Black Hat Python》一书的源代码 代码已完全转换为 Python 3,重新格式化以符合 PEP8 标准,并重构以消除涉及弃用库实现的依赖性问题 .zip
- java炸弹人游戏.zip学习资料程序资源
- Jay 分享的一些 Python 代码.zip
- 彩色形状的爱心代码.zip学习资料程序资源
- SQLAlchemy库:Python数据库操作的全方位指南
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页