【MATLAB第62期】基于MATLAB的PSO-NN、BBO-NN、前馈神经网络NN回归预测对比

【MATLAB第62期】基于MATLAB的PSO-NN、BBO-NN、前馈神经网络NN回归预测对比

一、数据设置

1、7输入1输出
2、103行样本
3、80个训练样本,23个测试样本

二、效果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

NN训练集数据的R2为:0.73013
NN测试集数据的R2为:0.23848
NN训练集数据的MAE为:3.0122
NN测试集数据的MAE为:4.4752
NN训练集数据的MAPE为:0.088058
NN测试集数据的MAPE为:0.1302
PSO-NN训练集数据的R2为:0.76673
PSO-NN测试集数据的R2为:0.72916
PSO-NN训练集数据的MAE为:3.124
PSO-NN测试集数据的MAE为:3.1873
PSO-NN训练集数据的MAPE为:0.088208
PSO-NN测试集数据的MAPE为:0.094787
BBO-NN训练集数据的R2为:0.67729
BBO-NN测试集数据的R2为:0.46872
BBO-NN训练集数据的MAE为:3.5204
BBO-NN测试集数据的MAE为:4.4843
BBO-NN训练集数据的MAPE为:0.099475
BBO-NN测试集数据的MAPE为:0.14177

三、代码展示(部分)

