尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
04-KNN案例:手写数字识别
1. 需求分析从数万个手写图像的数据集中正确识别数字。2. 数据集说明MNISTModified National Institute of Standards and Technology是手写数字识别标准数据集由美国国家标准与技术研究院改造而来是深度学习入门最经典的图像分类数据集。任务目标灰度手写数字 0~9 十分类图像规格单通道灰度图尺寸28×28 像素像素取值0纯黑~255纯白代表笔画灰度2.1 数据来源2.1.1 TensorFlow/Kerasfrom tensorflow.keras.datasets import mnist (x_train, y_train), (x_test, y_test) mnist.load_data()2.1.2 PyTorchfrom torchvision import datasets train_set datasets.MNIST(root./data, trainTrue, downloadTrue) test_set datasets.MNIST(root./data, trainFalse, downloadTrue)2.1.3 sklearn 内置小 MNIST 简介规模仅 1797 张8×8 灰度手写数字不是原版 28×28结构特征 64 维标签 0-9用途传统机器学习SVM、逻辑回归、KNN快速测试不适合深度学习from sklearn.datasets import load_digits3. 建模这里用sklearn中的小MNIST数据集训练速度快一点原理是一样的。3.1 加载包import joblib import numpy as np from sklearn.datasets import load_digits import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score from PIL import Image3.2 获取数据# 1. 加载数据 digits load_digits() x digits.data # 特征矩阵(1797, 64)1797张图每张8×864像素展平 y digits.target # 标签0-9数字 images digits.images # 原始8×8图像数组 print(x.shape) # (1797, 64) print(images.shape) # (1797, 8, 8) # 2. 可视化1张图片 plt.imshow(images[0], cmapgray) plt.title(f数字{y[0]}) plt.axis(off) plt.show()3.3 数据预处理缺失值、异常值处理这里不用归一化因为知道像素区间范围是[0,255]划分数据集# 归一化 x x / 255 # 划分数据集stratify: 按照y的类别比例进行分割 x_train, x_test, y_train, y_test train_test_split(x, y, test_size0.2, stratifyy, random_state21)3.4 特征工程3.4.1 特征提取这里不用3.4.2 特征预处理消除量纲动作归一化已经前置这里不用做3.5 模型训练网格搜索交叉验证这里用5折交叉验证# 创建模型对象 estimator KNeighborsClassifier() # 网格搜索交叉验证 param_dict {n_neighbors: [1,3,5,7,9]} # 超参数字典, 超参可能出现的值 estimator GridSearchCV(estimator, param_gridparam_dict, cv5) # 创建GridSearchCV模型对象 estimator.fit(x_train, y_train) # 交叉验证前的模型训练 print(f最优评分为{estimator.best_score_}) print(f最优超参组合为{estimator.best_params_}) print(f最优的估计器对象为{estimator.best_estimator_}) print(f具体的交叉验证结果为{estimator.cv_results_})3.6 模型评估# 1获取最优超参的模型对象 estimator estimator.best_estimator_ # 根据需要选择 # 2模型训练 estimator.fit(x_train, y_train) # 3模型预测 y_pre estimator.predict(x_test) # 4模型评估 print(f准确率{accuracy_score(y_test, y_pre)})3.7 模型保存joblib.dump(estimator, model/knn.pkl) # 保存路径可替换3.8 模型预测需要准备1张8*8的图片底色为黑色数字为白色因为数据集过于简单预测结果可能不准这里对28*28做了像素和灰度转换图片已经失真但仍然以下列方式预测原理不变示例图片# 1. 读取图片 img Image.open(image.png) # 展示原始图片 # plt.imshow(img, cmapgray) # plt.axis(off) # 关闭坐标轴 # plt.show() # 2. 像素灰度转换 # 灰度转换 gray_img img.convert(L) # 转为灰度图 L模式单通道灰度 # 像素转换 new_size (8, 8) # 自定义像素大小 resized_gray gray_img.resize(new_size) # 展示像素灰度转换后的图片 # plt.imshow(resized_gray, cmapgray) # plt.axis(off) # 关闭坐标轴 # plt.show() # 3. 数据结构转换 # 灰度图转为数组 img_array np.array(resized_gray) img_model img_array.reshape(1, -1) # 形状从: (8, 8) (1, 64) # 归一化 img_model img_model / 255 # 4. 加载模型 estimator joblib.load(model.pkl) # 5. 预测 y_pre estimator.predict(img_model) print(f该图片的数字是: {y_pre})附件
RELATED

