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.2X_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. 在这里插入图片描述

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

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

相关文章

STM32CUBUMX配置FLASH(W25Q128)--保姆级教程

———————————————————————————————————— ⏩ 大家好哇!我是小光,嵌入式爱好者,一个想要成为系统架构师的大三学生。 ⏩最近在开发一个STM32H723ZGT6的板子,使用STM32CUBEMX做了很多驱动&#x…

(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>欢迎使…

OpenLayers入门,OpenLayers地图初始化时如何设置默认缩放级别、设置默认地图中心点、最大缩放级别和最小缩放级别以及默认坐标系

专栏目录: OpenLayers入门教程汇总目录 前言 OpenLayers地图初始化时如何设置默认缩放级别、初始化时设置默认地图中心点、设置最大缩放级别和最小缩放级别,超过缩放级别用户无法再放大和缩小,和设置默认坐标系。 二、依赖和使用 "ol": "^6.15.1"使用…

Python GDAL为具有多个波段的大量栅格图像绘制像素随时间变化走势图

本文介绍基于Python中的gdal模块&#xff0c;对大量长时间序列的栅格遥感影像文件&#xff0c;绘制其每一个波段中、若干随机指定的像元的时间序列曲线图的方法。 在之前的文章Python中GDAL批量绘制多时相栅格遥感影像的像元时间序列曲线图&#xff08;https://blog.csdn.net/z…

【LLM】浅析chatglm的sft+p-tuning v2

note GLM将针对不同类型下游任务的预训练目标统一为了自回归填空&#xff0c;结合了混合的注意力机制和新的二维位置编码。本文浅析sft&#xff0c;并基于GLM在广告描述数据集上进行sftp-tuning代码的数据流讲解 文章目录 note零、ChatGLM2模型一、Supervised fine-tuning1. 数…

DNS解析常见问题:如何为网站配置负载均衡?

早期的互联网应用&#xff0c;由于用户流量比较小&#xff0c;业务逻辑也比较简单&#xff0c;往往一个单服务器就能满足负载需求。随着现在互联网的流量越来越大&#xff0c;系统功能也越来越复杂&#xff0c;单台服务器就算将性能优化得再好&#xff0c;也不足以支撑太大流量…

C#时间轴曲线图形编辑器开发2-核心功能实现

目录 三、关键帧编辑 1、新建Winform工程 &#xff08;1&#xff09;界面布局 &#xff08;2&#xff09;全局变量 2、关键帧添加和删除 &#xff08;1&#xff09;鼠标在曲线上识别 &#xff08;2&#xff09;键盘按键按下捕捉 &#xff08;3&#xff09;关键帧添加、删…

Unity自定义后处理——用偏导数求图片颜色边缘

大家好&#xff0c;我是阿赵。   继续介绍屏幕后处理效果的做法。这次介绍一下用偏导数求图形边缘的技术。 一、原理介绍 先来看例子吧。   这个例子看起来好像是要给模型描边。之前其实也介绍过很多描边的方法&#xff0c;比如沿着法线方向放大模型&#xff0c;或者用Ndo…

Palo Alto Networks 智能网络安全保护任何地方的用户、应用和数据

Palo Alto Networks 不仅能够为数字企业提供当下所需的网络安全服务&#xff0c;还能为日后的工作打好安全基础&#xff0c;让企业无需在二者间权衡和纠结&#xff0c;这样的网络安全合作伙伴仅此一家。我们承诺将双管齐下&#xff0c;在保障数字企业的安全方面绝不妥协退让。下…

专题-【排序比较】

时间最好&#xff1a;直接和冒泡&#xff0c;n 堆排序和归并时间固定&#xff1a;nlog2n 空间&#xff1a;归并&#xff0c;n&#xff1b;快速&#xff0c;log2n 稳定&#xff1a;直冒归基

Sharding-JDBC分布式事务详解与实战

&#x1f680; ShardingSphere &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&…

K8s卷存储详解(二)

K8s卷存储详解&#xff08;二&#xff09; 持久卷持久卷&#xff08;PV&#xff09;持久卷申领&#xff08;PVC&#xff09;存储类&#xff08;StorageClass&#xff09;存储制备器&#xff08;Provisioner&#xff09;PV和PVC的生命周期持久卷的类型CSI 卷快照CSI 卷克隆 投射…

多租户的低代码平台,Saas开发平台:MateCloud

简介 MateCloud是一款基于Spring Cloud Alibaba的微服务架构。目前已经整合Spring Boot 2.7.0、 Spring Cloud 2021、Spring Cloud Alibaba 2021、Spring Security Oauth2、Feign、Dubbo、JetCache、RocketMQ等&#xff0c;支持多租户的低代码平台&#xff0c;Saas平台开发套件…

Kylin 麒麟 Qt软件 QtCreator 中文输入法问题

Kylin 麒麟 Qt软件 QtCreator 中文输入法问题 背景&#xff1a; QtCreator 和程序在麒麟系统下没法进行输入&#xff0c;或没法进行输入法的切换。 包括麒麟自带默认搜狗输入法的切换也不行。 使用下面的命令进行安装后&#xff0c;可以正常在QtCreator和程序中使用输入法。 …

Elasticsearch-增删改查数据工作原理

集群 集群的基本概念&#xff1a; 集群&#xff1a;ES 集群由一个或多个 Elasticsearch 节点组成&#xff0c;每个节点配置相同的 cluster.name 即可加入集群&#xff0c;默认值为 “elasticsearch”。节点&#xff1a;一个 Elasticsearch 服务启动实例就是一个节点&#xff…

【Linux】线程同步条件变量

目录 1 线程同步的引入 2 条件变量&线程同步&竞争条件的概念 3 条件变量相关函数 初始化 销毁 等待条件满足 唤醒等待 4 demo代码——理解条件变量&线程同步 5 为什么 pthread_cond_wait 需要互斥量? 6 条件变量使用规范 1 线程同步的引入 例子生活化&…

【多任务编程-线程通信】

进程/线程通信的方式 某些应用程序中&#xff0c;进程/进程和线程/线程之间不可避免的进行通信&#xff0c;进行消息传递&#xff0c;数据共享等 同一进程的线程之间通信方式包括Windows中常用Event, Message等。 不同进程之间的通信可以利用Event, FileMapping(内存共享), W…

集合--collections

一、collections概述 Collections和Arrays、Objects-一样&#xff0c;都是一种针对性的工具类, Arrays是针对数组&#xff0c;Objects是针对Object, 而Colections则是针对集合的一种工具类&#xff0c;里面提供了大量的方便我们操作集合的方法: //往集合中添加一些元素。 p…

Ajax详细讲解

Ajax&#xff08;Asynchronous JavaScript And XML&#xff09;即异步 JavaScript 和 XML&#xff0c;是一组用于在网页上进行异步数据交换的 Web 开发技术&#xff0c;可以在不刷新整个页面的情况下向服务器发起请求并获取数据&#xff0c;然后将数据插入到网页中的某个位置。…

24考研数据结构-栈和队列的应用

目录 3.3.1栈在括号匹配中的应用流程图算法代码 3.3.2栈在表达式求值中的应用1. 中缀表达式 (需要界限符)2. 后缀表达式 (逆波兰表达式)中缀表达式转后缀表达式-手算重点&#xff1a;中缀表达式转后缀表达式-机算重点&#xff1a;后缀表达式的计算—机算 3.前缀表达式 (波兰表达…