机器学习实战第3天:手写数字识别

 

☁️主页 Nowl

🔥专栏《机器学习实战》 《机器学习》

📑君子坐而论道,少年起而行之 

文章目录

一、任务描述

二、数据集描述

三、主要代码

(1)主要代码库的说明与导入方法

(2)数据预处理

(3)模型训练

(4)模型预测与性能评估

(5)除数据预处理外的完整代码

四、本章总结​ 


一、任务描述

手写数字识别是机器学习中的一个经典问题,通常涉及将手写数字的图像与其对应的数字进行关联。这种问题通常被认为是计算机视觉领域的一个入门任务,也是许多深度学习框架和算法的基础测试案例之一。

二、数据集描述

手写数字识别数据集包含了一列数字标签,每个数字标签有784个像素值,代表这个数字图片的像素值

三、主要代码

(1)主要代码库的说明与导入方法

import pandas as pd

pandas 是一个数据分析库,提供了灵活的数据结构,如 DataFrame,用于处理和分析结构化数据。它常被用于数据清洗、处理和分析。

import matplotlib.pyplot as plt

matplotlib 是一个用于绘制图表和可视化数据的库。pyplot模块是 matplotlib 的一个子模块,用于创建各种类型的图表,如折线图、散点图、直方图等。

import numpy as np

NumPy 是用于科学计算的库,提供了高性能的数组对象和各种数学函数。它在数据处理和数值计算中被广泛使用,尤其是在机器学习中。

import matplotlib as mpl

这里再次导入 matplotlib 库,但是这次将其别名设置为mpl。这样做是为了在代码中使用更短的别名,以提高代码的可读性。

from sklearn.model_selection import train_test_split

scikit-learn(sklearn)是一个用于机器学习的库。train_test_split函数用于将数据集划分为训练集和测试集,这是机器学习模型评估的一种常见方式。

from sklearn.neighbors import KNeighborsClassifier

这里导入了 scikit-learn 中的KNeighborsClassifier类,该类实现了 k-近邻分类器,用于进行基于邻近样本的分类。

from sklearn.metrics import accuracy_score

从 scikit-learn 中导入accuracy_score函数,用于计算分类模型的准确度分数。准确度是分类模型预测的正确样本数占总样本数的比例。

为确保代码能正常运行,请先复制以下代码,导入本文用到的所有库

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

 当代码无法运行时,还有可能是文件路径问题,注意改成自己的文件路径

(2)数据预处理

1.导入数据

使用pandas库导入数据集文件,文件路径要换成自己的

digit = pd.read_csv("datasets/digit-recognizer/train.csv")

2.划分训练集与测试集

使用train_test_split函数将数据集分为训练集和测试集,测试集比例为0.2

再将特征和标签分离出来

train, test = train_test_split(digit, test_size=0.2)train_x = train.drop(columns="label")
train_y = train["label"]
test_x = test.drop(columns="label")
test_y = test["label"]

 3.图片显示

我们可以使用matplotlib库将图片显示出来

  • train_x.iloc[2]选取训练集的第3行数据
  • np.array()将数组转化为numpy数组,以便使用reshape函数
  • .reshape(28,28)将原来的784个特征转化为(28,28)格式的数据,这代表一个正方形图片
  • cmap=mpl.cm.binary使图片颜色为黑白
  • plt.imshow()函数可以将一个像素数组转化为图片
plt.imshow(np.array(train_x.iloc[2]).reshape(28, 28), cmap=mpl.cm.binary)
plt.show()
print(train_y.iloc[2])

显示图片并打印数据标签

我们可以看到图像是一个数字9,打印标签也确实是9,接下来我们就来训练一个数字识别机器学习模型

(3)模型训练

由于这是一个分类任务,我们可以选择使用KNN近邻算法,第一步设置模型,第二步训练模型

model = KNeighborsClassifier(n_neighbors=3)
model.fit(train_x, train_y)

(4)模型预测与性能评估

寻找最优参数

对于大部分机器学习模型来说,设置不同的参数得到的模型性能都不同,我们可以绘制不同参数的准确率曲线图来寻找最优参数

accuracy = []for i in range(1, 10):model = KNeighborsClassifier(n_neighbors=i)model.fit(train_x, train_y)prediction = model.predict(test_x)accuracy.append(accuracy_score(prediction, test_y))print()plt.plot(range(1, 10), accuracy)
plt.xlabel("neighbors")
plt.ylabel("accuracy")
plt.show()

