当前位置: 首页 > news >正文

【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期”即可获取下载链接。

相关文章:

【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训练集数据的…...

深度剖析C++ 异常机制

传统排错 我们早在 C 程序里面传统的错误处理手段有: 终止程序,如 assert;缺陷是用户难以接受,说白了就是一种及其粗暴的手法,比如发生内存错误,除0错误时就会终止程序。 返回错误码。缺陷是需要我们自己…...

adb no permissions (user *** is not in the plugdev group)

首次配置ubuntu下的adb 环境,执行了adb device命令会出现以下问题 lvilvi-PC:~/develop/android/sdk/platform-tools$ adb devices List of devices attached 123699aac6536d65 no permissions (user lvi is not in the plugdev group); see [http://develo…...

【外卖系统】分类管理业务

公共字段自动填充 需求分析 对于之前的开发中,有创建时间、创建人、修改时间、修改人等字段,在其他功能中也会有出现,属于公共字段,对于这些公共字段最好是在某个地方统一处理以简化开发,使用Mybatis Plus提供的公共…...

es报错[FORBIDDEN/12/index read-only / allow delete (api)]

报错 [FORBIDDEN/12/index read-only / allow delete (api)] es磁盘满了 postman请求 put 请求 http://loclahost:9200/_settings {"settings": {"index": {"blocks": {"read_only_allow_delete": "false"}}} }...

关于网络通信安全协议的一些知识(ssl,tls,CA,https)

首先了解一下http协议的变迁。 http1.0默认短连接,1.1默认长连接并且可以管道传输,但是存在队头阻塞问题; https就是在tcp和http之间加了SSL/TLS层。 http2也是安全的,改进是hpack二进制和编码压缩减小体积,stream没有…...

Generative Diffusion Prior for Unified Image Restoration and Enhancement 论文阅读笔记

这是CVPR2023的一篇用diffusion先验做图像修复和图像增强的论文 之前有一篇工作做了diffusion先验(Bahjat Kawar, Michael Elad, Stefano Ermon, and Jiaming Song, “Denoising diffusion restoration models,” arXiv preprint arXiv:2201.11793, 2022. 2, 4, 6,…...

GAMES101 笔记 Lecture13 光线追踪1

目录 Why Ray Tracing?(为什么需要光线追踪?)Basic Ray Tracing Algorithm(基础的光线追踪算法)Ray Casting(光线的投射)Generating Eye Rays(生成Eye Rays) Recursive(Whitted-Styled) Ray Tracing Ray-Surface Intersection(光线和平面的交点)Ray Rquation(射线方…...

【多模态】21、BARON | 通过引入大量 regions 来提升模型开放词汇目标检测能力

文章目录 一、背景二、方法2.1 主要过程2.2 Forming Bag of Regions2.3 Representing Bag of Regions2.4 Aligning bag of regions 三、效果 论文:Aligning Bag of Regions for Open-Vocabulary Object Detection 代码:https://github.com/wusize/ovdet…...

2023“Java 基础 - 中级 - 高级”面试集结,已奉上我的膝盖

Java 基础(对象线程字符接口变量异常方法) 面向对象和面向过程的区别? Java 语言有哪些特点? 关于 JVM JDK 和 JRE 最详细通俗的解答 Oracle JDK 和 OpenJDK 的对比 Java 和 C的区别? 什么是 Java 程序的主类&…...

开源项目-erp企业资源管理系统(毕设)

哈喽,大家好,今天给大家带来一个开源项目-erp企业资源管理系统,项目通过ssh+oracle技术实现。 系统主要有基础数据,人事管理,采购管理,销售管理,库存管理,权限管理模块 登录 主页 基础数据 基础数据有商品类型,商品,供应商,客户,仓库管理功能...

Leetcode刷题---C语言实现初阶数据结构---单链表

1 删除链表中等于给定值 val 的所有节点 删除链表中等于给定值 val 的所有节点 给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.valval的节点,并返回新的头节点 输入:head [1,2,6,3,4,5,6], val 6 输出:[…...

opencv hand openpose

使用opencv c 来调用caffemodel 使用opencv 得dnn 模块调用 caffemodel得程序,图片自己输入就行,不做过多得解释,看代码清单。 定义手指关节点 const int POSE_PAIRS[20][2] { {0,1}, {1,2}, {2,3}, {3,4}, // thumb {0,5}, {5,6}, {6,7}…...

flutter fl_chart 柱状图 柱条数量较多 实现左右滑动 固定y轴

一、引入插件 pub.dev:fl_chart package - All Versions 根据项目版本,安装可适配的 fl_chart 版本 二、官网柱状图示例 github参数配置:(x轴、y轴、边框、柱条数据、tooltip等) https://github.com/imaNNeo/fl_c…...

CAN学习笔记1:计算机网络

计算机网络 1 概述 计算机网络就是把多种形式的计算机用通信线路连接起来,并使其能够互相进行交换的系统。实际上,计算机网络包括了计算机、各种硬件、各种软件、组成网络的体系结构、网络传输介质和网络通信计数。因此,计算机网络是计算机…...

NAND flash的坏块

NAND flash的坏块 1.为什么会出现坏块 由于NAND Flash的工艺不能保证NAND的Memory Array(由NAND cell组成的阵列)在其生命周期中保持性能的可靠(电荷可能由于其他异常原因没有被锁起来。因此,在NAND的生产中及使用过程中会产生坏…...

代码随想录算法训练营第二十五天 | 读PDF复习环节3

读PDF复习环节3 本博客的内容只是做一个大概的记录,整个PDF看下来,内容上是不如代码随想录网站上的文章全面的,并且PDF中有些地方的描述,是很让我疑惑的,在困扰我很久后,无意间发现,其网站上的讲…...

18.Netty源码之ByteBuf 详解

highlight: arduino-light ByteBuf 是 Netty 的数据容器,所有网络通信中字节流的传输都是通过 ByteBuf 完成的。 然而 JDK NIO 包中已经提供了类似的 ByteBuffer 类,为什么 Netty 还要去重复造轮子呢?本节课我会详细地讲解 ByteBuf。 JDK NIO…...

#P0999. [NOIP2008普及组] 排座椅

题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的 DD 对同学上课时会交头接耳。 同学们在教室中坐…...

Sentinel 容灾中心的使用

Sentinel 容灾中心的使用 往期文章 Nacos环境搭建Nacos注册中心的使用Nacos配置中心的使用 熔断/限流结果 Jar 生产者 spring-cloud-alibaba:2021.0.4.0 spring-boot:2.6.8 spring-cloud-loadbalancer:3.1.3 sentinel:2021.0…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

测试markdown--肇兴

day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...

Ubuntu系统多网卡多相机IP设置方法

目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机&#xff0c;交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息&#xff0c;系统版本&#xff1a;Ubuntu22.04.5 LTS&#xff1b;内核版本…...