%%PSO-NN及BBO-BP回归
%基于生物地理优化进化算法(BBO)
%-----------------------------------------------------------------------
%%  清空环境变量
warning off             % 关闭报警信息
close all               % 关闭开启的图窗
clear                   % 清空变量
clc                     % 清空命令行
rng(0)
%%  导入数据
res = xlsread('数据集.xlsx');%%  划分训练集和测试集
temp = randperm(103);P_train = res(temp(1: 80), 1: 7)';
T_train = res(temp(1: 80), 8)';
M = size(P_train, 2);P_test = res(temp(81: end), 1: 7)';
T_test = res(temp(81: end), 8)';
N = size(P_test, 2);%%  数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);
%% Learning 
n = 9; % Neurons
%----------------------------------------
% 'trainlm'	    Levenberg-Marquardt
% 'trainbr' 	Bayesian Regularization (good)
% 'trainrp'  	Resilient Backpropagation
% 'traincgf'	Fletcher-Powell Conjugate Gradient
% 'trainoss'	One Step Secant (good)
% 'traingd' 	Gradient Descent
% Creating the NN ----------------------------
net = feedforwardnet(n,'trainoss');
%---------------------------------------------
% configure the neural network for this dataset
[net tr]= train(net,p_train, t_train);
perf = perform(net,p_train', t_train'); % mse%%  仿真预测
t_sim01=net(p_train);
t_sim02=net(p_test);
T_sim01 = mapminmax('reverse', t_sim01, ps_output);
T_sim02 = mapminmax('reverse', t_sim02, ps_output);%%  均方根误差
error01 = sqrt(sum((T_sim01 - T_train).^2) ./ M);
error02 = sqrt(sum((T_sim02 - T_test ).^2) ./ N);%%  绘图
figure()
subplot(2,1,1)
plot(1: M, T_train, 'r-*', 1: M, T_sim01, 'b-o', 'LineWidth', 1)
legend('真实值', '预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'NN训练集预测结果对比'; ['RMSE=' num2str(error01)]};
title(string)
xlim([1, M])
gridsubplot(2,1,2)
plot(1: N, T_test, 'r-*', 1: N, T_sim02, 'b-o', 'LineWidth', 1)
legend('真实值', '预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'NN测试集预测结果对比'; ['RMSE=' num2str(error02)]};
title(string)
xlim([1, N])
gridt_sim11=net_pso(p_train);
t_sim22=net_pso(p_test);
T_sim11 = mapminmax('reverse', t_sim11, ps_output);
T_sim22 = mapminmax('reverse', t_sim22, ps_output);
%%  均方根误差
error11 = sqrt(sum((T_sim11 - T_train).^2) ./ M);
error22 = sqrt(sum((T_sim22 - T_test ).^2) ./ N);%%  相关指标计算
%  R2
R01 = 1 - norm(T_train - T_sim01)^2 / norm(T_train - mean(T_train))^2;
R02 = 1 - norm(T_test  - T_sim02)^2 / norm(T_test  - mean(T_test ))^2;disp(['NN训练集数据的R2为:', num2str(R01)])
disp(['NN测试集数据的R2为:', num2str(R02)])%  MAE
mae01 = sum(abs(T_sim01 - T_train)) ./ M ;
mae02 = sum(abs(T_sim02 - T_test )) ./ N ;disp(['NN训练集数据的MAE为:', num2str(mae01)])
disp(['NN测试集数据的MAE为:', num2str(mae02)])%  MAPE   mape = mean(abs((YReal - YPred)./YReal));mape01 = mean(abs((T_train - T_sim01)./T_train));    
mape02 = mean(abs((T_test - T_sim02 )./T_test));      disp(['NN训练集数据的MAPE为:', num2str(mape01)])
disp(['NN测试集数据的MAPE为:', num2str(mape02)])%%  绘图
figure()
subplot(2,1,1)
plot(1: M, T_train, 'r-*', 1: M, T_sim11, 'b-o', 'LineWidth', 1)
legend('真实值', '预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'PSO-NN训练集预测结果对比'; ['RMSE=' num2str(error11)]};
title(string)
xlim([1, M])
gridsubplot(2,1,2)
plot(1: N, T_test, 'r-*', 1: N, T_sim22, 'b-o', 'LineWidth', 1)
legend('真实值', '预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'PSO-NN测试集预测结果对比'; ['RMSE=' num2str(error22)]};
title(string)
xlim([1, N])
grid%%  相关指标计算
%  R2
R11 = 1 - norm(T_train - T_sim11)^2 / norm(T_train - mean(T_train))^2;
R22 = 1 - norm(T_test  - T_sim22)^2 / norm(T_test  - mean(T_test ))^2;disp(['PSO-NN训练集数据的R2为:', num2str(R11)])
disp(['PSO-NN测试集数据的R2为:', num2str(R22)])%  MAE
mae11 = sum(abs(T_sim11 - T_train)) ./ M ;
mae22 = sum(abs(T_sim22 - T_test )) ./ N ;disp(['PSO-NN训练集数据的MAE为:', num2str(mae11)])
disp(['PSO-NN测试集数据的MAE为:', num2str(mae22)])%  MAPE   mape = mean(abs((YReal - YPred)./YReal));mape11 = mean(abs((T_train - T_sim11)./T_train));    
mape22 = mean(abs((T_test - T_sim22 )./T_test));      disp(['PSO-NN训练集数据的MAPE为:', num2str(mape11)])
disp(['PSO-NN测试集数据的MAPE为:', num2str(mape22)])%% BBO优化 NN 权重和偏差
%% PSO优化 NN 权重和偏差
Weights_Bias_bbo=getwb(net_bbo);t_sim31=net_bbo(p_train);
t_sim32=net_bbo(p_test);
T_sim31 = mapminmax('reverse', t_sim31, ps_output);
T_sim32 = mapminmax('reverse', t_sim32, ps_output);
%%  均方根误差
error31 = sqrt(sum((T_sim31 - T_train).^2) ./ M);
error32 = sqrt(sum((T_sim32 - T_test ).^2) ./ N);%%  绘图
figure()
subplot(2,1,1)
plot(1: M, T_train, 'r-*', 1: M, T_sim31, 'b-o', 'LineWidth', 1)
legend('真实值', '预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'BBO-NN训练集预测结果对比'; ['RMSE=' num2str(error31)]};
title(string)
xlim([1, M])
gridsubplot(2,1,2)
plot(1: N, T_test, 'r-*', 1: N, T_sim32, 'b-o', 'LineWidth', 1)
legend('真实值', '预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'BBO-NN测试集预测结果对比'; ['RMSE=' num2str(error32)]};
title(string)
xlim([1, N])
grid%%  相关指标计算
%  R2
R31 = 1 - norm(T_train - T_sim31)^2 / norm(T_train - mean(T_train))^2;
R32 = 1 - norm(T_test  - T_sim32)^2 / norm(T_test  - mean(T_test ))^2;disp(['BBO-NN训练集数据的R2为:', num2str(R31)])
disp(['BBO-NN测试集数据的R2为:', num2str(R32)])%  MAE
mae31 = sum(abs(T_sim31 - T_train)) ./ M ;
mae32 = sum(abs(T_sim32 - T_test )) ./ N ;disp(['BBO-NN训练集数据的MAE为:', num2str(mae31)])
disp(['BBO-NN测试集数据的MAE为:', num2str(mae32)])%  MAPE   mape = mean(abs((YReal - YPred)./YReal));mape31 = mean(abs((T_train - T_sim31)./T_train));    
mape32 = mean(abs((T_test - T_sim32 )./T_test));      disp(['BBO-NN训练集数据的MAPE为:', num2str(mape31)])
disp(['BBO-NN测试集数据的MAPE为:', num2str(mape32)])

四、代码获取

后台私信回复“62期”即可获取下载链接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/19032.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python tqdm的两种用法【教程】

Python tqdm的两种用法 本文记录一下在学习深度强化学习过程中遇到tqdm库显示进度条的用法,以供大家交流。 注意本文使用的tqdm均是使用的tqdm库中的同名tqdm方法,应该按照如下方式导入 from tqdm import tqdmCatologue Python tqdm的两种用法1. 基于可…

在Spring Boot框架中使用拦截器实现URL限制

限制URL列表的JSON格式可以根据您的需求进行定义。以下是一个示例: { "restrictions": [ { "url": "/api/endpoint1", "params": { "param1": "value1", "param2": "value2" } },…

RUST 有哪些整型?

在Rust中,有以下几种整型数据类型: i8 :有符号8位整型,取值范围为-128到127。u8 :无符号8位整型,取值范围为0到255。i16 :有符号16位整型,取值范围为-32768到32767。u16 &#xff1…

CUDA并行编程

并行编程 参考 1. pthread 求素数 // PrimesThreads.c // PrimesThreads.c// threads-based program to find the number of primes between 2 and n; // uses the Sieve of Eratosthenes, deleting all multiples of 2, all // multiples of 3, all multiples of 5, etc./…

淘宝开放平台API接口用法介绍

淘宝是中国最大的电子商务平台之一,其开放平台API接口为开发者提供了强大的数据支持。在本篇文章中,我们将从多个方面对淘宝开放平台API接口进行详细阐述。 一、API概述 淘宝开放平台提供了丰富的API接口,涵盖了商品、店铺、交易、物流、用…

使用Update修改不报错但是修改不成功

使用Update修改不报错但是修改不成功 sql执行后 后台日志说影响行数为0。然后发现是id不存在。 因为项目中使用自动生成ID,使用的是雪花算法,长度超过了前端js可处理长度,所以当后台id传到前台后会丢失精度,导致无法匹配到要修改…

解决Mysql报错2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)

1.找到mysql文件夹,将my,ini文件放入bin文件夹 2.管理员模式打开cmd 3.输入netstat -ano查看端口占用情况,这里我已经开启mysql应用,所以会有3306,如果没有开启是不会有的 4.输入sc delete mysql,删除mysql服务 5.将…

接口自动化报告,生成本地服务并自动打开时失败

错误原因: 端口号被占用 首先可以在cmd中调出命令窗口然后执行命令netstat -ano就可以查看所有活动的链接,找到被占用的端口号 1、通过命令taskkill /f /t /im "进程名称" ,根据进程的名称杀掉所有的进程。或者taskkill /f /t /p…

嵌入式开发的学习内容和技能包括:

. 熟悉C语言编程 掌握基础电子知识,如数字电路、模拟电路和单片机 .熟练掌握嵌入式操作系统的原理、内核架构和应用,如Linux、RTOS等 了解各种外设接口及其驱动程序开发,如SPI、I2C、USART等 熟悉常用的嵌入式开发工具和软件工程流程&#…

如何通过 5 步激活策略扩大用户群

假设,你现在是一个“深藏功与名”的增长黑客。前期你表现非常好,做了一些拉新实验,每天都有上千用户进入到产品。团队成员和家人朋友都非常开心你们的产品增长终于有了起色。 然而,如果你不重视拉新(acquisition&…

ES6系列之let、const、箭头函数使用的坑

变量提升块级作用域的重要性箭头函数this的指向rest参数和arguments 1.ECMAScript与Js的关系 2.Babel转码器 Babel是一个广泛使用的ES6转码器,可以将ES6代码转为ES5代码,从而在老版本的浏览器执行。这意味着,你可以用ES6的方式编写程序&…

【微服务】springboot整合redis哨兵集群使用详解

目录 一、前言 二、环境准备 三、安装redis 3.1 前置准备 3.1.1 下载安装包 3.1.2 准备依赖环境 3.1.3 上传并解压包 3.2 执行安装 四、搭建redis主从集群 4.1 环境准备 4.2 搭建过程 4.2.1 创建实例文件目录 4.2.2 修改redis.conf配置文件 4.2.3 拷贝配置文件 4…

喜讯! WorkPlus入选中国信通院数字产品“2023全景图”!

“2023数字生态发展大会”暨中国信通院“铸基计划” WorkPlus喜讯 7月27日,中国信息通信研究院(下称“中国信通院”)主办的“2023数字生态发展大会”暨中国信通院“铸基计划”年中会议在京召开,大会全面地总结了“铸基计划”上半…

Linux系统安装部署MongoDB完整教程(图文详解)

前言:本期给大家分享一下目前最新Linux系统安装部署MongoDB完整教程,我的服务器采用的是Centos7,在部署之前我重装了我的服务器,目的是为了干净整洁的给大家演示我是如何一步步的操作的,整体部署还是挺简洁&#xff0c…

JavaScript 手撕大厂面试题数组扁平化以及增加版本 plus

前言 现在的前端面试手撕题是一个必要环节,有点时候八股回答的不错但是手撕题没写出来就会让面试官印象分大减,很可能就挂了… 概念 数组的扁平化其实就是将一个多层嵌套的数组转换为只有一层的数组 比如: [1, [2, [3, [4, 5]]]] > [1…

机器学习十大经典算法

机器学习算法是计算机科学和人工智能领域的关键组成部分,它们用于从数据中学习模式并作出预测或做出决策。本文将为大家介绍十大经典机器学习算法,其中包括了线性回归、逻辑回归、支持向量机、朴素贝叶斯、决策树等算法,每种算法都在特定的领…

Docker 安装 MySQL

目录 一、查看 MySQL 版本 二、拉取 MySQL 镜像 三、查看本地镜像 四、运行容器 五、停止和启动容器 六、列出正在运行的容器 七、进入容器 八、登录MySQL 一、查看 MySQL 版本 访问 MySQL 镜像库地址:https://hub.docker.com/_/mysql?tabtags 。 可以通…

ODIN_1靶机详解

ODIN_1靶机复盘 下载地址:https: //download.vulnhub.com/odin/odin.ova 靶场很简单,一会儿就打完了。 靶场说明里提醒说加一个dns解析。 我们在/etc/hosts加一条解析 就能正常打开网站了,要么网站打开css是乱的。 这里看到结尾就猜测肯定…

2023年性价比电脑硬件主机推荐|电脑党必备硬件选购攻略

在自主搭建电脑变得流行且显卡价格飙升的这个时代,我想给大家推荐一款特别的产品——NUC(Next Unit of Computing)。 NUC是Intel所推出的一种「ITX台式机」,截止目前已经迭代了很多型号,比如之前我买过的猛兽峡谷&…

贝锐蒲公英:没有公网IP,多分支企业如何高效远程访问OA系统?

贝锐蒲公英:没有公网IP,多分支企业、移动办公人员如何高效远程访问OA系统? 国内某大型美妆公司,旗下产品覆盖美容护肤品、彩妆、美容仪器、健康食品、SPA美容会所及等多类服务,致力于为客户提供高品质的产品和完善的服…