TensorFlow、Keras 和 Python 构建神经网络分析鸢尾花iris数据集|代码数据分享

简介: TensorFlow、Keras 和 Python 构建神经网络分析鸢尾花iris数据集|代码数据分享

原文链接:http://tecdat.cn/?p=30305


鸢尾花iris数据集以及MNIST数据集可能是模式识别文献中最著名的数据集之一点击文末“阅读原文”获取完整代码数据


任务描述


这是机器学习分类问题的“Hello World”示例。它由罗纳德·费舍尔于 1936 年首次推出。他是英国统计学家和植物学家,他在本文中使用了这个例子 在分类学问题中使用多重测量, 这在今天经常被引用。数据集查看文末了解数据、代码免费获取方式包含 3 个类,每个类 50 个实例。


每类都指一种鸢尾植物:鸢尾、弗吉尼亚鸢尾和花色鸢尾。 **第一类与其他两个是线性可分离的,但后两个彼此之间不是线性可分离的。每条记录有五个属性:

  • 萼片长度(厘米)
  • 萼片宽度(厘米)
  • 花瓣长度(厘米)
  • 花瓣宽度(厘米)
  • 类(尾、弗吉尼亚鸢尾 杂色鸢尾)

我们将要创建的神经网络的目标是根据其他属性预测鸢尾花的类别。为了解决这个问题,我们将定义步骤:

  • 数据的分析和预处理
  • 构建和训练模型
  • 评估模型
  • 做出新的预测


算法实现步骤


1 数据分析与预处理

数据分析本身就是一个主题。在这里,我们不会深入到特征工程和分析,但我们将观察一些基本步骤:

  • 单变量分析 – 分析每个特征的类型和性质。
  • 缺失数据处理 – 检测缺失数据并制定策略。
  • 相关性分析 – 比较彼此之间的特征。
  • 拆分数据 – 因为我们有一组信息,所以我们需要制作一组单独的数据来训练神经网络和一组数据来评估神经网络。

使用我们在此分析过程中收集的信息,我们可以在创建模型本身期间采取适当的操作。首先,我们导入数据:

COLUMN_NAMES = [
        'Sepal
data = pd.read_csv('iris_data.csv', names=COLUMN_NAMES, header=0)
data.head()

如您所见,我们使用 Pandas 库,我们还打印出前五行数据。这是它的样子:

完成此操作后,我们想看看每个功能的性质是什么 。为此,我们也可以使用猫:

data.dtypes

输出如下所示:

正如我们所看到的,物种或输出的类型为 int64。但是,我们知道这不是我们想要的。我们希望此功能是一个分类变量。这意味着我们需要稍微修改一下这些数据,再次使用 Pandas

data['Species'ype("category")
data.dtypes

完成此操作后,我们检查数据集中是否缺少数据。这是使用此函数完成的:

print(data.i).sum())

此调用的输出为:

丢失数据可能是我们的神经网络的一个问题。如果我们的数据集中缺少数据,我们需要定义一个如何处理它的策略。一些方法是将缺失值替换为要素的平均值或其最大值

但是,没有灵丹妙药,有时不同的策略比其他策略提供更好的结果。好的,进入相关性分析。在此步骤中,我们将检查功能如何相互关联。使用PandasSeaborn模块,我们能够获得一个图像,该图像显示了某些特征之间依赖级别的矩阵 - 相关矩阵

c
fig.set_size_inches(20,10)
sn.heatmap(corrMatt, mask=mask,vmax=.8, square=True,annot=True)

该矩阵如下所示:

我们想使用这个相关矩阵找到 Spices 和一些特征之间的关系。如您所见,这些值介于 -1 和 1 之间。我们的目标是值接近 1 或 -1 的那些,这意味着这些功能没有太多共同点, 即。对彼此的影响太大。


点击标题查阅往期内容


【视频】CNN(卷积神经网络)模型以及R语言实现回归数据分析


01

02

03

04


如果我们遇到这种情况,建议只为模型提供其中一个特征。这样,我们将避免我们的模型给出过于乐观(或完全错误)的预测的情况。但是,在这个数据集中,我们几乎没有信息,所以如果我们删除所有依赖项。

最后,让我们将数据拆分为训练集和测试集。因为客户通常会给我们一大块数据,所以我们需要留下一些数据进行测试。通常,这个比例是80:20。在本文中,我们将使用 70:30。为此,我们使用SciKit Learn库中的函数:

output_data ies",axis=1)
X_train, X_test, y_train, y_test = train_test_split(input_data, output_data, test_size=0.3, random_state=42)

最后,我们有四个变量,其中包含用于训练和测试的输入数据,以及用于训练和测试的输出数据。我们现在可以构建我们的模型。

2 构建和训练神经网络

我们需要一个非常简单的神经网络来进行这种分类。在这里,我们使用模型子类化方法,但您也可以尝试其他方法。以下是 IrisClassifier 类的外观:

class IrisClassifier(Model):
  def __ini0, activation='relu')
    self.layer2 = Dense(10, activation='relu')
    self.outputLayer = Dense(3, activation='softmax')
  def call(self, x):
    x = self.layer1(x)
    x = self.layer2(x)
    return
