当前位置:   article > 正文

最简单的单层神经网络实现鸢尾花分类_用sklearn构建神经网络模型,并通过鸢尾花数据集中鸢尾花的4种属性与种类对神经网

用sklearn构建神经网络模型,并通过鸢尾花数据集中鸢尾花的4种属性与种类对神经网

一,知识背景
鸢尾花的分类由四个数据定义,分别是花萼长、花萼宽、花瓣长、花瓣宽。我们把这样的一组数据称为是一组特征,根据特征可以分为三类鸢尾花。


二,神经元模型
神经元采用最简单的简化MP(麦卡洛克-皮茨)模型,模型表示如下:
在这里插入图片描述
在鸢尾花分类的例子里,输入为x0,x1,x2,x3以及偏置项b。我们可以定义鸢尾花特征有四个维度,每个维度分别对应一个输入x。
简化模型可以表示为y=x0* w0+x1* w1+x2* w2+x3* w3+b。该形式是很经典的加权求和式,即每个特征维度都对输出结果起到一定的贡献,贡献多少由权重系数w定义。


三,神经网络模型
这里是最简单的单层网络,仅有一个输出层,没有隐藏层:
在这里插入图片描述
输入层输入的是一组特征,对应于特征的四个维度,输出层就是三个判别结果。网络的权重矩阵为四行三列的矩阵,输入特征应为一行四列矩阵,矩阵相乘得到一行三列矩阵,分别就是三种分类花型的结果。


四,权重更新方法
首先,我们定义损失函数为真实结果与预测结果的均方误差
在这里插入图片描述
即平方误差的均值。(关于损失函数,有三大类,第一类以MSE为基准,第二类是以交叉熵为基准,第三类就是自行定义误差)

我们要做的是在在训练网络的过程中不断更新权重和偏置参数使得损失函数(loss function)不断减小最终收敛于某个值。整个过程与LMS法自适应滤波极为相似。保证损失函数下降的方法为取损失函数的梯度,在每次训练时沿着负梯度的方向更新参数:
在这里插入图片描述


五,编程实现
编程实现分为以下几个步骤:
1.加载数据集
2.数据集乱序变换
3.数据集分割为训练集和测试集
4.数据集中的特征与对应的标签配对
5.定义神经网络的权重系数矩阵和偏置
6.设定参数迭代轮次,每次迭代分为一次训练(内有若干批训练数据对网络进行训练),一次更新,以及一次测试(测试也是分为若干批测试数据对网络测试)
7.在训练过程中使用梯度下降法更新权重与偏置并给出训练过程中的损失函数值
8.训练完毕后输入测试数据,输出软分类结果,计算正确率
9.不断重复7和8直到参数迭代次数到达设定值。

# 导入所需模块
import tensorflow as tf
from sklearn import datasets
from matplotlib import pyplot as plt
import numpy as np

# 导入数据,分别为输入特征和标签
x_data = datasets.load_iris().data  # 150行,4列
y_data = datasets.load_iris().target  # 1行,150print(y_data)

# 随机打乱数据(因为原始数据是顺序的,顺序不打乱会影响准确率)
# seed: 随机数种子,是一个整数,当设置之后,每次生成的随机数都一样(为方便教学,以保每位同学结果一致)
np.random.seed(116)  # 使用相同的seed,保证输入特征和标签一一对应,seed使用一次就失效了
np.random.shuffle(x_data)  # shuffle函数可以打乱列表顺序,打乱的规则由seed决定
np.random.seed(116)
np.random.shuffle(y_data)
tf.random.set_seed(116)

# 将打乱后的数据集分割为训练集和测试集,训练集为前120行,测试集为后30行
x_train = x_data[:-30]
y_train = y_data[:-30]
x_test <
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/747217
推荐阅读
相关标签
  

闽ICP备14008679号