【基于BP神经网络的多输入分类预测】

文章目录

  • 前言
      • 环境准备
      • 导入数据
      • 划分训练集和测试集
      • 数据归一化
      • 建立模型
      • 设置训练参数
      • 训练网络
      • 仿真测试
      • 数据反归一化和排序
      • 性能评价
      • 结果可视化
      • 混淆矩阵


前言

  在数据科学和机器学习领域,对复杂数据集进行高精度的分类预测是一个常见且关键的任务。本文通过MATLAB代码示例详细介绍了如何使用反向传播神经网络(BP神经网络)进行多输入单输出的回归预测,涵盖了整个流程从数据处理到模型训练和性能评估的各个步骤。
在这里插入图片描述

环境准备

环境准备阶段的目的是确保我们的MATLAB环境是清洁的,没有干扰因素:

warning off             % 关闭警告信息可以避免一些不必要的输出,使得结果更加清晰。
close all               % 关闭所有图形窗口可以确保后续生成的图像是我们刚刚创建的,而不是之前遗留的。
clear                   % 清除所有变量可以去除先前脚本运行可能遗留在内存中的变量。
clc                     % 清空命令行窗口可以为新的运行结果提供一个干净的视觉环境。

导入数据

此部分使用xlsread函数从Excel文件中读取数据集:

dataset = xlsread('dataset.xlsx');  % 读取'xlsx'文件中的数据并存储到变量'dataset'中。

划分训练集和测试集

为了验证我们模型的泛化能力,我们需要将数据集划分为训练集和测试集:

randomIndices = randperm(357);  % 生成一个1到357的随机排列数组,数值357应该是数据集的样本总数。

使用该随机排列,我们选择前240个样本作为训练集,剩下的作为测试集:

inputs_train = dataset(randomIndices(1: 240), 1: 12)';
targets_train = dataset(randomIndices(1: 240), 13)';
numTrainSamples = size(inputs_train, 2);

上述代码将前12列作为输入特征,第13列作为目标输出,并通过转置操作'确保数据以正确的格式被神经网络接收。

inputs_test = dataset(randomIndices(241: end), 1: 12)';
targets_test = dataset(randomIndices(241: end), 13)';
numTestSamples = size(inputs_test, 2);

测试集的处理方式与训练集类似,但是只包含剩余的样本。

数据归一化

为了提高模型的训练效率和性能,对数据进行归一化处理:

[normalized_inputs_train, input_norm_settings] = mapminmax(inputs_train, 0, 1);
normalized_inputs_test  = mapminmax('apply', inputs_test, input_norm_settings);

mapminmax函数将数据缩放到0和1之间,并且保存了归一化的参数,这样我们可以用相同的参数来归一化测试数据。

encoded_targets_train = ind2vec(targets_train);
encoded_targets_test  = ind2vec(targets_test);

ind2vec函数通常用于将标签编码成神经网络的目标向量。这里似乎是将一个回归问题看作了分类问题,如果这是个回归任务,这步操作可能不适用。

建立模型

创建一个前馈神经网络:

net = newff(normalized_inputs_train, encoded_targets_train, 6);

其中newff是创建新的前馈神经网络的函数,6表示隐藏层的神经元数量。

设置训练参数

设置网络的一些训练参数,如迭代次数、目标误差和学习率:

net.trainParam.epochs = 1000;   % 设置最大迭代次数为1000。
net.trainParam.goal = 1e-6;     % 设置目标误差为很小的数,通常来说越小模型越精确,但训练时间可能更长。
net.trainParam.lr = 0.01;       % 设置学习率,控制权重更新的幅度。

训练网络

使用train函数训练定义好的神经网络:

net = train(net, normalized_inputs_train, encoded_targets_train);

这一步会更新网络的权重和偏差,以最小化误差函数。

仿真测试

在训练集和测试集上进行仿真,得到预测值:

sim_targets_train = sim(net, normalized_inputs_train);
sim_targets_test = sim(net, normalized_inputs_test);

sim函数用于模拟神经网络的输出。

数据反归一化和排序

将输出结果反归一化,并排序:

decoded_sim_targets_train = vec2ind(sim_targets_train);
decoded_sim_targets_test = vec2ind(sim_targets_test);

  如果确实是分类问题,则vec2ind函数将神经网络的输出向量转换回它们原来的标签形式。