相关推荐

大模型与提示词工程:核心概念与实战指南

大模型与提示词工程:核心概念与实战指南

1. 大模型基础概念解析 大模型(Large Language Model)之所以被称为"大",核心在于其庞大的参数量。以当前主流的大模型为例,参数量通常在数十亿到数千亿级别。这种规模带来的直接效果是模型能够捕捉更复杂的语言模式和知…

📅 2026/8/22 20:32:13
上海交大《动手学大模型》:一份覆盖攻防全栈的 LLM 实践教程深度解读

上海交大《动手学大模型》:一份覆盖攻防全栈的 LLM 实践教程深度解读

已收集到足够的交叉验证信息, 上海交大《动手学大模型》:一份覆盖攻防全栈的 LLM 实践教程深度解读 原项目地址:github.com/Lordog/dive-into-llms主讲教师:张倬胜(上海交通大学 BCMI 实验室)当前版本&…

📅 2026/8/22 20:32:13
Windows账户锁定问题诊断与解决指南

Windows账户锁定问题诊断与解决指南

1. 问题现象与初步诊断当你在Windows环境下尝试访问局域网共享文件夹时,突然弹出一条令人困惑的错误提示:"引用的账户当前已锁定,且可能无法访问"。这个报错通常发生在以下几种典型场景:使用域账户登录后访问共享资源频…

📅 2026/8/22 20:32:14
MORE NEWS

更多资讯

📰

CFD云仿真技术演进与云原生许可证管理实践

1. CFD云仿真技术演进与行业痛点CFD(Computational Fluid Dynamics)作为工程仿真领域的重要工具,近年来正经历从本地化向云端迁移的深刻变革。根据行业调研数据,2023年全球CFD云服务市场规模已达27.6亿美元,年复合增长…

📰

最长公共前缀算法解析:从暴力扫描到分治二分的面试进阶指南

1. 初识最长公共前缀:题目拆解与出题人意图1.1 从一道入门题看后端面试的考察逻辑最长公共前缀在LeetCode上的序号是14,难度标注为Easy。但如果你在面试中把它当成一道“送分题”来对待,那可能就踩进了出题人精心设计的陷阱里。这道题表面问的…

📰

Python控制流详解:if条件、for/while循环与性能优化

1. 控制流基础概念解析 程序执行顺序的控制是编程中最基础也最重要的概念之一。控制流(Control Flow)决定了代码的执行路径,就像交通信号灯指挥车辆行驶方向一样。在Python中,if条件判断、for循环和while循环构成了最基本的控制流…

📰

Spring Cloud LoadBalancer核心原理与生产实践

1. Spring Cloud LoadBalancer核心定位解析在微服务架构中,服务实例的动态发现与智能路由是核心基础设施。Spring Cloud LoadBalancer作为Spring Cloud 2025.0.0.0版本后默认的客户端负载均衡器,取代了昔日的Ribbon,成为微服务间通信的关键枢…

📰

小型风电场无功功率控制与Simulink建模实践

1. 小型风电场无功功率控制的核心挑战在可再生能源并网系统中,小型风电场的无功功率控制一直是个棘手问题。当风电场连接到无限电网时,系统呈现三个典型特征:电网电压恒定、频率稳定、短路容量远大于风电场容量。这种场景下,传统的…

📰

Data Science for Beginners 环境搭建完全指南:从零配置 20 课数据科学学习环境

Data Science for Beginners 环境搭建完全指南:从零配置 20 课数据科学学习环境 【免费下载链接】Data-Science-For-Beginners 10 Weeks, 20 Lessons, Data Science for All! 项目地址: https://gitcode.com/GitHub_Trending/da/Data-Science-For-Beginners …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