部分代码:
%% BP神经网络
% 清空环境变量 关闭打开过的图表
clear all;clc;close all
%% 导入数据
data=xlsread('data1.xlsx');
%% 设置训练集数量
num_row=size(data,1) %数据集行数
n_trains=floor(num_row*0.8) %按比例求训练集数目
% n_trains=150 %也可直接指定
%% 训练集输入输出
input_train=data(1:n_trains,1:end-1);%一至倒数第一列做特征
output_train=data(1:n_trains,end); %最后一列做标签%% 测试样本输入值归一化
inputn_test=mapminmax('apply',input_testT,inputps);% inputps准则对输入值进行归一化
%测试样本输出值不用归一化
%% 构建BP神经网络(归一化后的输入,输出 构建)
net=newff(inputn,outputn,10);%单隐层,10个神经元
% net=newff(inputn,outputn,[8,15]);%多隐层,8个神经元
%% 网络参数配置( 训练次数,学习速率,训练目标最小误差等)
net.trainParam.epochs=3000; % 训练次数,这里设置为1000次
net.trainParam.lr=0.02; % 学习速率,这里设置为0.01
net.trainParam.goal=0.000001; % 训练目标最小误差,这里设置为0.00001
%% BP神经网络训练
net=train(net,inputn,outputn);%开始训练,其中inputn,outputn分别为输入,输出样本
%% BP神经网络预测
test_simu=sim(net,inputn_test); %用训练好的模型进行仿真
%% 预测结果反归一化
test_simu=mapminmax('reverse',test_simu,outputps); %把仿真得到的数据还原为原始的数量级
%% 转置回来【因归一化之前转置过】
test_simu=test_simu';
%% 评估rmse与mae
rmse=sqrt(mean((test_simu-output_test).^2));
disp(['均方根误差(RMSE):',num2str(rmse)])
mae=mean(abs(test_simu-output_test));
disp(['平均绝对误差(MAE):',num2str(mae)])
%% 绘图真实值与预测值比较
figure(1)
plot(output_test,'bo-')
hold on
plot(test_simu,'r*-')
legend('实际值','预测值')
title("预测对比图")
xlabel('样本')
ylabel('值')
免费代码
更多:请访问🍞正在装饰个人主页...