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

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当中的一个图片,应该先把图片数据变回原来的维度,然后再显示
    在这里插入图片描述
  • 关于如何改变数组维度的问题
    在这里插入图片描述

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

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

相关文章

自动化运维工具Ansible之playbooks剧本

自动化运维工具Ansible之playbooks剧本 一、playbooks1.playbooks简述2.playbooks剧本格式3.playbooks组成部分 二、实例1.编写脚本2.运行playbook3.定义、引用变量4.指定远程主机sudo切换用户5.when条件判断6.迭代7.Templates 模块8.tags 模块9.Roles 模块 三、编写应用模块1.…

Autofac中多个类继承同一个接口,如何注入?与抽象工厂模式相结合

多个类继承同一个接口,如何注入?与抽象工厂模式相结合 需求: 原来是抽象工厂模式,多个类继承同一个接口。 现在需要使用Autofac进行选择性注入。 Autofac默认常识: Autofac中多个类继承同一个接口,默认是最后一个接口注入的类。 解决方案:(约定大于配…

AtCoder Beginner Contest 318

目录 A - Full Moon B - Overlapping sheets C - Blue Spring D - General Weighted Max Matching E - Sandwiches F - Octopus A - Full Moon #include<bits/stdc.h> using namespace std; const int N1e65; typedef long long ll ; const int maxv4e65; typedef …

微软 Turing Bletchley v3视觉语言模型更新:必应搜索图片更精准

据微软新闻稿透露&#xff0c;在推出第三代Turing Bletchley视觉语言模型后&#xff0c;微软计划逐步将其整合到Bing等相关产品中&#xff0c;以提供更出色的图像搜索体验。这款模型最初于2021年11月面世&#xff0c;并在2022年秋季开始邀请用户测试。 凭借用户的反馈和建议&am…

过滤器的应用-Filter

过滤器 1.工作原理 2.创建Filter 2.1通过注解的方式实现 //创建一个类&#xff0c;实现Filter接口 WebFilter(urlPatterns "/myfilter") //urlPatterns表示需要拦截的路径 public class MyFilter implements Filter {Overridepublic void doFilter(ServletReques…

企业应用系统 PHP项目支持管理系统Dreamweaver开发mysql数据库web结构php编程计算机网页

一、源码特点 PHP 项目支持管理系统是一套完善的web设计系统 应用于企业项目管理&#xff0c;从企业内部的各个业务环境总体掌握&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 php项目支撑管理系统2 二、功能介绍 (1)权限管理&#xff1…

【C++刷题】动态规划

文章目录 前言一、斐波那契系列1.第 N 个泰波那契数2.三步问题3.使用最小花费爬楼梯4.解码方法5.不同路径6.下降路径最小和7.地下城游戏 二、多种状态系列1.按摩师2.打家劫舍II3.删除并获得点数4.粉刷房子5.买卖股票的最佳时机6.买卖股票的最佳时机III 三、子数组和子串系列1.最…

在windows上配置ninja环境

ninja使用并行任务来编译工程&#xff0c;比cmake编译快了一个数量级&#xff0c;是谷歌在2010年为了提高cmake的编译速度而开发一款编译工具。下面介绍在windows上配置ninja环境。 1 下载ninja ninja官网地址&#xff1a; https://github.com/ninja-build/ninja/releases   …

MATLAB中符号变量的使用方法解析

简介 MATLAB中常常使用符号变量&#xff0c;这里定义符号变量的函数是syms 使用方法如下 syms x y z 其中&#xff0c;x、y、z 是符号变量&#xff0c;可以是任意字母、数字或下划线组合而成的字符串。 举例1&#xff1a; 代码 以下是一个简单的例子&#xff0c;演示如何…

【AWS实验】 配置中转网关及对等连接

文章目录 实验概览目标实验环境任务 1&#xff1a;查看网络拓扑并创建基准任务 2&#xff1a;创建中转网关任务 3&#xff1a;创建中转网关挂载任务 4&#xff1a;创建中转网关路由表任务 4.1&#xff1a;创建路由表关联任务 4.2&#xff1a;创建路由传播 任务 5&#xff1a;更…

Zabbix部分避坑知识点

一、密码重置 在使用zabbix的过程中由于默认密码过于简单&#xff0c;往往会修改密码并配置为自动登录&#xff0c;时间一长往往忘记密码&#xff0c;造成无法登录的情况&#xff0c;这种情况就需要重置密码。Zabbix的密码存储在数据库中&#xff0c;可通过数据库重置。在Zabb…

重要变更 | Hugging Face Hub 的 Git 操作不再支持使用密码验证

在 Hugging Face&#xff0c;我们一直致力于提升服务安全性&#xff0c;因此&#xff0c;我们将修改 Hugging Face Hub 的 Git 交互认证方式。 从 2023 年 10 月 1 日 开始&#xff0c;我们将不再接受密码作为命令行 Git 操作的认证方式。我们推荐使用更安全的认证方法&#xf…