Pyhton知识分享-利用KNN算法实现手写数字识别

利用KNN算法实现手写数字识别

在这里插入图片描述
MNIST手写数字识别 是计算机视觉领域中 "hello world"级别的数据集

  • 1999年发布,成为分类算法基准测试的基础
  • 随着新的机器学习技术的出现,MNIST仍然是研究人员和学习者的可靠资源。

本次案例中,我们的目标是从数万个手写图像的数据集中正确识别数字。

数据介绍

数据文件 train.csv 和 test.csv 包含从 0 到 9 的手绘数字的灰度图像。

  • 每个图像高 28 像素,宽28 像素,共784个像素。

  • 每个像素取值范围[0,255],取值越大意味着该像素颜色越深

  • 训练数据集(train.csv)共785列。第一列为 “标签”,为该图片对应的手写数字。其余784列为该图像的像素值

  • 训练集中的特征名称均有pixel前缀,后面的数字([0,783])代表了像素的序号。

像素组成图像如下:

000 001 002 003 ... 026 027
028 029 030 031 ... 054 055
056 057 058 059 ... 082 083| | | | ...... | |
728 729 730 731 ... 754 755
756 757 758 759 ... 782 783

数据集示例如下:

在这里插入图片描述

# 导入工具包
import joblib
from sklearn.model_selection import train_test_split, GridSearchCV  # 分割训练集和测试集的,  网格搜索 + 交叉验证.
from sklearn.neighbors import KNeighborsClassifier  # KNN算法 分类对象
import matplotlib.pyplot as plt  # 绘图.
import pandas as pd
from collections import Counter# 需求 定义函数 接收索引 将该行的手写数字 识别为 图片并绘制出来
def dm01_show_digit(idx):# 1. 读取文件 获取df对象data = pd.read_csv('./data/手写数字识别.csv')# 2.判断用户传入值 是否合法if idx < 0 or idx >= len(data):print('传入的索引有误 程序结束! ')return# 走到这里说明 没问题 查看下所有的数据集x = data.iloc[:, 1:]y = data.iloc[:, 0]print(f'数字的种类: {Counter(y)}')  # Counter({1: 4684, 7: 4401, 3: 4351, 9: 4188, 2: 4177, 6: 4137, 0: 4132, 4: 4072, 8: 4063, 5: 3795})print(f'像素的形状: {x.shape}')# 根据传入的索引获取到该行的数据print(f'您传入的所有 对应的数字是: {y[idx]}')# 绘制图片# 把图片的像素点 转为 28*28的图片digit = x.iloc[idx].values.reshape(28, 28)# 绘制图片plt.imshow(digit, cmap='gray')  # 灰度图plt.axis('off')  # 关闭坐标# plt.savefig('./data/demo2.png')plt.show()# 需求2 定义函数 使用KNN算法 用于识别 手写数字 保存模型def dm02_train_mdoel():data = pd.read_csv('./data/手写数字识别.csv')#  数据预处理x = data.iloc[:, 1:]y = data.iloc[:, 0]x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=22, stratify=y)# 特征工程x_train = x_train / 255# 模型训练estimator = KNeighborsClassifier(n_neighbors=9)estimator.fit(x_train, y_train)# 模型评估print(f'准确率: {estimator.score(x_test, y_test)}')# 模型保存joblib.dump(estimator, './model/knn.pkl')def dm03_use_model():# 读取图片 绘制图片img = plt.imread('./data/demo.png')plt.imshow(img,cmap='gray')plt.show()# 读取模型  获取模型对象knn = joblib.load('./model/knn.pkl')# 模型预测y_predict = knn.predict(img.reshape(1,-1))print(f'预测结果为:{y_predict}')if __name__ == '__main__':# dm01_show_digit(20)# dm02_train_mdoel()dm03_use_model()

坚持分享 共同进步

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

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

相关文章

多点通信、流式域套接字

