当前位置: 首页 > news >正文

机器学习——手写数字识别

0、:前言

  • 这篇文章能够帮助你从数据到模型的整个过程实现
  • 不过至于安装第三方库等基础问题,本文不涉及,因为确实不难,搜一搜一大把
  • 本此实验运行环境为jupyter,当然通过pycharm也是可行的

1、数据:

  • 手写数字共5000组数组
  • 其中一共有0-9,10组数据,每一组中有500张对应的手写数字的图片
  • 数据资料:
    链接:https://pan.baidu.com/s/1gTi-0xjDjbVUK_p_AzkZrw
    提取码:1234

2、数据预处理:

  • 拿到数据后把数据解压到和代码同一级的目录当中
  • 这部分重点是把图片数据转换为可以输入模型的二维数组型数据
  • 用到的函数解答:
    • plt.imshow()函数是matplotlib库中的一个函数,它用于显示图像。这个函数接受一个二维或三维的数组作为输入,表示图像的数据。然后,它将数组的值映射到颜色空间,以显示图像。在plt.imshow()函数中,cmap是一个参数,代表色彩映射(colormap)。在图像处理中,我们通常将图像表示为一个二维数组,数组的每个元素代表图像的一个像素。每个像素的值通常是一个介于0和255之间的整数,表示该像素的灰度级别。然而,我们通常不能直接看到这些数字,因为它们在视觉上可能没有明显的差别。相反,我们通常将每个像素的值映射到一个连续的色彩空间,这样我们就可以在屏幕上显示图像了。有许多不同的colormap可以选择,比如:‘gray’:灰度colormap、‘hot’:红色到白色的热图colormap、‘cool’:蓝色到绿色的colormap、‘Jet’:从蓝色到红色的colormap、‘hsv’:HSV色彩空间的colormap。
  • 代码
# 尝试从文件中读一个数据出来
img = plt.imread('./手写数字识别/0/0_1.bmp')
display(img.shape) # img是一个二维数组
plt.imshow(img,cmap='gray')

在这里插入图片描述

3、实现:

  • 代码
# 批量导入5000个图片数据
data = [] # 分类模型输入数据
target = [] # 分类模型输出数据for i in range(10):for j in range(1,501):img = plt.imread(f'./手写数字识别/{i}/{i}_{j}.bmp')data.append(img)target.append(i)
# 此时data和target作为列表数据运算起来非常耗内存,所以先转为数组形式的数据方便处理,然后再改变维度
data = np.array(data).reshape(5000, -1)
target = np.array(target).reshape(5000, -1)
print('data的形状:',data.shape,'target的形状:',target.shape)# 数据划分为训练集和测试集
from sklearn.model_selection import train_test_splitx_train, x_test, y_train, y_test = train_test_split(data,target,test_size=0.2) # 20%的测试集# 导入模型
from sklearn.neighbors import KNeighborsClassifierknn = KNeighborsClassifier()# 训练数据
knn.fit(x_train,y_train)# 查看模型得分,如果是pycharm就把下面代码放到print中
knn.score(x_test,y_test)
  • 该模型最终结果为0.93
  • 对结果进行可视化
# 随机挑选10个测试值画图查看预测结果
choice = np.random.randint(1,1000,10).tolist()
# 设置画布大小
plt.figure(figsize=(5*10,2*10))for i in range(10):# 画子图re = plt.subplot(2,5,i+1)re.imshow(x_test[choice[i]].reshape(28,-1),cmap='gray')re.set_title(f'real:{y_test[choice[i]][0]},\npredict:{y_pred[choice[i]]}',fontsize=40,color = 'k' if y_test[choice[i]][0] == y_pred[choice[i]] else 'r')

在这里插入图片描述


4、补充:

  • 如果在划分了数据集之后,要显示test当中的一个图片,应该先把图片数据变回原来的维度,然后再显示
    在这里插入图片描述
  • 关于如何改变数组维度的问题
    在这里插入图片描述

相关文章:

机器学习——手写数字识别

0、:前言 这篇文章能够帮助你从数据到模型的整个过程实现不过至于安装第三方库等基础问题,本文不涉及,因为确实不难,搜一搜一大把本此实验运行环境为jupyter,当然通过pycharm也是可行的 1、数据: 手写数字…...

【日积月累】后端刷题日志

刷题日志 说说对Java的理解JAVA中抽象类和接口之间的区别Java中的泛型 和equals()的区别八种基本数据类型与他们的包装类在一个静态方法内调用一个非静态成员为什么是非法的静态方法与实例方法有何不同重载与重写深拷贝浅拷贝面向过程与面向对象成员变量与局部变量Spring框架Sp…...

Matlab在编码中增加CRC和交织功能

定义CRC生成和检验的类(包括函数) 我们在MATLAB中定义一个类(class),包含了CRC生成函数和检验函数(囊括了常用的CRC多项式) classdef CRCpropertiesCRCbit_LenpolynomialCRCgenCRCdetendmetho…...

Css 设置从上到下的渐变色: 0到70%为yellow,然后线性地变成透明。

您可以使用 CSS 的 linear-gradient() 函数来创建从上到下的渐变色。以下是一个例子: background: linear-gradient(to bottom, yellow 0%, transparent 70%);这将从上到下创建一个渐变色,从 0% 到 70% 是黄色,然后线性地变成透明。您可以将…...

git在windows上安装

介绍git工具在windows上如何安装 git官网下载地址 1.1、下载 https://github.com/git-for-windows/git/releases/download/v2.36.0.windows.1/Git-2.36.0-64-bit.exe自行选择版本,这里我选择的是 Git-2.36.0-64-bit这个版本 1.2、安装 安装路径选择英文且不带空格…...

