su_shi1 2022-05-08 16:07 采纳率: 100%
浏览 353
已结题

bp神经网络预测的问题

问题遇到的现象和发生背景

关于bp神经网络的预测问题,我看到了csp给出的代码,但是他给出的例子是预测值只有一个,我照葫芦画瓢,可是需要预测的值有两个,所以我照着他的代码写就没法执行,大家能告诉我我哪里错了吗?应该怎么写?

问题相关代码,请勿粘贴截图

这是csp给出的代码,他要预测的元素只有一个,然后是10条
predict_y = zeros(10,1); % 初始化predict_y
pre_test=mapminmax('apply',new_X(:,:)',inputps);% 对预测数据进行归一化
for i = 1: 10
result = sim(net, pre_test(:,i));
predict_y(i) = result;
end
disp('预测值为:')
predict_y=mapminmax('reverse',predict_y,outputps); %把预测结果还原
disp(predict_y)

这是我写的代码,我要预测的元素有两个,是两条
predict_y = zeros(2,4); % 初始化predict_y
pre_test=mapminmax('apply',new_X(:,:)',inputps);% 对预测数据进行归一化
for i = 1: 2
result = sim(net, pre_test(:,i));
predict_y(i) = result;
end
disp('预测值为:')
predict_y=mapminmax('reverse',predict_y,outputps); %把预测结果还原
disp(predict_y)
原文链接:https://blog.csdn.net/qq_45550375/article/details/122955089

运行结果及报错内容

无法执行赋值,因为左侧和右侧的元素数目不同。

  • 写回答

3条回答 默认 最新

  • 陌上花开 ~ 2022-05-09 00:19
    关注

    这是一个好问题,我将上一次的辛烷值做了一个运算,生成一个辛烷值区间,进行预测(预测的元素是4个也罢,2个也行,本质都是类似的)

    公式如下:

    img

    数据修改后为:

    img

    之后2个预测代码都要进行修改才行

    第1个修改如下:

    %% 此程序为matlab编程实现的BP神经网络
    % 清空环境变量
    % clear
    close all  %关闭所有图形窗口
    clc
    
    %%第一步 读取数据
    input=X;   %载入输入数据
    output=Y;  %载入输出数据
    
    %% 第二步 设置训练数据和预测数据
    % 注意要将指标变为列向量
    input_train = input(1:40,:)';
    output_train =output(1:40,:)';
    input_test = input(41:50,:)';
    output_test =output(41:50,:)';
    %节点个数
    inputnum=401; % 输入层节点数量
    hiddennum=10; % 隐含层节点数量
    outputnum=2;  % 输出层节点数量
    %% 第三本 训练样本数据归一化
    [inputn,inputps]=mapminmax(input_train);%归一化到[-1,1]之间,inputps用来作下一次同样的归一化
    [outputn,outputps]=mapminmax(output_train);
    %% 第四步 构建BP神经网络
    net=newff(inputn,outputn,hiddennum,{'tansig','purelin'},'trainlm');% 建立模型,传递函数使用purelin,采用梯度下降法训练
    
    W1= net. iw{1, 1};                  %输入层到中间层的权值
    B1 = net.b{1};                      %中间各层神经元阈值
    
    W2 = net.lw{2,1};                   %中间层到输出层的权值
    B2 = net. b{2};                     %输出层各神经元阈值
    
    %% 第五步 网络参数配置( 训练次数,学习速率,训练目标最小误差等)
    net.trainParam.epochs=1000;         % 训练次数,这里设置为1000次
    net.trainParam.lr=0.01;             % 学习速率,这里设置为0.01
    net.trainParam.goal=0.00001;        % 训练目标最小误差,这里设置为0.00001
    
    %% 第六步 BP神经网络训练
    net=train(net,inputn,outputn);%开始训练,其中inputn,outputn分别为输入输出样本
    
    %% 第七步 测试样本归一化
    inputn_test=mapminmax('apply',input_test,inputps); % 对样本数据进行归一化
    
    %% 第八步 BP神经网络预测
    an=sim(net,inputn_test);                           %用训练好的模型进行仿真
    
    %% 第九步 预测结果反归一化与误差计算     
    test_simu=mapminmax('reverse',an,outputps);        %把仿真得到的数据还原为原始的数量级
    error=test_simu-output_test;                       %预测值和真实值的误差
    
    %%第十步 真实值与预测值误差比较
    figure('units','normalized','position',[0.119 0.2 0.38 0.5])
    plot(output_test,'bo-')
    hold on
    plot(test_simu,'r*-')
    hold on
    plot(error,'square','MarkerFaceColor','b')
    legend('期望值','预测值','误差')
    xlabel('数据组数')
    ylabel('样本值')
    title('BP神经网络测试集的预测值与实际值对比图')
    
    [c,l]=size(output_test);
    MAE1=sum(abs(error))/l;
    MSE1=error*error'/l;
    RMSE1=MSE1^(1/2);
    disp(['-----------------------误差计算--------------------------'])
    disp(['隐含层节点数为',num2str(hiddennum),'时的误差结果如下:'])
    disp(['平均绝对误差MAE为:',num2str(MAE1)])
    disp(['α的均方误差MSE为:       ',num2str(MSE1(1,:))])
    disp(['β的均方误差MSE为:       ',num2str(MSE1(2,:))])
    disp(['α的均方根误差RMSE为:  ',num2str(RMSE1(1,:))])
    disp(['β的均方根误差RMSE为:  ',num2str(RMSE1(2,:))])
    

    第2个修改如下:

    clc;
    predict_y = zeros(10,2); % 初始化predict_y
    pre_test=mapminmax('apply',new_X(:,:)',inputps);% 对预测数据进行归一化
    for i = 1: 10
        result = sim(net, pre_test(:,i));
        predict_y(i,1) = result(1);
        predict_y(i,2) = result(2);
    end
    disp('预测值为:')
    predict_y=predict_y';
    predict_y=mapminmax('reverse',predict_y,outputps); %把预测结果还原
    disp(predict_y)
    

    最终结果:

    img

    中间细节部分希望看博客(目前大三下,时间紧张,但尽力写的详细吧QAQ,有不清楚的可以继续问):

    https://blog.csdn.net/qq_45550375/article/details/122955089

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

报告相同问题?

问题事件

  • 系统已结题 5月17日
  • 已采纳回答 5月9日
  • 赞助了问题酬金10元 5月8日
  • 创建了问题 5月8日

悬赏问题

  • ¥15 请问Ubuntu要怎么安装chrome呀?
  • ¥15 视频编码 十六进制问题
  • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题
  • ¥15 学习指导与未来导向啊