Keras多分类鸢尾花DEMO

完整的一个小demo:

pandas==1.2.4

numpy==1.19.2

python==3.9.2

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pandas import DataFrame
from scipy.io import loadmat
from sklearn.model_selection import train_test_split
import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout
from sklearn import preprocessing
from sklearn.datasets import load_iris
# 映射函数iris_type: 将string的label映射至数字label
import os# data.to_csv('data.csv',index=False)  #cvs保存文件不会保存index列
# data = pd.read_csv('data.csv',index_col=0)  #读取csv文件的时候选择不读取第一列信息
def downLoad():path="../httdemo/"iris = load_iris()data = iris.data #获取特征数据target = iris.target#获取目标数据data_information = DataFrame(data, columns=['bcalyx', 'scalyx', 'length', 'width']) #重新定义特征数据的列名data_target = DataFrame(target, columns=['target'])#目标数据列名targetdata_csv = pd.concat([data_information, data_target], axis=1) #合并特征数据和目标数据到一个DataFrameif not os.path.exists(path):#把DataFrame数据保存到本地,以.CVS的格式保存os.makedirs(path)filename = path + 'iris.csv'  #定义保存路径data_csv.to_csv(filename,index=False) #index==False表示,序号下表列不做保存# 本地数据保存为excel文件# outputfile = "iris.xls"  # 保存文件路径名# column = list(data['feature_names'])# dd = pd.DataFrame(data.data, index=range(150), columns=column)# dt = pd.DataFrame(data.target, index=range(150), columns=['outcome'])# jj = dd.join(dt, how='outer')  # 用到DataFrame的合并方法,将data.data数据与data.target数据合并# jj.to_excel(outputfile)  # 将数据保存到outputfile文件中def readData(path):Data = pd.read_csv(path,names=['bcalyx', 'scalyx', 'length', 'width','target']) #读取本地保存的CVS数据Data.head(10)#展示前10# 变量初始化# 最后一列为y,其余为xcols = Data.shape[1]  # 获取列数 shape[0]行数 [1]列数X = Data.iloc[1:, 0:cols - 1].astype(float)  # 获取得到特征数据,转换为Float的格式,如果输入str,会报错的,取前cols-1列,即输入向量y = Data.iloc[1:, cols - 1:cols]  # 取最后一列,即目标变量X = np.array(X)y = np.array(y)print(y)return X,ydef startM():path = "../httdemo/iris.csv"X,y=readData(path)  #加载数据from sklearn.preprocessing import OneHotEncoder# 创建独热编码器对象encoder = OneHotEncoder() #sklearn创建热编码器对象# 训练独热编码器 (将目标数据进行训练)encoder.fit(y)# 转换特征向量 (将目标数据y转换为特征向量[[0,0,1][0,1,0][0,0,1]])格式encoded_data = encoder.transform(y).toarray()# shuffle = True 随机打乱后再进行分割数据X_train, X_test, y_train, y_test = train_test_split(X, encoded_data, test_size=0.3,shuffle=True)#构建网络模型model = Sequential()model.add(Dense(units=1024, activation='relu', input_dim=4))  # 输入层,1024个激活单元,激活函数为relu,输入数据维度为(4,)model.add(Dense(units=512, activation='relu'))  # 隐藏层,512个激活单元,激活函数为relumodel.add(Dense(units=256, activation='relu'))  # 隐藏层,256个激活单元,激活函数为relumodel.add(Dropout(0.1)) #丢到10%的数据model.add(Dense(units=3, activation='softmax'))  # 输出层,3个输出单元,激活函数为softmax)model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])#开始训练model.fit(X_train, y_train, batch_size=30, epochs=32)#预测测试集的结果result = model.predict(X_test)yTest=np.round(result, 2)#保留俩位小数print(yTest)#测试机准确率评估score = model.evaluate(X_test, y_test)print('loss值为:', score[0])print('准确率为:', score[1])if __name__=='__main__':startM()# downLoad()

 

特征数据是str,需要转换成float 

X = Data.iloc[1:, 0:cols - 1].astype(float)

 

target的数据打印:

热编码转换之后的数据:

测试集预测结果:表示的位概率值,那个数值比较大,就是哪一个类别,每一个数组表示A,B,C

