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

news2024/11/24 5:08:59

 

☁️主页 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_score


digit = 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.coloradmin.cn/o/1262712.html

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

相关文章

Coremail出席2023信息技术应用创新论坛

11月25日,2023信息技术应用创新论坛在常州开幕。江苏省工业和信息化厅副厅长池宇、中国电子工业标准化技术协会理事长胡燕、常州市常务副市长李林等领导出席论坛并致辞。中国工程院院士郑纬民出席并作主题报告。来自产学研用金等各界的千余名代表参加本次论坛。作为…

西南科技大学模拟电子技术实验二(二极管特性测试及其应用电路)预习报告

目录 一、计算/设计过程 二、画出并填写实验指导书上的预表 三、画出并填写实验指导书上的虚表 四、粘贴原理仿真、工程仿真截图 一、计算/设计过程 说明:本实验是验证性实验,计算预测验证结果。是设计性实验一定要从系统指标计算出元件参数过程,越详细越好。用公式输入…

有哪些不错的golang开源项目?

前言 下面是github上的golang项目,适合练手,可以自己选择一些项目去练习,整理不易,希望能多多点赞收藏一下!废话少说,我们直接进入正题>>> 先推荐几个教程性质的项目(用于新手学习、…

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

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

Unity WebGL通过URL的形式接收参数执行初始化

参考博客: http://t.csdnimg.cn/QnfhK 问题背景: 需要在外面的网页指定WebGL的打开初始化逻辑。 步骤: 1.配置jslib,用文本文件创建即可,"__Internal.jslib"。 2.加入一段代码: mergeInto(…

如何使用Cloudreve将个人电脑打造为私有云盘并实现远程访问

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 云存储概念兴起后,现在市面上也已经有了很多公有云盘。但一段时间后…

分享5款安全无毒且没有广告的小软件

​ 今天推荐一些可以大幅度提升办公效率的小软件,安全无毒,下载简单,最重要的是没有广告! 1.三维建模——Rhinoceros ​ Rhinoceros是一款专业的三维建模软件,可以用于创建、编辑、分析和渲染复杂的三维模型。Rhino支…

「有问必答」秒杀系统 Go并发编程实践!

有问必答 摘要 本文将介绍如何使用Go语言的并发原语来构建一个简单的高并发秒杀系统。 我们将使用Go语言的原生库和一些常见的技术手段,包括互斥锁、通道、计数器等,来解决并发访问和数据一致性的问题。 本文只是一个简单的示例,重点是Go语…

社区新零售:重塑零售业的全新模式

社区新零售:重塑零售业的全新模式 近年来,新零售业成为了研究的焦点,它是一种以互联网为基础的零售形式。新零售通过运用先进技术手段,如大数据和人工智能,对商品的生产、流通和销售过程进行升级改造,重新构…

40.0/jdbc/Java数据连接/jar包运用增删改

目录 40.1. 回顾 40.2. 正文 40.1 为什么需要jdbc 40.2 如何连接mysql数据库 40 .3 jdbc容易出现的错误 40.4 完成删除 40.5 完成修改 40.1. 回顾 1. 自联查询: 自己连接自己的表。注意:一定要为表起别名。 2. 嵌套查询: 把一个查询的结果作为另一个查询的条件值。 3. 组…

一文解决msxml3.dll文件缺失问题,快速修复msxml3.dll

在了解问题之前,我们必须首先清楚msxml3.dll到底是什么。DLL(Dynamic Link Libraries)文件是Windows操作系统使用的一个重要组成部分,用于存储执行特定操作或任务的代码和数据。msxml3.dll为Windows系统提供处理XML文档的功能。如…

竞赛选题 题目:基于深度学习卷积神经网络的花卉识别 - 深度学习 机器视觉

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基…

亚马逊养号的用途?有没有快速养号方法?

亚马逊养号通常是创建多个买家账号来进行浏览、对比等,以下是一些可能的用途: 刷好评:通过养号,可以通过自己的账号给自己或他人的产品发布好评,以提高商品的声誉和销售。 刷销量:通过大量买家账号购买商品…

idea社区版免费下载方式

1.访问中国区网站 下载 IntelliJ IDEA – 领先的 Java 和 Kotlin IDE 2.完成下载安装

Python3.6.8升级Python3.12.0版本小记

Python3.6.8 升级 Python3.12.0版本小记 前言一、查看系统已安装Python的相关信息二、升级Python三、解决问题记录:升级之后cmd查看python版本仍为原版本 叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,今天也是努力进步的一天。一…

融云筑基,移动云加速构建高性能智能算力底座

自2022年11月以来,全球大模型数量迅速增加,以ChatGPT为代表的大模型已经成为世界数字科技领域新热点。大模型带来的算力需求迅速增长,未来智算场景将会有非常大的突破空间。 在“十四五”规划的指引下,各地政府积极投入智算中心建…

【Qt】QStackedWidget、QRadioButton、QPushButton及布局实现程序首页自动展示功能

效果 在程序启动后,有时不会进入到工作页面,会进入到产品展示页面。 动画如下: 首页展示 页面操作 当不点击时,一秒自动刷新一次;当点击时,会自动跳转到对应页面;点击上一页、下一页、及跳转页…

安防视频监控/视频融合/云存储EasyCVR页面数据显示不全该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

11.27/28 知识回顾与问题(Django之Web应用与http协议)

一、http有哪些主要版本以及特点 1. 主要版本以及各自特点 HTTP/0.9:最初版本的HTTP协议,只支持GET方法,并且没有请求头和响应头的概念,只能传输纯文本。于1991年发布,由Tim Berners-Lee创建,被认为是HTTP的…

【数据结构复习之路】树和二叉树(严蔚敏版)万字详解主打基础

专栏:数据结构复习之路 复习完上面四章【线性表】【栈和队列】【串】【数组和广义表】,我们接着复习 树和二叉树,这篇文章我写的非常详细且通俗易懂,看完保证会带给你不一样的收获。如果对你有帮助,看在我这么辛苦整理…