matlab BP神经网络对iris数据集进行分类

iris数据集

本文所用数据集👉👉👉iris分类数据集

1.数据预处理

%% 1.数据预处理
oridata=readtable('Iris.xls','Sheet','Sheet1');
X=table2array(oridata(:,(1:4))); % X转化为array类型
Y=table2array(oridata(:,5));  % Y因为包含中文字符,默认会转化为cell类型
allSample_Num=length(Y); %样本数量

% 中文分类变量转换为数字分类变量  确保这里Y是cell类型
for ii = 1:numel(Y)
    if strcmp(Y{ii}, 'Iris-setosa')
        Y{ii} = 1;
    elseif strcmp(Y{ii}, 'Iris-versicolor')
        Y{ii} = 2;
    elseif strcmp(Y{ii}, 'Iris-virginica')
        Y{ii} = 3;
    end
end
Y=cell2mat(Y); % 将Y转换为array类型

2.设置test和train

test_Ratio=0.2; % 测试集比例

c = cvpartition(allSample_Num, 'HoldOut', test_Ratio); % 通过交叉验证的划分对象进行随机划分
trainIdx=training(c); % logistics数组,值1表示被选取 
testIdx=test(c);  % sum(testIdx) == allSample_Num*0.2

X_train=X(trainIdx,:)'; % why转置?——适应netff函数和mapminmax函数的输入要求(行-特征、列-样本)
X_test=X(testIdx,:)';
Y_train=Y(trainIdx,:)';
Y_test=Y(testIdx,:)';

3.数据归一化

%% 3.数据归一化
[X_train_std, X_train_stdps]=mapminmax(X_train,-1,1);  % X_train归一化
% [Y_train_std, Y_train_stdps]=mapminmax(Y_train);
X_test_std=mapminmax('apply',X_test,X_train_stdps);  % X_test采用和X_train一样的归一化方式
Y_train_OneHot=ind2vec(Y_train); % ind2vec 转为独热编码
Y_test_OneHot=ind2vec(Y_test);

4.设定net参数

MSE=1e+10;  % 最优均方误差,初始化一个极大值
hid_Num=0;  % 最优hidden层数目,初始化为0
transF_func={'tansig','purelin'}; % hidden层和out层的激活函数
btf_func='trainlm';  % 反向传播:学习参数的方法(梯度下降)
lr=0.01; % 学习率
epochs=500;   % 训练次数
goal=0.001; % 收敛误差(均方误差)

5.构建、训练net

net=newff(X_train_std, Y_train_OneHot, 4, transF_func, btf_func);
net.trainParam.lr=lr;
net.trainParam.epochs=epochs;
net.trainParam.goal=goal;
net.trainparam.show = 50 ;% 显示中间结果的周期
net=train(net, X_train_std, Y_train_OneHot);

6.结果测试

res_Train=sim(net,X_train_std); % 3×120,每个样本的各类别概率
res_Test=sim(net,X_test_std);   % 3×30,每个样本的各类别概率

res_Train=vec2ind(res_Train); % 1×120,反归一化,找到分类概率最大的所在分类
res_Test=vec2ind(res_Test); % 1×30,反归一化,找到分类概率最大的所在分类

acu_Train=sum(res_Train==Y_train)/allSample_Num*100 % train准确率
acu_Test=sum(res_Test==Y_test)/(allSample_Num*test_Ratio)*100 % test准确率

总结

  1. maxminmap归一化函数和netff函数的输入矩阵都是==”行特征,列样本“==的格式,注意转置
  2. BP实现分类时,Y为分类变量,预处理时需要将其转换成独热编码,sim后将得到的类别概率转换成分类数值,可通过以下函数实现:
    ind2vec:1×120 --> 3×120(转成独热编码,稀疏矩阵)
    vec2ind:3×120 --> 1×120 (取每一列概率分布值的max)
  3. 多次训练时,应保证随机选取样本不变(不要一次运行所有代码)
  4. 在这里插入图片描述

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

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

