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

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 MATLAB怎么通过柱坐标变换画开口是圆形的旋转抛物面?
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