排序是为了方便后续的性能评估和可视化对比。

性能评价

计算预测准确率:

accuracy_train = sum((decoded_sim_targets_train == sorted_targets_train)) / numTrainSamples * 100;
accuracy_test = sum((decoded_sim_targets_test == sorted_targets_test)) / numTestSamples * 100;

准确率反映了模型预测正确的样本占总样本数的比例。

结果可视化

  使用plot函数绘制预测值和真实值的对比图,以及使用title, xlabel, ylabel函数设置图像的标题和坐标轴标签。使用legend添加图例,以grid添加网格线增强可读性。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

混淆矩阵

  这部分代码生成了混淆矩阵的可视化,通常在分类问题中更为常见。混淆矩阵显示了模型在不同类别上的表现,包括真阳性、假阳性、真阴性和假阴性的数目。

confusionMatrix.Title = 'Confusion Matrix for Train Data';
confusionMatrix.ColumnSummary = 'column-normalized';
confusionMatrix.RowSummary = 'row-normalized';

  以上就是整个MATLAB脚本的详细解释。需要注意的是,程序将回归问题处理为了分类问题。具体如何处理,取决于原始数据集以及实际问题的需求。在使用之前,可能需要根据具体场景对代码做一些调整。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python3GUI--本地简易音乐播放器By:PyQt5(附下载地址)

文章目录 二.展示1.启动2.添加音乐&播放3.软件风格 三.软件整体功能-览四.实现原理1.界面设计2.音频播放3.打包 五.总结 博客二连发,继续为大家带来我使用PyQt5开发的软件,本次为大家分享我写的一款本地…

MySQL数据库常见SQL语句宝典

一 、常用操作数据库的命令 1.查看所有的数据库 : show databases;2.创建一个数据库 : create database if not exists 数据库名;3.删除一个数据库 : drop database if exists 数据库名;4.选择一张表 (注意在建表之前必须要选择数据库) : use 表名;* --tab 键的上面&#x…

如何我现在是本地的文件路径不是http,用html如何打开

--别给我BB 如何我现在是本地的文件架路径不是http,用html如何打开? 答: 如果你想在HTML中打开本地文件路径的视频,可以使用file://协议。假设你的视频文件在本地的路径为/path/to/your/video.mp4,那么你可以将src属性设置为file…

ULTIMATE VOCAL REMOVER V5 for Mac:专业人声消除软件

ULTIMATE VOCAL REMOVER V5 for Mac是一款专为Mac用户设计的人声消除软件,它凭借强大的功能和卓越的性能,在音乐制作和后期处理领域崭露头角。 ULTIMATE VOCAL REMOVER V5 for Mac v5.6激活版下载 这款软件基于深度神经网络,通过先进的训练模…

关于win11如何打开Hyper-V详解

文章目录 概要一、安装Hyper-V二、启用Hyper-V 概要 我是想要在win11家庭版用docker部署一个,gpt大模型,一开始走了很多弯路,因为要打开Hyper-V,所以我搜集到了一个方法,因为一般win11家庭版的Hyper-v是默认隐藏的&am…

rust前端web开发框架yew使用

构建完整基于 rust 的 web 应用,使用yew框架 trunk 构建、打包、发布 wasm web 应用 安装后会作为一个系统命令,默认有两个特性开启 rustls - 客户端与服务端通信的 tls 库update_check - 用于应用启动时启动更新检查,应用有更新时提示用户更新。nati…

redis基础(一)

启动与关闭 启动命令在/usr/local/bin目录 服务端后台启动:redis-server opt/redis-6.2.1/redis.conf 客户端连接:执行 redis-cli 关闭操作 ​ 方式1:进入终端后关闭 ​ 方式2:直接kill 掉进程 方式3:通过实例关闭 …

C++高级特性:C/C++内存结构模型(十一)

1、内存结构 C/C语言一只被认为是一种底层语言,与其他语言不一样,对内存结构理解是C/C程序员从入门到入土的开端。 其他编程语言对内存管理是透明的,程序员无序关心可以认为是一个黑盒;而C/C不一样理解好内存结构有利于编写健壮性…

碎碎念,最近做了几款小产品...

