My precious~ 2022-02-16 11:22 采纳率: 100%
浏览 67
已结题

Matlab神经网络预测模型测试验证集与误差集的图中,每个值都出现了四条线,这是为什么呢?

clear
close all
clc
%打开数据集
input=xlsread('BP训练数据','训练1','B9:M17')
output=xlsread('BP训练数据','训练1','B19:M21')
%训练集、测试集
input_train=input(:,1:7);
output_train=output(:,1:7);
input_test=input(:,8:end);
output_test=output(:,8:end);
%数据归一化
[inputn,inputps]=mapminmax(input_train,0,1);
[outputn,outputps]=mapminmax(output_train);
inputn_test=mapminmax('apply',input_test,inputps);
%构建BP神经网络
net=newff(inputn,outputn,4)
%网络参数
net.trainParam.epochs=1000;
net.trainParam.lr=0.01;
net.trainParam.goal=0.0000001;
%BP神经网络训练
net=train(net,inputn,outputn);
%BP神经网络测试
an=sim(net,inputn_test); %用训练好的模型进行仿真
test_simu=mapminmax('reverse',an,outputps); %预测结果反归一化
error=test_simu-output_test; %预测值与真实值的误差
%真实值与预测值的误差比较
figure(1)
plot(output_test,'bo-')
hold on
plot(test_simu,'r*-')
hold on
plot(error,'square','MarkerFaceColor','b')
legend('期望值','预测值','误差')
xlabel('数据数组'),
ylabel('值')
title('测试集预测值和期望值的误差对比')
set(gca,'fontsize')
%计算误差
[~,len]=size(output_test);
MAE1=sum(abs(error./output_test))/len;
MSE1=sum(error.^2)/len;
RMSE1=MSE1.^(1/2);
disp(['-------------计算误差--------------'])
disp(['平均绝对误差MAE为:',num2str(MAE1)])
disp(['均方误差MSE为:',num2str(MSE1)])
disp(['均方根误差RMSE为:',num2str(MAE1)])
(为什么我插不进图片。。。)

  • 写回答

2条回答 默认 最新

  • 技术专家团-Joel 2022-02-16 20:28
    关注

    你的训练样本是7个,测试样本是5个,得到的output_test、test_simu和error应该都是3行5列的矩阵,matlab用plot(A),如果A是矩阵的话,会画出每一列数据的线,也就是你每个数据应该画了5条曲线

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月4日
  • 已采纳回答 3月27日
  • 创建了问题 2月16日

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog