基于matlab的BP神经网络分类预测

 

1.神经网络结构

         本文网络结构如图1所示:

24f4059d669e41c08357bed50da8f6b2.jpeg

图1 网络结构

        图1给出的并不是单纯的bp神经网络结构这里设置了三个隐藏层,神经元个数分别为6,3,3,输入层12个特征输入,输出层输出4个类型结果。

2.代码

%%  清空环境变量
warning off             % 关闭报警信息
close all               % 关闭开启的图窗
clear                   % 清空变量
clc                     % 清空命令行%%  导入数据
res = xlsread('数据集.xlsx');%%  划分训练集和测试集columns=size(res, 2);
rows = size(res, 1);
temp = randperm(rows);
split_num=0.9;%训练集、测试集划分比例为9:1
% 确保 temp 中的索引在 1 到 size(res, 1) 的范围内  
P_train = res(temp(1: rows*split_num), 1: columns-1)';
T_train = res(temp(1: rows*split_num), columns)';
M = size(P_train, 2);P_test = res(temp(rows*split_num: end), 1: columns-1)';
T_test = res(temp(rows*split_num: end), columns)';
N = size(P_test, 2);%%  数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test  = mapminmax('apply', P_test, ps_input);
t_train = ind2vec(T_train);
t_test  = ind2vec(T_test );%%  建立模型
net=newff(p_train, t_train,[6,3,3],{'logsig','tansig','logsig','purelin'});%%  设置训练参数
net.trainParam.epochs = 1000;   % 最大迭代次数
net.trainParam.goal = 1e-6;     % 目标训练误差
net.trainParam.lr = 0.01;       % 学习率%%  训练网络
net = train(net, p_train, t_train);%%  仿真测试
t_sim1 = sim(net, p_train);
t_sim2 = sim(net, p_test );%%  数据反归一化
T_sim1 = vec2ind(t_sim1);
T_sim2 = vec2ind(t_sim2);%%  数据排序
[T_train, index_1] = sort(T_train);
[T_test , index_2] = sort(T_test );T_sim1 = T_sim1(index_1);
T_sim2 = T_sim2(index_2);%%  性能评价
error1 = sum((T_sim1 == T_train)) / M * 100 ;
error2 = sum((T_sim2 == T_test )) / N * 100 ;%%  绘图
figure
plot(1: M, T_train, 'c-*', 1: M, T_sim1, 'b-o', 'LineWidth', 1)
legend('真实值', '预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {strcat('训练集预测结果对比:', ['准确率=' num2str(error1) '%'])};
title(string)
gridfigure
plot(1: N, T_test, 'y-*', 1: N, T_sim2, 'g-o', 'LineWidth', 1)
legend('真实值', '预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {strcat('测试集预测结果对比:', ['准确率=' num2str(error2) '%'])};
title(string)
grid%%  混淆矩阵
figure
cm = confusionchart(T_train, T_sim1);
cm.Title = 'Confusion Matrix for Train Data';
cm.ColumnSummary = 'column-normalized';
cm.RowSummary = 'row-normalized';figure
cm = confusionchart(T_test, T_sim2);
cm.Title = 'Confusion Matrix for Test Data';
cm.ColumnSummary = 'column-normalized';
cm.RowSummary = 'row-normalized';

3.训练图

如图2、图3、图4分别为改进BP神经网络的训练图:

b516016815a3446f9f1228c7f8715711.jpeg           347cf13bdc654d429b1926444d79d708.jpeg         799d9c00d79646038466e30539096540.jpeg

  图2 性能                                   图3 训练状态                                图4 回归  

根据图片中的信息,可以对BP神经网络的训练效果进行以下分析评价:

  1. 性能:图2中提到“最佳验证性能是第10轮的0.017939”,0.017939的值相对较低,这表示该BP神经网络在验证集上取得了相对较好的性能。
  2. 训练状态:从图3的训练状态图可以判断模型正在收敛,没有出现过拟合或欠拟合等问题。
  3. 回归:由图4可以预测值与实际值之间接近,通过散点图、拟合线的形式显示模型的拟合效果。eq?R%5E%7B2%7D达到95%以上,可以判断BP神经网络在回归任务上的表现非常好。

4.分类预测结果

cb7376329b1142968cef4fbccdf7ce27.jpeg                        0dbd0b8f03ae4fbabe2b98bb49e7a157.jpeg

  图5 训练集预测结果                                          图6 测试集预测结果

347984f011eb4a7daeeea63cb75dddab.jpeg                               ee61021987d44b80a8343609750553ca.jpeg

图7 训练集混淆矩阵                                          图8 测试集混淆矩阵

        从图5、图6、图7、图8都看出来了模型预测能力不错,不过这是在数据量不大的情况下,对于大量数据可能效果会差很多,这时候可以考虑调整网络结构或者改用其他模型(简单机器学习模型可能效果会出乎意料得好)

 

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

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

相关文章

提升数据库性能的关键方法总结

提升数据库性能的关键方法总结 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 随着数据库在现代应用中的广泛应用,数据库性能的优化成为了开发人员…

使用ViewDragHelper打造属于自己的DragLayout(抽屉开关 )

</com.xujun.drawerLayout.drag.DragLayout> 在代码中若想为其设置监听器, 分别可以监听打开的 时候&#xff0c;关闭的时候&#xff0c;拖动的时候&#xff0c;可以在里面做相应的处理&#xff0c;同时我还加入了 自定义属性可以通过 app:range”480”或者setRange&am…

如何用Python写一个自然语言ai模型

创建一个自然语言处理&#xff08;NLP&#xff09;模型是一个复杂的过程&#xff0c;涉及到数据收集、预处理、模型选择、训练和评估等多个步骤。 下面是一个简化的Python示例&#xff0c;展示了如何使用现有的库来构建一个基础的自然语言AI模型。这个例子将使用transformers库…

uniapp wgt多环境打包与调试插件——uni-packing-wgt

文章目录 背景介绍安装与使用 背景介绍 由于官方的HBuilderX编译器打包wgt每次都要手动的操作有些繁琐&#xff0c;也不支持多环境打包&#xff0c;在开发阶段与原生项目交互调试是极其不方便。而uni-packing-wgt正好可以解决这些问题。 uni-packing-wgt是uniapp跨平台多环境…

数据传输安全(为支付宝第三方做铺垫)

加解密&#xff1a;防止被拦截看到敏感信息 身份认证&#xff1a;防止伪造 签名 不可逆的加密技术 不可逆加密技术不能用于传输数据&#xff0c;一般用于用户注册&#xff0c;对用户的密码加密 只能加密不能解密&#xff0c;常见算法md5&#xff0c;用户注册加密不能解密&a…

嵌入式linux系统中LCD屏驱动实现思路分析

在 Linux 下 LCD 的使用更加广泛,在搭配 QT 这样的 GUI 库下可以制作出非常精美的 UI 界面。接下来就来学习一下如何在 Linux 下驱动 LCD 屏幕。 第一:Framebuffer设备简介 先来回顾一下裸机的时候 LCD 驱动是怎么编写的,裸机 LCD 驱动编写流程如下: ①、初始化 I.MX6U 的…

Selenium WebDriver - 网络元素

本文翻译整理自&#xff1a;https://www.selenium.dev/documentation/webdriver/elements/ 文章目录 一、文件上传二、定位策略1、传统定位器2、创建定位器3、类名4、CSS选择器5、id6、NAME7、链接文本8、部分链接文本9、标签名称10、xpath11、相对定位器它是如何工作的可用相对…

three.js 第八节 - gltf加载器、解码器

// ts-nocheck // 引入three.js import * as THREE from three // 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls // 导入hdr加载器&#xff08;专门加载hdr的&#xff09; import { RGBELoader } from three/examples/jsm/loaders…

replaceAll的用法总结

replaceAll 的用法总结 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们来详细讲解一下Java中常用的字符串操作方法之一——replaceAll。replaceAll方法…

Ubuntu开机后图像化界面消失只有命令行界面

ubuntu重新安装cpp库时突然黑屏&#xff0c;打开之后&#xff0c;只能手动输入用户名和密码才能登陆&#xff0c;当时最坏的结果就是重新安装系统&#xff0c;但是还是得抢救一下&#xff0c;万幸的是抢救成功了&#xff01;&#xff01;&#xff01; 于是来到第一个博客 参考…

npm全局安装依赖指定存放文件目录

引言 学校机房&#xff0c;每次默认在c盘装完 电脑关机重启都得重新安装&#xff0c;十分麻烦 1-创建依赖安装/缓存目录 2-打开终端输入设置安装目录位置的命令 npm set cache \你创建的缓存文件目录\ npm set prefix \你创建的global全局安装依赖文件目录\至此以后npm -g 依…

自动驾驶仿真Carla -ACC功能测试

我将详细说明如何使用Carla进行ACC&#xff08;自适应巡航控制&#xff09;测试&#xff0c;确保每个步骤贴合实际的Carla自动驾驶仿真标准&#xff0c;并提供相应的代码示例。 使用Carla进行ACC测试的步骤&#xff1a; 1. 环境设置和启动Carla 首先&#xff0c;确保你已经安装…

StudentController

目录 1、 StudentController 1.1、 RegistrationForm 1.1.1、 // Save data to database 1.1.2、 // Generate tracking ID 1.1.3、 // Store tracking ID along with registration details

AI学习指南机器学习篇-朴素贝叶斯模型训练与预测

AI学习指南机器学习篇-朴素贝叶斯模型训练与预测 介绍 在机器学习领域&#xff0c;朴素贝叶斯模型是一种常用的分类算法&#xff0c;其原理简单、实现容易&#xff0c;并且在一些应用场景中取得了不错的效果。本篇博客将详细介绍朴素贝叶斯模型的训练过程和预测过程&#xff…

巴鲁夫MacroBuilder2.0.0.0软件巴鲁夫和使用手侧

巴鲁夫MacroBuilder2.0.0.0软件巴鲁夫和使用手侧

Linux下多进程访问同一个共享库处理流程

两个测试程序实现调用同一个SO库: ​​​​​​​ #include <stdio.h> #include "a/a.h" #include <unistd.h> int main() { int a = 4,b = 5; sum(a, b); int ret = get(); printf("ret=%d\n", ret); sleep(100)…

数据库新技术【分布式数据库】

文章目录 第一章 概述1.1 基本概念1.1.1 分布式数据库1.1.2 数据管理的透明性1.1.3 可靠性1.1.4 分布式数据库与集中式数据库的区别 1.2 体系结构1.3 全局目录1.4 关系代数1.4.1 基操1.4.2 关系表达式1.4.3 查询树 第二章 分布式数据库的设计2.1 设计策略2.2 分布设计的目标2.3…

【Linux】基础IO_2

文章目录 六、基础I/O2. 系统文件I/O磁盘的存储结构 未完待续 六、基础I/O 2. 系统文件I/O 磁盘的存储结构 系统中不是所有对文件都是打开的状态&#xff0c;大部分的文件都是没有被打开的。这些文件一般都被存储在磁盘当中。磁盘通过柱面&#xff0c;扇面&#xff0c;扇区确…

Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案

初始化数据 */ private void initData(Bundle savedInstanceState) { if (savedInstanceState ! null) mDatas savedInstanceState.getStringArrayList(“mDatas”); if (mDatas null) { mLoadingDialog new LoadingDialog(); mLoadingDialog.show(getFragmentMana…

Renesas MCU使用定时器之实现1ms定时中断

目录 概述 1 软硬件介绍 1.1 软件版本信息 1.2 硬件介绍 2 FSP配置项目 2.1 项目参数配置 2.2 配置定时器参数 3 功能实现 3.1 软件架构实现 3.2 实现功能函数 4 测试 概述 本文主要介绍使用Renesas MCU定时器之实现1ms定时中断功能&#xff0c;文中介绍使用FSP配…