一、广播 1.1广播的发送端模型&#xff1a; #include<myhead.h>#define BEN_IP "192.168.191.129" #define BEN_PORT 8888#define PORT 6666int main(int argc, const char *argv[]) {int oldfd socket(AF_INET,SOCK_DGRAM,0);if(oldfd -1){perror("soc…

AMBA-APB

目录 1.APB 协议 2.APB信号列表 3.数据传输 3.1写传输&#xff08;2种&#xff09; 3.1.1 无等待状态的写传输 3.1.2有等待状态的写传输 3.2写选通信号 (PSTRB) 字节通道映射 3.3读传输&#xff08;2种&#xff09; 3.3.1 无等待状态的读传输 3.3.2有等待状态的读传…

linux自动化一键批量检查主机端口

1、准备 我们可以使用下面命令关闭一个端口 sudo iptables -A INPUT -p tcp --dport 端口号 -j DROP我关闭的是22端口&#xff0c;各位可以关其它的或者打开其它端口测试&#xff0c;谨慎关闭22端口&#xff01;不然就会像我下面一样握手超时&#x1f62d;&#x1f62d;&…

0055. shell命令--useradd

目录 55. shell命令--useradd 功能说明 语法格式 选项说明 选项 退出值 相关文件 /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/skel/ /etc/login.defs /etc/default/useradd 实践操作 注意事项 55. shell命令--useradd 功能说明 useradd 命令是 Lin…

UniApp 路由导航详解

一、引言 在当今的跨平台应用开发领域&#xff0c;UniApp 凭借其 “一套代码&#xff0c;多端运行” 的卓越特性&#xff0c;备受开发者青睐。而路由导航作为 UniApp 应用的关键环节&#xff0c;如同穿梭于各个页面场景的桥梁&#xff0c;直接关联着用户在应用内的操作体验。无…

【服务器】上传文件到服务器并训练深度学习模型下载服务器文件到本地

前言&#xff1a;本文教程为&#xff0c;上传文件到服务器并训练深度学习模型&#xff0c;与下载服务器文件到本地。演示指令输入&#xff0c;完整的上传文件到服务器&#xff0c;并训练模型过程&#xff1b;并演示完整的下载服务器文件到本地的过程。 本文使用的服务器为云服…

从零开始开发纯血鸿蒙应用之逻辑封装

从零开始开发纯血鸿蒙应用 一、前言二、逻辑封装的原则三、实现 FileUtil1、统一的存放位置2、文件的增删改查2.1、文件创建与文件保存2.2、文件读取2.2.1、读取内部文件2.2.2、读取外部文件 3、文件删除 四、总结 一、前言 应用的动态&#xff0c;借助 UI 响应完成&#xff0…

python读写文件的三种做法

对于文件操作&#xff0c;python提供了3种做法&#xff1a;open(), os.open() 和with open()语句。 1. open()函数&#xff1a;一般用于更高级的文件读写操作&#xff0c;即人能读懂的用法&#xff0c;如果是写入数据&#xff0c;可用传入字符串。 用法&#xff1a;open(path…

MySQL如何只取根据某列连续重复行的第一条记录

前言 MySQL如何只取根据某列连续重复行的第一条记录&#xff0c;条件&#xff1a;某列、连续、验重 建表准备 DROP TABLE IF EXISTS test; CREATE TABLE test (id bigint NOT NULL,time datetime NULL DEFAULT NULL,price int NULL DEFAULT NULL,PRIMARY KEY (id) USING BT…

Fetch处理大模型流式数据请求与解析

为什么有的大模型可以一次返回多个 data&#xff1f; Server-Sent Events (SSE)&#xff1a;允许服务器连续发送多个 data: 行&#xff0c;每个代表一个独立的数据块。 流式响应&#xff1a;大模型服务通常以流式响应方式返回数据&#xff0c;提高响应速度。 批量处理&#x…

MySQL 中存储金额数据一般使用什么数据类型

在 MySQL 中存储金额数据时&#xff0c;应该谨慎选择数据类型&#xff0c;以确保数据的精度和安全性。以下是几种常用的数据类型及其适用性&#xff1a; DECIMAL 类型&#xff1a; 描述&#xff1a;DECIMAL 类型是专门为存储精确的小数而设计的。它可以指定小数点前后的数字位数…

