Keras多分类鸢尾花DEMO

news2025/2/24 21:33:12

完整的一个小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'])#目标数据列名target
    data_csv = pd.concat([data_information, data_target], axis=1) #合并特征数据和目标数据到一个DataFrame
    if 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,其余为x
    cols = 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,y

def 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个激活单元,激活函数为relu
    model.add(Dense(units=256, activation='relu'))  # 隐藏层,256个激活单元,激活函数为relu
    model.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.coloradmin.cn/o/1340837.html

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

相关文章

硅像素传感器文献调研(三)

写在前面: 引言:也是先总结前人的研究结果,重点论述其不足之处。 和该方向联系不大,但还是有值得学习的地方。逻辑很清晰,易读性很好。 1991年—场板半阻层 使用场板和半电阻层的高压平面器件 0.摘要 提出了一种…

【没有哪个港口是永远的停留~论文简读】Panoptic SegFormer

Panoptic SegFormer 原文:https://arxiv.org/pdf/2109.03814.pdf 代码:GitHub - zhiqi-li/Panoptic-SegFormer: This is the official repo of Panoptic SegFormer [CVPR22] 在全景分割中,图像内容可分为things和stuff两类。 things是可计…

2023.12.28力扣每日一题——收集巧克力

2023.12.28 题目来源我的题解(参考力扣官方题解)方法一 枚举方法二 二次差分 题目来源 力扣每日一题;题序:2735 我的题解(参考力扣官方题解) 嗯……今天不会,就当一次搬运工吧。 方法一 枚举…

去水印软件哪个好用?用他们就够了

随着数字媒体的发展,越来越多的人开始需要处理带有水印的图片或视频。水印不仅是一种版权保护手段,也常常被用来标记图片或视频的来源。然而,在某些情况下,我们可能需要去除水印以实现更好的使用效果。那么,去水印软件…

【C++进阶03】二叉搜索树

一、二叉搜索树的概念和性质 中序遍历二叉搜索树会得到一个有序序列 所以二叉搜索树又称二叉排序树 它可以是一棵空树 也可以是具有以下性质的二叉树: 若它的左子树不为空 则左子树上所有节点的值都小于根节点的值若它的右子树不为空 则右子树上所有节点的值都大于…

技术经验|Java基础之LocalTime类

文章目录 1 背景2 Time包在实际开发中的位置3 本地日期和时间类3.1 LocalTime自带功能3.2 LocalTime继承、重写功能 4 总结 📫 作者简介:「六月暴雪飞梨花」,专注于研究Java,就职于科技型公司后端工程师 🔥 三连支持&a…

【Java系列】多线程案例学习——基于阻塞队列实现生产者消费者模型

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【Java系列专栏】【JaveEE学习专栏】 本专栏旨在分享学习JavaEE的一点学习心得,欢迎大家在评论区交流讨论💌 目录…

九九乘法表c 语言 用于打印九九乘法表

以下是一个简单的C语言程序&#xff0c;用于打印九九乘法表&#xff1a; #include <stdio.h>int main() {int i, j;for (i 1; i < 9; i) {for (j 1; j < i; j) {printf("%d*%d%-2d ", j, i, i*j);}printf("\n");}return 0; }解释&#xff1…

GBASE南大通用GBaseCommand 类

代表一个要对 GBASE南大通用数据库执行操作的 SQL 语句。这个类不能被继承。对 于该类所有成员的列表&#xff0c;参考 GBASE南大通用 GBaseCommand 成员。  继承层次 System.Object |__ System.MarshalByRefObject |__ System.ComponentModel.Component |__ System.D…

go语言,ent库与gorm库,插入一条null值的time数据

情景介绍 使用go语言&#xff0c;我需要保存xxxTime的字段至数据库中&#xff0c;这个字段可能为空&#xff0c;也可能是一段时间。我采取的是统一先赋值为空&#xff0c;若有需要&#xff0c;则再进行插入&#xff08;需要根据另一个字段判断是否插入&#xff09; 在我的数据…

