利用神经网络对鸢尾花数据集分类

详细实现代码请见:https://download.csdn.net/download/weixin_43521269/12578696
一.简介
一个人工神经元网络是由一个多层神经元结构组成,每一层神经元拥有输入(它的输入是前一层神经元的输出)和输出,我们把神经元和与之对应的神经元之间的连线用生物学的名称,叫做突触,在数学模型中每个突触有一个加权数值,称做权重,此时第i层上的某个神经元所得到的输出等于每一个权重乘以第i-1层上对应的神经元的输出之和,最后再通过激活函数来对输出进行量化,在与阈值相比较判断是否属于某一类。
本文主要对BP神经网络进行一些粗浅的研究,对神经网络的原理进行了解后,尝试编写基于matlab的BP神经网络代码,然后进行实验。主要采取matlab中自带的数据集:鸢尾花数据集,有三个类别且每个类别具有4个属性,采用K-fold(交叉验证)对数据集进行划分,获取训练数据和测试数据,使用训练集进行训练,得出感知器输出方程的各个权重,接下来对测试集进行测试,最终与原标签进行比较,计算准确率。再调用matlab中的神经网络包对测试集进行测试,得出结果与编写的进行比较。

二.问题描述与数据描述
(一)问题描述
通过本实验加深对神经网络的理解,实现使用BP神经网络对鸢尾花数据集进行分类。

(二)数据描述
matlab中有自带的鸢尾花数据集,且都是已经处理好成mat格式,故只要直接导入便可。它是很常用的一个数据集,鸢尾花有三个分类,分别是山鸢尾(Iris-setosa)、变色鸢尾(Iris-versicolor)和维吉尼亚鸢尾(Iris-virginica)。而且只有四个属性,分别是花萼长度、花萼宽度、花瓣长度、花瓣宽度。总共150条数据。
三.如何解决问题
(一)模型假设
将鸢尾花的属性以坐标形式表示,建立以下支持BP神经网络模型:

1.如图所示,该神经网络一共有三层,输入层、隐藏层与输出层,输入的样本为x1、x2……xd(d=150),输出的向量为y1 y2……yl(l=3),隐藏层神经元数目为q。
2.其中输出层第j个神经元的阈值用θj表示,隐层第h个神经元的阙值用γh表示,输入层第i个神经元与隐层第h个神经元之间的连接权为vih,隐层第h个神经元与输出层第j个神经元之间的连接权为whj,bh为隐藏层第h个神经元的输出。选择sigmoid函数为激活函数。记隐层第h个神经元接收到的输入与输出层第j个神经元接收到的输入分别为:


3.对训练样本(xk,yk),神经网络的输出和均方误差分别为:

4.上面的神经网络中有(d+1+1)q+l个参数需确定:输入层到隐层的d×q个权值、隐层到输出层的q×l个权值、q个隐层神经元的阈值、l个输出层神经元的阈值.BP是一个迭代学习算法,在迭代的每一轮中采用广义的感知机学习规则对参数进行更新估计,任意参数v的更新估计式为

使用梯度下降法,以目标的负梯度方向对参数进行调整。对Ek,给定学习率η,有

注意到whj先影响到第j个输出层神经元的输出值βj,再影响到最终输出值,最后影响到Ek,所以有

由βj的定义有


Sigmoid函数的一个性质有

由公式1、2得
公式10
再将公式8、10带入公式7,再代入公式6得到whj的更新公式

同样可以得到



其中eh为