[[0.01 0.28 0.71]
 [0.91 0.06 0.03]
 [0.01 0.28 0.71]
 [0.02 0.33 0.66]
 [0.01 0.28 0.71]
 [0.06 0.51 0.44]
 [0.92 0.05 0.02]
 [0.04 0.43 0.53]
 [0.02 0.38 0.6 ]
 [0.01 0.31 0.67]
 [0.03 0.42 0.55]
 [0.01 0.24 0.76]
 [0.01 0.32 0.67]
 [0.06 0.49 0.45]
 [0.01 0.25 0.74]
 [0.01 0.31 0.68]
 [0.08 0.51 0.42]
 [0.92 0.06 0.02]
 [0.88 0.09 0.04]
 [0.02 0.33 0.65]
 [0.01 0.29 0.7 ]
 [0.01 0.28 0.71]
 [0.04 0.47 0.49]
 [0.9  0.07 0.03]
 [0.91 0.06 0.03]
 [0.86 0.1  0.04]
 [0.18 0.5  0.31]
 [0.89 0.08 0.03]
 [0.91 0.07 0.03]
 [0.06 0.47 0.48]
 [0.02 0.37 0.61]
 [0.04 0.39 0.57]
 [0.87 0.09 0.04]
 [0.05 0.46 0.49]
 [0.01 0.27 0.72]
 [0.02 0.34 0.64]
 [0.05 0.45 0.5 ]
 [0.92 0.06 0.02]
 [0.09 0.53 0.38]
 [0.04 0.48 0.48]
 [0.95 0.04 0.02]
 [0.01 0.26 0.73]
 [0.   0.24 0.76]
 [0.78 0.15 0.07]
 [0.   0.21 0.79]]

运行结果:

训练完成之后保存模型,然后测试模型:

 

读取模型,开始预测:

from tensorflow.keras.models import load_model
import numpy as np
# 模型的导入
model = load_model('../httdemo/httmodel.h5')
# 对数据的预测输入分别为[花萼长,花萼宽,花瓣长,花瓣宽]
y_pred = model.predict([[2,1,5.5,2],[2.3,4.5,5.2,9]])
print(y_pred)
for i in y_pred:a = np.argmax(i)if a == 0 : print('该花为A')elif a == 1 : print('该花为B')elif a == 2 : print('该花为C')

测试结果:准确预测出来为C种类 

 

 

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

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

相关文章

【MYSQL】MYSQL 的学习教程(十)之 InnoDB 锁

数据库为什么需要加锁呢? 如果有多个并发请求存取数据,在数据就可能会产生多个事务同时操作同一行数据。如果并发操作不加控制,不加锁的话,就可能写入了不正确的数据,或者导致读取了不正确的数据,破坏了数…

MySQL数据库多版本并发控制(MVCC)

在数据库中,并发控制是确保多个事务能够同时执行,而不会导致数据不一致或冲突的关键机制。多版本并发控制(MVCC)是一种流行的并发控制方法,它可以允许多个事务同时读取同一数据项的不同版本,而不会相互阻塞。本文将讨论MVCC的原理…

在 iPhone 手机上恢复数据的 7 个有效应用程序

我们的生活离不开 iPhone。无论我们走到哪里,他们都陪伴着我们,让我们保持联系、拍摄照片和视频,并提供娱乐。与此同时,您将计算机安全地放在办公桌上,不受天气影响,也不受伤害。如果您要在任何地方丢失重要…

【ES】Elasticsearch常见问题与解决(持续更新)

目录 Elasticsearch常见问题 1. 集群健康问题 2. 性能问题 3. 映射问题 4. 分片问题 5. 内存问题 6. 硬件问题 7. 配置问题 8. 安全问题 9. 网络问题 10. 版本不兼容 Elasticsearch日常使用小结 【Q】离线告警,有IP已离线 【Q】统计某个应用的某个索引…

Android 13 - Media框架(28)- MediaCodec(三)

上一节我们了解到 ACodec 执行完 start 流程后,会把所有的 input buffer 都提交给 MediaCodec 层,MediaCodec 是如何处理传上来的 buffer 呢?这一节我们就来了解一下这部分内容。 1、ACodecBufferChannel::fillThisBuffer ACodec 通过调用 A…

Java 代理模式

一、代理模式概述 代理模式是一种比较好理解的设计模式。简单来说就是 我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。 代理模式的主要作用是扩展目标…

Linux中proc文件系统相关介绍