极简番茄时钟 一款 Mac 版「极简番茄时钟」软件。 知识卡片制作工具 主打简单,同时支持 Markdown 语法。 智能微信助手 让管理变得轻松,沟通更加高效。 感兴趣,欢迎来这里一起交流,限时免费 ~

【软件安装】(十六)双系统Ubuntu22.04引导启动菜单的默认项

一个愿意伫立在巨人肩膀上的农民...... 好学的人总是喜欢在电脑上安装双系统,可是安装好系统之后,就会出现默认启动优先级的苦恼,如果在Bios中设置Windows引导启动为优先启动,那么每次想要进如Ubuntu系统就都需要重新设置Bios。如…

基于 Redis 发布订阅实现服务注册与发现

写在前面 其实很少有公司会使用 Redis 来实现服务注册与发现,通常是ETCD、NACOS、ZOOKEEPER等等,但是也不妨碍我们了解。本文会先介绍 Redis 的发布/订阅模式,接着基于这个模式实现服务注册与发现。 Redis发布订阅流程图: Red…

北京半导体展会2024时间(入场时间+闭馆时间)

2024年第二十一届中国国际半导体博览会(IC CHINA) 时 间:2024 年 9 月 5 一 7 日 地 点:中国北京 北人亦创国际会展中心 作为中国半导体行业协会主办的唯一展览会,自 2003 年起已连续成功举办二十届,是…

ZCT-80零序电流互感器配继电器组合用,电流200/1.5mA JOSEF约瑟

ZCT-80零序电流互感器配继电器组合用,电流200/1.5mA ■ 互感器用于接地保护的装置 ■ 检测零序电流的互感器 ■ 适用于EOCR继电器 功能特点: 专用于剩余电流的检测。 与ELR继电器配合使用。 产品外壳采用ABS阻燃材料,抗干扰能力强,测量…

RFC 6071: IP Security (IPsec) and Internet Key Exchange (IKE) Document Roadmap

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/96882d1fb67b4383bc77c4dd421f7b

Ubuntu中的 Everything 搜索软件 ==> fsearch

本文所使用的 Ubuntu 系统版本是 Ubuntu 22.04 ! 在 Windows 中,我经常使用 Everything 来进行文件搜索,搜索效率比 Windows 自带的高出千百倍。 那么在 Ubuntu 系统中,有没有类似的软件呢?那必须有,它就是 FSearch 。…

【单调栈】3113. 边界元素是最大值的子数组数目

本文涉及的基础知识点 单调栈分类、封装和总结 LeetCode 3113. 边界元素是最大值的子数组数目 给你一个 正 整数数组 nums 。 请你求出 nums 中有多少个子数组,满足子数组中 第一个 和 最后一个 元素都是这个子数组中的 最大 值。 示例 1: 输入&#…

区块链 | OpenSea:Wyvern protocol

目录 Wyvern on the OpenSea 1 交易流程 1.1 卖家 1.2 买家 2 组成部分 2.1 WyvernProxyRegistry 2.2 OwnableDelegateProxy 2.3 NFT Contract 2.4 OpenSea Order Book 2.5 Wyvern Exchange Contract 3 总结 🥑原文:Wyvern on the …

交通气象站监测站

TH-GQX8交通运输在人们的日常生活中扮演着越来越重要的角色。然而,气候变化、环境污染等因素对交通安全产生了极大的影响。为了应对这些挑战,交通气象站监测站应运而生,成为守护交通安全的重要利器。 一、交通气象站监测站的功能 交通气象站…

路透社:美国SEC将拒绝以太坊ETF

4月25日,据路透社报道,美国SEC在下个月将拒绝以太坊现货ETF申请。根据4位知情人士表示,在最近几周与美国证券交易委员会(SEC)进行了会议之后,美国发行商和其他公司预计SEC将拒绝他们推出与以太坊价格挂钩的…

OpenMesh 网格高斯曲率计算(二)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 Mesh曲率特征通常指的是在三维几何网格(Mesh)上计算的曲率相关的一系列特征,包括主曲率、高斯曲率、平均曲率等。这些曲率特征提供了对Mesh表面形状的详细描述,对于表面形状分析、形状比较和几何建模等领域非常…
最新文章