‘>>’,‘<<’和‘’的使用

>>: n n >> 1 是使用位移运算符将 n 向右移动一位的操作。在 C 语言中&#xff0c;>> 是右移位运算符&#xff0c;表示将二进制数向右移动指定的位数。 对于无符号整数&#xff0c;在右移位操作时&#xff0c;高位用 0 填充。例如&#xff0c;如果 n 的二…

Navicat导入与导出表的操作流程

我们使用Navicat时&#xff0c;创建表有两种方法&#xff0c;一种是写SQL语句&#xff0c;这种方法适合数据较少的表&#xff1b;另一种是通过“导入向导”功能导入表&#xff0c;这种方法可以一次性导入大批量的数据&#xff0c;提高效率。 下面我以.xls格式为例&#xff0c;…

程序员的浪漫,2023跨年烟花代码(Python)

跨年倒计时啦 今天分享用python实现一场烟花秀 感兴趣的小伙伴&#xff0c;提前收藏起来&#xff0c;一定要看到最后&#xff01; 话不多说 1.首先制作一个绚丽的夜空 制作夜空&#xff0c;其实就是设置画布。大家知道&#xff0c;夜晚的天空月明如水&#xff0c;星光攒动&a…

创建型设计模式 - 抽象工厂模式 - JAVA

创建型设计模式 - 抽象工厂设计模式 一. 简介二. 列子2.1 定义电脑的抽象类和子类2.2 定义抽象工厂类和其实现类2.3 测试 三. 抽象工厂设计模式的好处四. 抽象工厂模式的案例 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续…

git 如何将某个分支的某个提交复制到另外一个分支

请直接去看原文: 原文链接:git 如何将某个分支的某个提交复制到另外一个分支_gitlab里面的markdown文件可以复用其他分支的吗-CSDN博客 --------------------------------------------------------------------------------------------------------------------------------…

drf知识-08

Django之了解DRF框架 # 介绍&#xff1a;DRF全称 django rest framework # 背景&#xff1a; 在序列化与反序列化时&#xff0c;虽然操作的数据不尽相同&#xff0c;但是执行的过程却是相似的&#xff0c;也就是说这部分代码是可以复用简化编写的 增&#xff1a;校验请…

leaflet学习笔记-地图图层控制(二)

图层介绍 Leaflet的地图图层控件可控制两类图层&#xff1a;一类是底图图层&#xff08;Base Layers&#xff09;&#xff0c;一次只能选择一个图层作为地图的背景图层&#xff0c;即底图图层&#xff0c;在地图图层控件中用单选按钮控制&#xff1b;另一类是覆盖图层&#xff…

目标检测损失函数:IoU、GIoU、DIoU、CIoU、EIoU、alpha IoU、SIoU、WIoU原理及Pytorch实现

前言 损失函数是用来评价模型的预测值和真实值一致程度&#xff0c;损失函数越小&#xff0c;通常模型的性能越好。不同的模型用的损失函数一般也不一样。损失函数主要是用在模型的训练阶段&#xff0c;如果我们想让预测值无限接近于真实值&#xff0c;就需要将损失值降到最低…

Ubuntu18.04安装GTSAM库并验证GTSAM是否安装成功(亲测可用)

在SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;和SFM&#xff08;Structure from Motion&#xff09;这些复杂的估计问题中&#xff0c;因子图算法以其高效和灵活性而脱颖而出&#xff0c;成为图模型领域的核心技术。GTSAM&#xff08;Georgia Tech Smo…

【论文阅读】Resource Allocation for Text Semantic Communications

这是一篇关于语义通信中资源分配的论文。全文共5页&#xff0c;篇幅较短。 目录在这里 摘要关键字引言语义通信资源分配贡献公式符号 系统模型DeepSC TransmitterTransmission ModelDeepSC Receiver 语义感知资源分配策略Semantic Spectral Efficiency &#xff08;S-SE&#…