快速上手GIT命令,现学也能登堂入室

系列文章目录 手把手教你安装Git,萌新迈向专业的必备一步 GIT命令只会抄却不理解?看完原理才能事半功倍! 快速上手GIT命令,现学也能登堂入室 系列文章目录一、GIT HELP1. 命令文档2. 简要说明 二、配置1. 配置列表2. 增删改查3. …...

二进制安全虚拟机Protostar靶场 安装,基础知识讲解,破解STACK ZERO

简介 pwn是ctf比赛的方向之一,也是门槛最高的,学pwn前需要很多知识,这里建议先去在某宝上买一本汇编语言第四版,看完之后学一下python和c语言,python推荐看油管FreeCodeCamp的教程,c语言也是 pwn题目大部…...

python实现的一些方法,可以直接拿来用的那种

1、日期生成 很多时候我们需要批量生成日期,方法有很多,这里分享两段代码 获取过去 N 天的日期: import datetimedef get_nday_list(n):before_n_days []for i in range(1, n 1)[::-1]:before_n_days.append(str(datetime.date.today() …...

通过HTTP进行并发的数据抓取

在进行大规模数据抓取时,如何提高效率和稳定性是关键问题。本文将介绍一种可操作的方案——使用HTTP代理来实现并发的网页抓取,并帮助您加速数据抓取过程。 1. 选择合适的HTTP代理服务供应商 - 寻找信誉良好、稳定可靠且具备较快响应时间的HTTP代理服务…...

《论文阅读21》Equivariant Multi-View Networks

一、论文 研究领域:计算机视觉 | 多视角数据处理中实现等变性论文:Equivariant Multi-View Networks ICCV 2019 论文链接视频链接 二、论文简述 在计算机视觉中,模型在不同视角下对数据(例如,点云、图像等&#xff0…...

【数据结构】| 并查集及其优化实现

目录 一. 并查集基本概念处理过程初始化合并查询小结 二. 求并优化2.1 按大小求并2.2 按秩(高度)求并2.3 路径压缩2.4 类的实现代码2.5 复杂度分析 三. 应用LeetCode 128: 最长连续数列LeetCode 547: 省份数量LeetCode 200: 岛屿数量 一. 并查集基本概念 以一个直观的问题来引入…...

最新ChatGPT程序源码+AI系统+详细图文部署教程/支持GPT4.0/支持Midjourney绘画/Prompt知识库

一、AI系统 如何搭建部署人工智能源码、AI创作系统、ChatGPT系统呢?小编这里写一个详细图文教程吧!SparkAi使用Nestjs和Vue3框架技术,持续集成AI能力到AIGC系统! 1.1 程序核心功能 程序已支持ChatGPT3.5/GPT-4提问、AI绘画、Mi…...

自动驾驶和辅助驾驶系统的概念性架构(一)

摘要: 本文主要介绍包括功能模块图,涵盖了底层计算单元、示例工作负载和行业标准。 前言 本文档参考自动驾驶计算联盟(Autonomous Vehicle Computing Consortium)关于自动驾驶和辅助驾驶计算系统的概念系统架构。 该架构旨在与SAE L1-L5级别的自动驾驶保…...

【两周学会FPGA】从0到1学习紫光同创FPGA开发|盘古PGL22G开发板学习之数码管静态显示(四)

本原创教程由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处 适用于板卡型号: 紫光同创PGL22G开发平台(盘古22K) 一:盘古22K开发板(紫光同创PGL22G开发…...

【洛谷】P3853 路标设置

原题链接:https://www.luogu.com.cn/problem/P3853 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 整体思路:二分答案 由题意知,公路上相邻路标的最大距离定义为该公路的“空旷指数”。在公路上增设一些路标&…...

探索图像数据中的隐藏信息:语义实体识别和关系抽取的奇妙之旅

探索图像数据中的隐藏信息:语义实体识别和关系抽取的奇妙之旅 1. 简介 1.1 背景 关键信息抽取 (Key Information Extraction, KIE)指的是是从文本或者图像中,抽取出关键的信息。针对文档图像的关键信息抽取任务作为OCR的下游任务,存在非常…...

Gradle问题处理

目录 一、依赖搜索问题1.1 、Gradle不在本地 Maven 存储库中进行搜索一、依赖搜索问题 1.1 、Gradle不在本地 Maven 存储库中进行搜索 场景 build.gradle文件: buildscript {repositories {mavenLocal()google()mavenCentral()}dependencies...

架构:C4 Model

概念 C4说穿了就是几个要素:关系——带箭头的线、元素——方块和角色、关系描述——线上的文字、元素的描述——方块和角色里的文字、元素的标记——方块和角色的颜色、虚线框(在C4里面虚线框的表达力被极大的限制了,我觉得可以给虚线框更大…...

数据结构学习系列之顺序表的两种修改方式

方式1&#xff1a;根据顺序表中数据元素的位置进行修改&#xff0c;代码如下&#xff1a;示例代码&#xff1a; int modify_seq_list_1(list_t *seq_list,int pos, int data){if(NULL seq_list){printf("入参为NULL\n");return -1;}if( pos < 0 || pos > seq…...

React:props说明

props是只读对象&#xff08;readonly&#xff09; 根据单项数据流的要求&#xff0c;子组件只能读取props中的数据&#xff0c;不能进行修改props可以传递任意数据 数字、字符串、布尔值、数组、对象、函数、JSX import FileUpdate from ./FileUpdate; export default class …...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...