【数据结构】链表(1):单向链表和单向循环链表

链表 链表是一种经典的数据结构&#xff0c;它通过节点的指针将数据元素有序地链接在一起&#xff0c;在链表中&#xff0c;每个节点存储数据以及指向其他节点的指针&#xff08;或引用&#xff09;。链表具有动态性和灵活性的特点&#xff0c;适用于频繁插入、删除操作的场景…

离散数学考前一天

判断强连通&#xff0c;单向连通&#xff0c;弱连通&#xff1a; 求可达性矩阵P&#xff0c;P里面全是1&#xff0c;就是强连通 否则看P与P的转置矩阵&#xff0c;如果除了主对角线是0&#xff0c;其他全是1&#xff0c;就是单向连通 否则看A1&#xff1d;A与A的转置矩阵&am…

【服务器项目部署】⭐️将本地项目部署到服务器!

目录 &#x1f378;前言 &#x1f37b;一、服务器选择 &#x1f379; 二、服务器环境部署 2.1 java 环境部署 2.2 mysql 环境部署 &#x1f378;三、项目部署 3.1 静态页面调整 3.2 服务器端口开放 3.3 项目部署 ​ &#x1f379;四、测试 &#x1f378;前言 小伙伴们大家好…

chrome缓存机制以及验证缓存机制

一、Chrome 缓存机制 浏览器缓存机制旨在提高网页加载速度、减少服务器负载和节约带宽。Chrome 的缓存主要包括以下几种类型&#xff1a; 1. 强缓存 (Strong Cache) 无需向服务器发送请求即可使用缓存的资源。由 HTTP 响应头控制&#xff0c;包括&#xff1a; Expires&…

西门子DBX DBD DBB DBW的关系

DB10.DBD0 DB10.DBW0DB10.DBW2 DB10.DBB0DB10.DBB1DB10.DBB2DB10.DBB3 DB10.DBX0.00.7DB10.DBX1.01.7DB10.DBX2.02.7DB10.DBX3.03.7 使用之前需要在DB10中先定义&#xff0c;如果你仅在DB10中定义了一个DBD0&#xff0c;那么原则上你是可以使用上述所有地址的&#xff0c;但…

Android `android.graphics` 包深度解析:架构与设计模式

Android android.graphics 包深度解析:架构与设计模式 目录 引言android.graphics 包概述核心类与架构 CanvasPaintBitmapColorPathShaderMatrix设计模式在 android.graphics 中的应用 工厂模式装饰者模式策略模式享元模式高级图形处理技术 硬件加速离屏渲染自定义 View 中的…

Nginx的性能分析与调优简介

Nginx的性能分析与调优简介 一、Nginx的用途二、Nginx负载均衡策略介绍与调优三、其他调优方式简介四、Nginx的性能监控 一、Nginx的用途 ‌Nginx是一种高性能的HTTP和反向代理服务器&#xff0c;最初作为HTTP服务器开发&#xff0c;主要用于服务静态内容如HTML文件、图像、视…

vue2使用pdfjs-dist和jsPDF生成pdf文件

vue2使用pdfjs-dist和jsPDF生成pdf文件 1、安装依赖 npm install pdfjs-dist2.6.3472、引入依赖 import { jsPDF } from jspdf// 使用require方式导入pdfjs-dist v2.6.347&#xff0c;高版本报错&#xff08;import导入会报错&#xff1a;GlobalWorkerOptions undefined&…

sklearn_pandas.DataFrameMapper的用法

文章目录 介绍主要作用基本用法示例对不同列应用不同的转换器对多列应用相同的转换器输出为 Pandas DataFrame 注意事项转换器的适用性&#xff1a;输出格式&#xff1a;与 scikit-learn 的兼容性&#xff1a; 介绍 DataFrameMapper 是 sklearn-pandas 库中的一个工具&#xf…