5.总结
BP算法的工作流程:对每个训练样例,BP算法执行以下操作:
(1)先将输入示例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果;
(2)然后计算输出层的误差(第4-5行),
(3)再将误差逆向传播至隐层神经元(第6行),
(4)最后根据隐层神经元的误差来对连接权和阈值进行调整(第7行该迭代过程循环进行,直到达到某些停止条件为止。


(二)实现代码步骤
1.导入数据集
鸢尾花数据集在matlab中为fisheriris,故使用load fisheriris即可。
2.数据预处理
(1)转化标签
matlab自带的鸢尾花数据集的标签为setosa、versicolo和virginica,在建立神经网络的时候,要将其转化为一个3维的向量。如山鸢尾的标签为[1 0 0]、变色鸢尾的标签为[0 1 0]和维吉尼亚鸢尾的标签为[0 0 1]。
(2)数据归一化
将数据集的所有数据都归一化到[0,1]区间,以便提高模型的收敛速度与精度。
(3)划分训练集与测试集
交叉验证来选取训练集与测试集,将原始数据分成5组(K-Fold),将每个子集数据分别做一次验证集,其余的4组子集数据作为训练集,这样会得到5个模型。这5个模型分别在验证集中评估结果,最后的结果加和平均就得到最终结果。交叉验证有效利用了有限的数据,使得评估结果能够尽可能接近模型在测试集上的表现。流程如下:

本实验将数据集分为五组,每次选取四组为训练集,其他一组为测试集。对鸢尾花数据集进行五次训练,最终将得到五个结果,选取其平均值为最终结果。
(4)建立BP神经网络
根据模型假设中的算法设计编写参数更新代码(使用递归),对训练集进行训练,得出最终的神经网络模型。
(5)测试准确率
对得到的模型进行检验,使用测试集进行仿真训练。
(6)调整模型
进行多次实验,对模型进行微调,如隐藏神经元数目、迭代最大次数、学习率。
(7)与内置包进行比较
调用神经网络包对数据进行训练测试,得出准确率,并进行比较。

四.数值实验
(一)分析结果
1.编程实现神经网络结果
第一次训练的准确率为:96.67%
第二次训练的准确率为:100%
第三次训练的准确率为:100%
第四次训练的准确率为:96.67%
第五次训练的准确率为:90%
平均准确率为:96.67%
2.调用神经网络包结果
第一次训练的准确率为:100%
第二次训练的准确率为:100%
第三次训练的准确率为:93.33%
第四次训练的准确率为:96.67%
第五次训练的准确率为:93.33%
平均准确率为:96.67%

五.总结
由于使用k-折交叉运算的方法进行多次实验,所以以最终平均准确率为标准,自定义BP神经网络的结果与调包使用的结果一致,都为96.67%,而从每一次的训练结果上看,也都保持在90%以上,都能够实现较好的分类。

六.参考文献与网站
[1]机器学习导论
[2]机器学习_周志华
[3]K-Fold 交叉验证 (Cross-Validation)的理解与应用:https://www.cnblogs.com/xiaosongshine/p/10557891.html
[4]matlab 中“newff” 函数的参数设置:
https://blog.csdn.net/weixin_30681121/article/details/99843850
[5]利用BP神经网络分类iris数据集:
https://blog.csdn.net/lovefreewind/article/details/42679243
[6] matlab详解newff(前馈反向传播网络):
https://blog.csdn.net/xiaotao_1/article/details/79078729
[7] matlab神经网络不常见问题:
https://blog.csdn.net/weixin_42296976/article/details/81252809
[8] 支持向量机与神经网络的区别:
https://download.csdn.net/download/chyzh2012/4791564

利用神经网络对鸢尾花数据集分类相关推荐

  1. 一层神经网络实现鸢尾花数据集分类

    一层神经网络实现鸢尾花数据集分类 1.数据集介绍 2.程序实现 2.1 数据集导入 2.2 数据集乱序 2.3 数据集划分成永不相见的训练集和测试集 3.4 配成[输入特征,标签]对,每次喂入一小撮( ...

  2. 【机器学习】决策树案例二:利用决策树进行鸢尾花数据集分类预测

    利用决策树进行鸢尾花数据集分类预测 2 利用决策树进行鸢尾花数据集分类预测 2.1 导入模块与加载数据 2.2 划分数据 2.3 模型创建与应用 2.4 模型可视化 手动反爬虫,禁止转载: 原博地址 ...

  3. (决策树,朴素贝叶斯,人工神经网络)实现鸢尾花数据集分类

    from sklearn.datasets import load_iris # 导入方法类iris = load_iris() #导入数据集iris iris_feature = iris.data ...

  4. Tensorflow搭建神经网络八股及实现鸢尾花数据集分类

    tensorflow笔记系列文章均参考自中国大学Mooc上北京大学软件与微电子学院曹建老师的<Tensorflow笔记2>课程.曹建老师讲的非常棒,受益良多,强烈建议tensorflow初 ...

  5. 基于Adaboost实现鸢尾花数据集分类

    写在之前 提交内容分为两大部分: 一为Adaboost算法实现,代码在文件夹<算法实现>中,<提升方法笔记>为个人学习笔记. 二为基于Adaboost模型实现鸢尾花数据集分类, ...

  6. Python实现鸢尾花数据集分类问题——基于skearn的LogisticRegression

    Python实现鸢尾花数据集分类问题--基于skearn的LogisticRegression 一. 逻辑回归 逻辑回归(Logistic Regression)是用于处理因变量为分类变量的回归问题, ...

  7. 用逻辑回归实现鸢尾花数据集分类(1)

    鸢尾花数据集的分类问题指导 -- 对数几率回归(逻辑回归)问题研究 (1) 这一篇Notebook是应用对数几率回归(Logit Regression)对鸢尾花数据集进行品种分类的.首先会带大家探索一 ...

  8. 实验一:鸢尾花数据集分类

    实验一:鸢尾花数据集分类 一.问题描述 利用机器学习算法构建模型,根据鸢尾花的花萼和花瓣大小,区分鸢尾花的品种.实现一个基础的三分类问题. 二.数据集分析 Iris 鸢尾花数据集内包含 3 种类别,分 ...

  9. KNN算法实现鸢尾花数据集分类

    KNN算法实现鸢尾花数据集分类 作者介绍 数据集介绍 KNN算法介绍 用KNN实现鸢尾花分类 作者介绍 乔冠华,女,西安工程大学电子信息学院,2020级硕士研究生,张宏伟人工智能课题组. 研究方向:机 ...

最新文章

  1. 安装asp.net mvc4后mvc3项目编译报错
  2. wxWidgets:wxURI类用法
  3. c++ Oracle OCCI 编程
  4. Hessian Spring相关使用的简单例子
  5. 大数据分析平台如何选择
  6. Mac OS 常用终端命令(附代码)
  7. PHP报错: Can't use method return value in write context
  8. php将文字生成图片显示,php生成文字图片效果
  9. 太极图正确画法_《太极图》的正确画法
  10. 塔防游戏c语言源代码,转经典塔防游戏TowersTrap-[lua复刻版本,附全部lua源代码]
  11. NameSilo域名解析管理工具
  12. 卡耐基沟通成功学—戴尔·卡耐基
  13. Python Gstreamer播放rtsp视频流(海康IPCAM)
  14. 奥鹏计算机基础计算机病毒是指,奥鹏教育《计算机应用基础》在线考核A卷.doc...
  15. Android studio配置代理下载依赖
  16. 计算机网络第二章选择题,计算机网络技术第二章习题
  17. CnPlugin是PL/SQL Developer工具插件使用
  18. 【转】30 岁前实现财务自由的人,都做对了哪些事?
  19. Vista优化大师3.31正式版下载,磁盘整理升级到1.1
  20. 实名认证接口 实名制API

热门文章

  1. 我,30多岁的土木工程人,终于转行了
  2. windows10正版多少钱_惠安正版OA系统好不好用,高性价比无纸化办公系统大概多少钱_泉州登泽...
  3. 《跟随丁磊的足迹》35岁之前应做的10件事
  4. 首个生成式AI标准正式发布,希尔贝壳作为工作组成员单位参与
  5. 写了一个简单的计算父亲节母亲节等日期的方法
  6. 算法:欧几里得辗转相除法的原理
  7. 写几句对公司的新年祝愿
  8. 笼络人才,再三“表白”,库克表示苹果更看重AR
  9. chrome扩展插件二:chrome插件开发入门
  10. 【计算理论】上下文无关语法 ( CFG ) 转为 下推自动机 ( PDA )