相关文章

在Mac系统下搭建Selenium环境并驱动Chrome浏览器

本文带领那些使用Mac的童鞋们实现Selenium驱动Chrome浏览器,虽然会有坑,但是我们可以凭借敏捷的身手躲过。下面就开始吧: 安装selenium 打开终端 ->pip安装(安装命令:pip3 install selenium) 安装浏览…

iperf3 编译安装及网讯WX1860千兆网口测试

iperf3 编译安装及网讯1860千兆网口测试 编译安装 安装包下载地址:https://github.com/esnet/iperf/archive/refs/tags/3.8.tar.gz 将安装包iperf-3.8.tar.gz拷贝测试系统盘桌面,使用如下命令进行编译安装: tar zxvf iperf-3.8.tar.gz cd iperf-3.8 ./configure make s…

vue中通过JavaScript实现web端鼠标横向滑动触控板滑动效果-demo

JavaScript实现web端鼠标横向滑动&触控板滑动效果 支持鼠标拖动滑动&触控板滑动效果 web端实现滑动&#xff0c;就是对鼠标按下、鼠标松开、鼠标移动事件进行监听 效果图 代码 结构代码 <template><div class"swiper"><div class"co…

【论文阅读】通过解缠绕表示学习提升领域泛化能力用于主题感知的作文评分

摘要 本文工作聚焦于从领域泛化的视角提升AES模型的泛化能力&#xff0c;在该情况下&#xff0c;目标主题的数据在训练时不能被获得。本文提出了一个主题感知的神经AES模型&#xff08;PANN&#xff09;来抽取用于作文评分的综合的表示&#xff0c;包括主题无关&#xff08;pr…

实时云渲染技术:VR虚拟现实应用的关键节点

近年来&#xff0c;虚拟现实&#xff08;Virtual Reality, VR&#xff09;技术在市场上的应用越来越广泛&#xff0c;虚拟现实已成为一个热门的科技话题。相关数据显示&#xff0c;2019年至2021年&#xff0c;我国虚拟现实市场规模不断扩大&#xff0c;从2019年的282.8亿元增长…

(css)AI智能问答页面布局

(css)AI智能问答页面布局 效果&#xff1a; html <!-- AI框 --><div class"chat-top"><div class"chat-main" ref"chatList"><div v-if"!chatList.length" class"no-message"><span>欢迎使…

特定Adreno GPU的Android设备发生冻屏问题

1&#xff09;特定Adreno GPU的Android设备发生冻屏问题 ​2&#xff09;Unity版本升级后&#xff0c;iOS加载UnityFramework bundle闪退 3&#xff09;关于RectTransfrom.rect在屏幕空间中表示的相关问题 4&#xff09;Unity Mesh泄露问题 这是第345篇UWA技术知识分享的推送&a…

【每日一题】2050. 并行课程 III

【每日一题】2050. 并行课程 III 2050. 并行课程 III题目描述解题思路 2050. 并行课程 III 题目描述 给你一个整数 n &#xff0c;表示有 n 节课&#xff0c;课程编号从 1 到 n 。同时给你一个二维整数数组 relations &#xff0c;其中 relations[j] [prevCoursej, nextCour…

Linux安装部署Nacos和sentinel

1.将nacos安装包下载到本地后上传到linux中 2.进入nacos的/bin目录,输入命令启动nacos [rootlocalhost bin]# sh startup.sh -m standalone注:使用第二种方式启动,同时增加日志记录的功能 2.2 startup.sh文件是不具备足够的权限,否则不能操作 给文件赋予执行权限 [rootlocalh…

yo!这里是STL::string类简单模拟实现

目录 前言 常见接口模拟实现 默认成员函数 1.构造函数 2.析构函数 3.拷贝构造函数 4.赋值运算符重载 迭代器 简单接口 1.size() 2.c_str() 3.clear() 操作符、运算符重载 1.操作符[] 2.运算符 3.运算符> 扩容接口 1.reserve() 2.resize() 增删查改接口 …

