%% LSTM network
%% import data
clc
clear
close all
%读取double格式数据
training_data = xlsread('a.xlsx',1);
training_data(:,8) = [];%去除空列
testing_data = xlsread('a.xlsx',2);
testing_data(:,8) = [];%去除空列
% 把table格式的数据转换为doulbe格式的数据,这样大部分MATLAB版本都可以跑
input_train =training_data(:,1:7);%训练数据输出数据
output_train = training_data(:,8);%训练数据输入数据
input_test = testing_data(:,1:7);%测试数据输出数据
output_test = testing_data(:,8);%测试数据输入数据
[inputn,inputps]=mapminmax(input_train',-1,1);%训练数据的输入数据的归一化
[outputn,outputps]=mapminmax(output_train',-1,1);%训练数据的输出数据的归一化de
inputn_test=mapminmax('apply',input_test',inputps);
%% Define Network Architecture
% Define the network architecture.
numFeatures = size(training_data(:,1:7),2);%输入层维度
numResponses = size(training_data(:,end),2);%输出维度
% 200 hidden units
numHiddenUnits = 60;%第一层维度
% a fully connected layer of size 50 & a dropout layer with dropout probability 0.5
layers = [ ...
sequenceInputLayer(numFeatures)%输入层
lstmLayer(numHiddenUnits,'OutputMode','sequence')%第一层
fullyConnectedLayer(30)%链接层
dropoutLayer(0.5)%遗忘层
fullyConnectedLayer(numResponses)%链接层
regressionLayer];%回归层
% Specify the training options.
% Train for 60 epochs with mini-batches of size 20 using the solver 'adam'
maxEpochs = 60;%最大迭代次数
miniBatchSize = 20;%最小批量
% the learning rate == 0.01
% set the gradient threshold to 1
% set 'Shuffle' to 'never'
options = trainingOptions('adam', ... %解算器
'MaxEpochs',maxEpochs, ... %最大迭代次数
'MiniBatchSize',miniBatchSize, ... %最小批次
'InitialLearnRate',0.01, ... %初始学习率
'GradientThreshold',inf, ... %梯度阈值
'Shuffle','every-epoch', ... %打乱顺序
'Plots','training-progress',... %画图
'Verbose',0); %不输出训练过程
%% Train the Network
net = trainNetwork(inputn,outputn,layers,options);%开始训练
%% Test the Network
y_pred = predict(net,inputn_test,'MiniBatchSize',1)';%测试仿真输出
y_pred=(mapminmax('reverse',y_pred,outputps))';
y_pred0 = predict(net,inputn,'MiniBatchSize',1)';%训练拟合值
y_pred0=(mapminmax('reverse',y_pred0,outputps))';
nx = 1;
npan = (nx-1)*300+1:nx*300;
figure%打开一个图像窗口
plot(y_pred(npan),'k-*')%黑色实线,点的形状为*
hold on%继续画图
plot(output_test(npan),'r-o')%红色实线,点的形状为o
hold off%停止画图
title('测试图')%标题
ylabel('y')%Y轴名称
legend('测试值','实际值')%标签
error1 = y_pred'-output_test;%误差
figure
plot(error1(npan),'k-*')
title('测试误差图')
ylabel('误差')
figure
plot(y_pred0(npan),'k-*')
hold on
plot(output_train(npan),'r-o')
hold off
title('训练图')
ylabel('y')
legend('测试值','实际值')
error0 = y_pred0'-output_train;
figure
plot(error0(npan),'k-*')
title('训练误差图')
ylabel('误差')
%%
%2
nx = 2;
npan = (nx-1)*300+1:nx*300;
figure%打开一个图像窗口
plot(y_pred(npan),'k-*')%黑色实线,点的形状为*
hold on%继续画图
plot(output_test(npan),'r-o')%红色实线,点的形状为o
hold off%停止画图
title('测试图')%标题
ylabel('y')%Y轴名称
legend('测试值','实际值')%标签
error1 = y_pred'-output_test;%误差
figure
plot(error1(npan),'k-*')
title('测试误差图')
ylabel('误差')
figure
plot(y_pred0(npan),'k-*')
hold on
plot(output_train(npan),'r-o')
hold off
title('训练图')
ylabel('y')
legend('测试值','实际值')
error0 = y_pred0'-output_train;
figure
plot(error0(npan),'k-*')
title('训练误差图')
ylabel('误差')
%%
%3
nx = 3;
npan = (nx-1)*300+1:nx*300;
figure%打开一个图像窗口
plot(y_pred(npan),'k-*')%黑色实线,点的形状为*
hold on%继续画图
plot(output_test(npan),'r-o')%红色实线,点的形状为o
hold off%停止画图
title('测试图')%标题
ylabel('y')%Y轴名称
legend('测试值','实际值')%标签
error1 = y_pred'-output_test;%误差
figure
plot(error1(npan),'k-*')
title('测试误差图')
ylabel('误差')
figure
plot(y_pred0(npan),'k-*')
hold on
plot(output_train(npan),'r-o')
hold off
title('训练图')
ylabel('y')
legend('测试值','实际值')
error0 = y_pred0'-output_train;
figure
plot(error0(npan),'k-*')
title('训练误差图')
ylabel('误差')
%%
%4
nx = 4;
npan = (nx-1)*300+1:951;
figure%打开一个图像窗口
plot(y_pred(npan),'k-*')%黑色实线,点的形状为*
hold on%继续画图
plot(output_test(npan),'r-o')%红色实线,点的形状为o
hold off%停止画图
title('测试图')%标题
ylabel('y')%Y轴名称
legend('测试值','实际值')%标签
error1 = y_pred'-output_test;%误差
figure
plot(error1(npan),'k-*')
title('测试误差图')
ylabel('误差')
figure
plot(y_pred0(npan),'k-*')
hold on
plot(output_train(npan),'r-o')
hold off
title('训练图')
ylabel('y')
legend('测试值','实际值')
error0 = y_pred0'-output_train;
figure
plot(error0(npan),'k-*')
title('训练误差图')
ylabel('误差')
[MSE,RMSE,MBE,MAE ] =MSE_RMSE_MBE_MAE(output_test',y_pred)
R2 = R_2(output_test',y_pred)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于MATLAB编程,用长短期神经网络LSTM进行回归分析预测,LSTM神经网络是一种深度学习神经网络,是对RNN的改进,拥有很好的学习能力,用于回归分析,特别是时间序列的数据,拥有特殊的优势,代码完整,包含数据,有注释,方便扩展应用 1,如有疑问,不会运行,可以私信, 2,需要创新,或者修改可以扫描二维码联系博主, 3,本科及本科以上可以下载应用或者扩展, 4,内容不完全匹配要求或需求,可以联系博主扩展。
资源推荐
资源详情
资源评论
收起资源包目录
代码.rar (4个子文件)
MSE_RMSE_MBE_MAE.m 361B
R_2.m 317B
main2.m 5KB
a.xlsx 153KB
共 4 条
- 1
资源评论
- dunming_67254132023-12-27感谢资源主分享的资源解决了我当下的问题,非常有用的资源。
神经网络机器学习智能算法画图绘图
- 粉丝: 2818
- 资源: 660
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功