可以看到当neighbors为3时模型效果最好,我们在应用时就将模型参数设置为3

(5)除数据预处理外的完整代码

这里是舍弃了一些寻找特征等工作的完整模型训练代码

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_scoredigit = pd.read_csv("datasets/digit-recognizer/train.csv")train, test = train_test_split(digit, test_size=0.2)train_x = train.drop(columns="label")
train_y = train["label"]
test_x = test.drop(columns="label")
test_y = test["label"]model = KNeighborsClassifier(n_neighbors=3)
model.fit(train_x, train_y)
prediction = model.predict(test_x)
print(accuracy_score(prediction, test_y))

四、本章总结​ 

  • 学习了使用numpy处理图像数据的方法
  • 学习了打印准确率曲线来寻找最优参数的方法
  • 使用KNN模型来完成分类任务

当然,也可以自己处理特征,自己选择模型,调整参数,看看会不会获得更好的结果

 感谢阅读,觉得有用的话就订阅下本专栏吧

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

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

相关文章

2023-11-28 C语言if语句多个||或 与的时时候,会顺序执行,不满足条件则退出,不会再比较后面的内容,实例测试

一、if(i > 0 || image(0) > 5)或者if(i > 0 && image(0) > 5)&#xff0c;C语言if语句多个||或 与&&的时时候&#xff0c;会顺序执行&#xff0c;不满足条件则退出&#xff0c;不会再比较后面的内容。 二、测试代码 #include <stdio.h> #i…

成为网络安全高手!教你如何做出专业级别的渗透测试

01、信息收集 1、域名、IP、端口 域名信息查询&#xff1a;信息可用于后续渗透 IP信息查询&#xff1a;确认域名对应IP&#xff0c;确认IP是否真实&#xff0c;确认通信是否正常 端口信息查询&#xff1a;NMap扫描&#xff0c;确认开放端口 发现&#xff1a;一共开放两…

Linux CentOS_7解决无法上网的问题

参考视频&#xff1a;保姆式教学虚拟机联网liunx(centos)_哔哩哔哩_bilibili 第一步&#xff1a;选择网络模式 第二步&#xff1a;配置网卡命令&#xff1a;打开终端执行命令&#xff1a; 1、先切换到根目录下&#xff0c;防止在第执行cd /etc/sysconfig/network-scripts命的…

java多线程-扩展知识一:进程线程、并发并行、同步异步

1、进程 进程&#xff08;Process&#xff09;是计算机中的程序关于某数据集合上的一次运行活动&#xff0c;是系统进行资源分配的基本单位&#xff0c;是操作系统结构的基础。在早期面向进程设计的计算机结构中&#xff0c;进程是程序的基本执行实体&#xff1b;在当代面向线程…

云计算——ACA学习 阿里云云计算服务概述

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 公众号&#xff1a;网络豆云计算学堂 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a; 网络豆的主页​​​​​ 目录 写在前面 前期回顾 本期介绍 前言了解 一…

【领域驱动设计 学习目标及大纲】从CRUD到架构设计

从2018年至今&#xff0c;已工作了5年有余&#xff0c;回望这5年的工作历程&#xff0c;虽然一直在学习、一直在积累&#xff0c;但其实都在术的层面上停留&#xff0c;也就是具体的技术点。这5年多的时间里其实也不是没有窥道的想法&#xff1a; 一次是2018年刚工作的时候&am…

FPGA模块——AD高速转换模块(并行输出转换的数据)

FPGA模块——AD高速转换模块&#xff08;并行输出转换的数据&#xff09; &#xff08;1&#xff09;AD9280/3PA9280芯片&#xff08;2&#xff09;代码 &#xff08;1&#xff09;AD9280/3PA9280芯片 AD9280/3PA9280芯片的引脚功能&#xff1a; 工作电压2.7到5.5v 数据对应&a…

采购申请的库存地点和MRP2的库存地点的关系

F类材料的采购申请的库存地点&#xff0c;带外部采购申请仓储地点 X类材料的采购申请的库存地点,从MRP2的生产仓储地点自动带到计划订单再到生产工单再到采购申请。

MSTP实验

目录 一、实验拓扑 二、实验要求 三、实验步骤 1、创建vlan 2、创建端口组&#xff0c;放通vlan 3、配置MSTP 4、配置主备奋根 一、实验拓扑 二、实验要求 1、所有交换机上创建vlan10&#xff0c;vlan20&#xff0c;vlan30和vlan40 2、所有交换机之间的端口配置为Trunk…