model.compile(optimizer=tf.keras.optimizers.Adam(),
              loss='categorical_crossentropy',
              metrics=['accuracy'])

它是小型神经网络,具有两层 10 个神经元。最后一层有3个神经元,因为有3类鸢尾花。此外,在最后一层,激活函数使用的是softmax

这意味着我们将以概率的形式获得输出。让我们训练这个神经网络。为此,我们使用 fit 方法并传递准备好的训练数据:

model.fit(X_train, y_train, epochs=300, batch_size=10)

epoch 的数量定义了整个训练集将通过网络传递多少时间。这可以持续几分钟,输出如下所示:

我们完成了。我们创建了一个模型并对其进行了训练。现在,我们必须对其进行评估,看看我们是否有好的结果。


实验结果

3 评估和新预测

评估是通过调用评估 方法完成的。我们向其提供测试数据,并为每个样本运行预测并将其与实际结果进行比较:

scores = mode%" % (scores[1]*100))

在这种特殊情况下,我们得到了95.56%的准确率:

45/45 [==============================] - 0s 756us/step 
Accuracy: 95.56%

最后,让我们得到一些预测:

prediction = mme({'IRIS1':prediction[:,0],'IRIS2':prediction[:,1], 'IRIS3':prediction[:,2]})
prediction1.round(decimals=4).head()

以下是我们与实际结果进行比较的结果:

如果我们使用其他具有真实数据的数据集,这些好的结果将是可疑的。我们可以怀疑发生了“过度拟合”。但是,在这个简单的数据集上,我们将接受这些结果作为良好的结果。

TensorFlow vs PyTorch

TensorFlow/Keras和PyTorch是最流行的深度学习框架。一般来说,区别在于速度(使用 PyTorch 训练模型的速度更快)和 PyTorch 感觉。PyTorch也是纯粹的面向对象的,而使用TensorFlow,你可以选择。此外,TensorFlow在行业中占据主导地位,而PyTorch在研究中很受欢迎。

结论

神经网络已经存在了很长时间,几乎所有重要概念都可以追溯到 1970 年代或 1980 年代。阻止整个领域发展的问题是,当时我们没有强大的计算机和GPU来运行这些类型的过程。现在,我们不仅可以做到这一点,而且谷歌通过公开提供这个伟大的工具——TensorFlow,使神经网络变得流行起来。


相关文章
|
5月前
|
数据采集 Web App开发 数据可视化
Python零基础爬取东方财富网股票行情数据指南
东方财富网数据稳定、反爬宽松,适合爬虫入门。本文详解使用Python抓取股票行情数据,涵盖请求发送、HTML解析、动态加载处理、代理IP切换及数据可视化,助你快速掌握金融数据爬取技能。
3036 1
|
5月前
|
运维 监控 数据可视化
Python 网络请求架构——统一 SOCKS5 接入与配置管理
通过统一接入端点与标准化认证,集中管理配置、连接策略及监控,实现跨技术栈的一致性网络出口,提升系统稳定性、可维护性与可观测性。
|
5月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
602 0
|
5月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
5月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的青少年网络使用情况分析及预测系统
本研究基于Python大数据技术,构建青少年网络行为分析系统,旨在破解现有防沉迷模式下用户画像模糊、预警滞后等难题。通过整合多平台亿级数据,运用机器学习实现精准行为预测与实时干预,推动数字治理向“数据驱动”转型,为家庭、学校及政府提供科学决策支持,助力青少年健康上网。
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
1229 55
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
711 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
机器学习/深度学习 数据采集 数据可视化
TensorFlow,一款由谷歌开发的开源深度学习框架,详细讲解了使用 TensorFlow 构建深度学习模型的步骤
本文介绍了 TensorFlow,一款由谷歌开发的开源深度学习框架,详细讲解了使用 TensorFlow 构建深度学习模型的步骤,包括数据准备、模型定义、损失函数与优化器选择、模型训练与评估、模型保存与部署,并展示了构建全连接神经网络的具体示例。此外,还探讨了 TensorFlow 的高级特性,如自动微分、模型可视化和分布式训练,以及其在未来的发展前景。
1092 5
|
机器学习/深度学习 人工智能 TensorFlow
基于TensorFlow的深度学习模型训练与优化实战
基于TensorFlow的深度学习模型训练与优化实战
674 3
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
585 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络

推荐镜像

更多