【数字IC基础】竞争与冒险

竞争-冒险 1. 基本概念2. 冒险的分类3. 静态冒险产生的判断4. 毛刺的消除使用同步电路使用格雷码增加滤波电容增加冗余项&#xff0c;消除逻辑冒险引入选通脉冲 1. 基本概念 示例一&#xff1a; 如上图所示的这个电路&#xff0c;使用了两个逻辑门&#xff0c;一个非门和一个与…

mybatis-spring

简介 通过简化实现流程&#xff0c;把MyBatis的最核心的内容展示出 mybatis的加载过程 执行流程 类图 核心流程 public class ApiTest {Testpublic void test_queryUserInfoById() {String resource "mybatis-config-datasource.xml";Reader reader;try {reader…

工业平板电脑优化汽车工厂的生产流程

汽车行业一直是自动化机器人系统的早期应用领域之一。通过使用具有高负载能力和远程作用的大型机械臂&#xff0c;汽车装配工厂可以实现点焊、安装挡风玻璃、安装车轮等工作&#xff0c;而较小的机械手则用于焊接和安装子组件。使用机器人系统不仅提高了生产效率&#xff0c;还…

STM32+FPGA的导常振动信号采集存储系统

摘 要 &#xff1a; 针 对 工 厂 重 要 设 备 运 输 途 中 可 能 损 坏 的情 况 &#xff0c; 本 文 设计 了一 套 采 用 &#xff33;&#xff34;&#xff2d;&#xff13;&#xff12;&#xff26;&#xff11;&#xff10;&#xff13;&#xff0b;&#xff26;&#xff3…

nginx mirror代码分析

实现方式 mirror逻辑的工作阶段&#xff1a; ngx在log phase之后&#xff08;在ngx_http_free_request处调用&#xff09;已完成向client端返回response&#xff0c;在log phase之后完成close connection&#xff08;短链接&#xff09;&#xff0c;在该阶段处理mirror逻辑不…

Godot 4 源码分析 - 获取属性信息

在管道通信基础上&#xff0c;可进行宿主程序与Godot的双向通信。 先拿属性信息试试手。 DrGraph端 static UnicodeString command "Book.position"; if (InputQuery("输入窗口", "请输入待获取的属性信息", command)) {TDrStream_Get drGet…

Vue2.x和Vue3.x面试常问知识点-面试题

SPA单页面的理解&#xff0c;它的优缺点分别是什么&#xff1f; 是什么 SPA&#xff08; single page application &#xff09;仅在 Web 页面初始化时加载相应的 HTML、JavaScript 和 CSS。 一旦页面加载完成&#xff0c;SPA 不会因为用户的操作而进行页面的重新加载或跳转 而…

数据结构和算法——表排序(算法概述、物理排序、复杂度分析,包含详细清晰图示过程)

目录 算法概述 物理排序 复杂度分析 算法概述 表排序用于 待排元素都为一个庞大的结构&#xff0c;而不是一个简单的数字&#xff0c;例如&#xff1a;一本书&#xff0c;一部电影等等。 如果这些待排元素都用之前的排序方法&#xff0c;元素需要频繁互换&#xff0c;那么…

内网穿透远程查看内网监控摄像头

内网穿透远程查看内网监控摄像头 在现代社会中&#xff0c;大家总是奔波于家和公司之间。大部分时间用于工作中&#xff0c;也就很难及时知晓家中的动态情况&#xff0c;对于家中有老人、小孩或宠物的&#xff08;甚至对居住环境安全不放心的&#xff09;&#xff0c;这已然是…

01)docker学习 centos7离线安装docker

docker学习 centos7离线安装docker 在实操前可以先看下docker教程,https://www.runoob.com/docker/docker-tutorial.html , 不过教程上都是在线安装方式,很方便,离线安装肯定比如在线麻烦点。 一、什么是Docker 在学习docker时,在网上看到一篇博文讲得很好,自己总结一下…