Redis(二):常见数据类型:String 和 哈希

引言 Redis 提供了 5 种数据结构&#xff0c;理解每种数据结构的特点对于 Redis 开发运维⾮常重要&#xff0c;同时掌握每 种数据结构的常⻅命令&#xff0c;会在使⽤ Redis 的时候做到游刃有余。 Redis 的命令有上百种&#xff0c;我们不可能全部死记硬背下来&#xff0c;但是…

【小白进阶】Linux 调试大法——gdb

初衷 gdb调试是每一个后端开发工程师所必备的技能&#xff0c;我们工作总是会用gdb协助我们去分析和调试问题。但是大部分同学的技能仅停留在最基础的查看问题。即gdb program -->r --> 问题复现 --> bt 查看源码中的哪一行出现了错误。再稍微熟练点的&#xff0c;可能…

抖音视频如何无水印下载,怎么批量保存主页所有视频没水印?

现在最火的短视频平台莫过于抖音&#xff0c;当我们刷到一个视频想下载下来怎么办&#xff1f;我们知道可以通过保存到相册的方式下载&#xff0c;但用这种方法下载的视频带有水印&#xff0c;而且有些视频不能保存到相册&#xff08;这是视频作者设置了禁止下载&#xff09;。…

Unity 关于SpriteRenderer 和正交相机缩放

float oldWidth 750f;float oldHeight 1334f;float newWidth Screen.width;float newHeight Screen.height;float oldAspect oldWidth / oldHeight;float newAspect newWidth / newHeight;//水平方向缩放float horizontalCompressionRatio newAspect / oldAspect;//垂直…

IDEA插件推荐

今天给大家推荐一款IDEA插件&#xff1a;Apipost-Helper-2.0&#xff0c;支持三大功能&#xff1a;写完代码IDEA内一键生成API文档&#xff1b;写完代码IDEA内一键调试&#xff1b;生成API目录树&#xff0c;双击即可快速定位API定义的代码…非常好用&#xff01;而且完全免费&…

找免费4K高清图片素材,就上这6个网站

使用图片素材怕侵权&#xff1f;那就上这6个网站&#xff0c;免费下载&#xff0c;4K高清无水印&#xff0c;赶紧收藏起来~ 1、菜鸟图库 https://www.sucai999.com/pic.html?vNTYxMjky 一个很大的素材库&#xff0c;站内主要还是以设计素材为主&#xff0c;像图片素材就有上百…

免费SSL证书服务——加密通信,零成本体验

你的网站是否安全无忧&#xff1f;我们为你提供免费SSL证书服务&#xff0c;让你的用户数据和信息传输更安全可靠。 安全保障&#xff1a; 全面升级你的网站安全性&#xff0c;通过SSL加密技术&#xff0c;确保用户数据传输隐私无忧。 零成本&#xff1a; 免费SSL证书服务&…

【影刀RPA_写入日期到飞书表格】

飞书将日期写入多维表格&#xff0c;日期格式需要时毫秒级的时间戳才行。

常见面试题-Netty中ByteBuf类

了解 Netty 中的 ByteBuf 类吗&#xff1f; 答&#xff1a; 在 Java NIO 编程中&#xff0c;Java 提供了 ByteBuffer 作为字节缓冲区类型&#xff08;缓冲区可以理解为一段内存区域&#xff09;&#xff0c;来表示一个连续的字节序列。 Netty 中并没有使用 Java 的 ByteBuff…

MySQL主从同步延迟原因与解决方案

一、MySQL数据库主从同步延迟产生的原因 MySQL的主从复制都是单线程的操作&#xff0c;主库对所有DDL和DML产生的日志写进binlog&#xff0c;由于binlog是顺序写&#xff0c;所以效率很高。 Slave的SQL Thread线程将主库的DDL和DML操作事件在slave中重放。DML和DDL的IO操作…

08 木谷博客系统RBAC权限设计

这节内容说一下木谷博客系统的权限设计,采用现在主流的权限模型RBAC,对应关系如下: 以上5张表都在mugu_auth_server这个库中 该部分的服务单独定义在user-boot这个模块中。 将角色、权限对应关系加载到Redis 木谷博客系统在认证中心颁发令牌的时候是将用户的角色保存到令牌…