proc虚拟文件系统的工作原理 linux 内核是一个非常庞大、非常复杂的一个单独的程序,对于这样一个程序来说调试是非常复杂的。像kernel这样庞大的项目,给里面添加或者修改一个功能是非常麻烦的,因为添加一个功能可能会影响其他已经有的功能。…

3D动态路障生成

3D动态路障生成 介绍设计实现1.路面创建2.空物体的创建3.Create.cs脚本创建 总结 介绍 上一篇文章介绍了Mathf.Lerp的底层实现原理,这里介绍一下跑酷类游戏的动态路障生成是如何实现的。 动态路障其实比较好生成,但是难点在哪里,如果都是平面…

JMeter逻辑控制器之While控制器

JMeter逻辑控制器之While控制器 1. 背景2.目的3. 介绍4.While示例4.1 添加While控制器4.2 While控制器面板4.3 While控制器添加请求4.3 While控制器应用场景 1. 背景 存在一些使用场景,比如:某个请求必须等待上一个请求正确响应后才能开始执行。或者&…

Idea如何从磁盘中应用 下载好的插件流程,安装zip压缩包。

1、将下载的插件文件(通常是一个ZIP文件)复制到IntelliJ IDEA的“plugins”文件夹中。 IDEA版本 2、重启IntelliJ IDEA。 3、在设置窗口中,选择左侧的“Plugins”。 4、选择之前复制到“plugins”文件夹中的插件文件,点击“OK”按…

基于Wenet长音频分割降噪识别

Wenet是一个流行的语音处理工具,它专注于长音频的处理,具备分割、降噪和识别功能。它的长音频分割降噪识别功能允许对长时间录制的音频进行分段处理,首先对音频进行分割,将其分解成更小的段落或语音片段。接着进行降噪处理&#x…

深入理解二分查找算法(一)

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取相机当前实时帧率(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用UserSet功能保存和载入相机的各类参数(C#) Baumer工业相机Baumer工业相机的帧率的技术背景Baumer工业相机的帧率获取方式CameraExplorer如何查看相机帧率信息在NEOAPI SDK里通过函数获取相机帧率 Baume…

Android Studio新手实战——深入学习Activity组件

目录 前言 一、Activity简介 二、任务栈相关概念 三、常用Flag 四、结束当前Activity 五、Intent跳转Activity 六、更多资源 前言 Android是目前全球最流行的移动操作系统之一,而Activity作为Android应用程序的四大组件之一,是Android应用程序的核…

JAX: 快如 PyTorch,简单如 NumPy - 深度学习与数据科学

JAX 是 TensorFlow 和 PyTorch 的新竞争对手。 JAX 强调简单性而不牺牲速度和可扩展性。由于 JAX 需要更少的样板代码,因此程序更短、更接近数学,因此更容易理解。 长话短说: 使用 import jax.numpy 访问 NumPy 函数,使用 import …

华为云CCE-集群内访问-根据ip访问同个pod

华为云CCE-集群内访问-根据ip访问同个pod 问题描述:架构如下:解决方法: 问题描述: 使用service集群内访问时,由于启用了两个pod,导致请求轮询在两个pod之间,无法返回正确的结果。 架构如下&am…

Javascript 可迭代对象与yeild

一、可迭代对象(Iterable object) Javascript 可迭代对象是指实现了Symbol.iterator方法的对象,该方法返回一个迭代器对象,可以通过迭代器对象来遍历对象中的元素。常见的可迭代对象包括数组、字符串、Map、Set等。可以使用for..…

Redis布隆过滤器BloomFilter

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理、分布式技术原理、数据库技术🔥如果感觉博主的文章还不错的…

Unreal Engine游戏引擎的优势

在现在这个繁荣的游戏开发行业中,选择合适的游戏引擎是非常重要的。其中,Unreal Engine作为一款功能强大的游戏引擎,在业界广受赞誉。那Unreal Engine游戏引擎究竟有哪些优势,带大家简单的了解一下。 图形渲染技术 Unreal Engin…

遇见sql语句拼装报错 sql injection violation, syntax error: syntax error, expect RPAREN

在使用PostgreSql瀚高数据库时,相同的语句 select * from public.files_info fi where fi.file_size notnull 在DBever能执行,但是在spring中报错 在spring中JPA版本问题导致,不支持这种写法,会识别为sql注入风险,应…