1、实验原理:

Knn算法:邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是机器学习分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。属于监督学习,有类别标记,他没有明显的前期训练过程,在程序运行之后,把数据加载到内存后,不需要进行训练就可以分类。

2、大致流程:

使用kNN算法的手写识别系统

1.收集数据:提供文本文件

2.准备数据:编写函数img2vector(),将图像格式转换为分类器使用的向量格式。

3.分析数据:在Python命令提示符中检查数据,确保它符合要求。

4.测试算法:编写函数使用提供的部分数据集作为测试样本,测试样本与非测试样本的区别在于测试样本是已经完成分类的数据,如果预测分类与实际类别不同,则标记为一个错误。

5.使用算法:使用已编写好的算法来对测试样本进行测试

3、功能实现:

3.1 数据集的准备

将图像转换为txt文件。已知图像为28*28的像素范围,利用getpixel提取图片中的像素值大小。在打印成txt文件,这边要注意的是这边读取的是整个文件夹。

图 1数据集整理

3.2命名的整理

为了更好的对已有的数据集进行分类,我们将正确值与图片转换后的txt进行一一对应。

图 2 标签分离

注意:这边我们将列表的0序号占用掉。

将txt的命名修改成 标签_图片的形式,帮助knn进行分类。

图 3 txt命名

3.3KNN模型的建立:

实现思路:①将测试数据转换成只有一列的0-1矩阵形式 将所有(L个)训练数据也都用上方法转换成只有一列的0-1矩阵形式。②把L个单列数据存入新矩阵A中——矩阵A每一列存储一个字的所有信息。③用测试数据与矩阵A中的每一列求距离,求得的L个距离存入距离数组中。④从距离数组中取出最小的K个距离所对应的训练集的索引拥有最多索引的值就是预测值。

所以先定义一个读取数据的转换数据的函数。将图像信息转成28*28的格式。

图 4 读跟转换函数

在定义一个距离计算,相似度比较函数,来得出最高的索引值。用来确定测试样本的属性。

图 5 相似度计算

最后编写识别函数:

图 6识别函数

注意:图中定义模型列表,用来保存knn训练时产生的数组。采取的训练好后,将待测的值依次放入,进而求最接近的数,其概率就是最匹配的索引值。

3.4待测数据的整理:

将待训练的5000的样本集进行转换为txt文件。

图 7 待测样本转入

通过观察,可以发现本次实验所给的样本为乱序状态,无法对其用训练集的方式读取,所以这边采用了try ····except 的方式,用来跳过错误的文件名。

3.5、结果输出

图 8输出结果

利用已存入结果的结果列表result1,将对应的结果输出,输出是注意要将原图像的图形名一同输出,考虑到我们在测试的时候读写图片的顺序也是按顺序读写,所以这里输出的时候,我们在定义一个列表,用来存储名称。

图 9 结果

  1. 总结:

1、本次实验主要使用了kNN算法,由于采用的是图片转txt后在对应数组,在数据集达到60000时,运行时间巨长,而且在面对5000个数据集时,因为采用的是1对60000数组的形式,导致配对的数据更加长。这个也是此次程序的设计漏洞所在,但是其准确性确实高。

2、本次实验最难的部分,其实并不是算法的设计,我更认为是完成这些设计的边缘代码。比如如何使用 os 库,如何去遍历文件夹内的图片,以及非顺序性读取文件的处理。总体来说,本次课设不仅让我们学习了knn算法的原理,还巩固了我们其他方面的能力。

3、面对测试时间太长这个问题,经过更改数组变化,利用opencv库进行修改,大幅度提高了测试速度。

手写字识别knn模型相关推荐

  1. 机器学习之手写字识别(Knn算法应用)

    手写字识别 对手写字体图片进行识别最重要的一点就是要将其转化为二值化(就是就是将图像上的像素点或灰度值设置为0或1,其呈现就是非黑即白)后的数据,然后再进行处理,在手写体处理中,二值化就是有手写笔画的 ...

  2. TensorFlow基于minist数据集实现手写字识别实战的三个模型

    手写字识别 model1:输入层→全连接→输出层softmax model2:输入层→全连接→隐含层→全连接→输出层softmax model3:输入层→卷积层1→卷积层2→全连接→dropout层→ ...

  3. 基于tensorflow的MNIST手写字识别

    一.卷积神经网络模型知识要点卷积卷积 1.卷积 2.池化 3.全连接 4.梯度下降法 5.softmax 本次就是用最简单的方法给大家讲解这些概念,因为具体的各种论文网上都有,连推导都有,所以本文主要 ...

  4. python手写汉字识别_TensorFlow 2.0实践之中文手写字识别

    问题导读: 1.相比于简单minist识别,汉字识别具有哪些难点? 2.如何快速的构建一个OCR网络模型? 3.读取的时候有哪些点需要注意? 4.如何让模型更简单的收敛? 还在玩minist?fash ...

  5. .net 数字转汉字_TensorFlow 2.0 中文手写字识别(汉字OCR)

    TensorFlow 2.0 中文手写字识别(汉字OCR) 在开始之前,必须要说明的是,本教程完全基于TensorFlow2.0 接口编写,请误与其他古老的教程混为一谈,本教程除了手把手教大家完成这个 ...

  6. 在Windows上调试TensorFlow 2.0 中文手写字识别(汉字OCR)

    在Windows上调试TensorFlow 2.0 中文手写字识别(汉字OCR) 一.环境的搭建 Windows+1080Ti+Cuda10.1 Tsorflow2.0.0 Numpy1.16.4 注 ...

  7. Pytorch入门练习2-kaggle手写字识别神经网络(CNN)实现

    目录 数据预处理 自定义数据集 构建网络结构 对卷积神经网络进行训练和评估 对数据进行预测 保存预测数据,提交代码 SNN由于无法考虑到图片数据的维度关系,在预测精度上会被限制,本章我们采用CNN卷积 ...

  8. 用TensorFlow教你手写字识别

    1.MNIST数据集 基于MNIST数据集实现手写字识别可谓是深度学习经典入门必会的技能,该数据集由60000张训练图片和10000张测试图片组成,每张均为28*28像素的黑白图片.关于数据集的获取, ...

  9. 利用卷积神经网络实现手写字识别

    本文我们介绍一下卷积神经网络,然后基于pytorch实现一个卷积神经网络,并实现手写字识别 卷积神经网络介绍 传统神经网络处理图片问题的不足 让我们先复习一下神经网络的工作流程: 搭建一个神经网络 将 ...

最新文章

  1. Solaris 操作
  2. python下载地址-python下载网址
  3. thinkphp mysql缓存_ThinkPhp数据缓存技术
  4. sqlserver 中统计信息语句
  5. CN Erlounge IV 讲师名单公布及Call For Topic
  6. 59 MM配置-后勤发票校验-维护税代码缺省值
  7. C#开发笔记之03-为什么选择IsNotXXX方法而不是IsXXX方法?
  8. 运动会管理系统论文java_java+ssh+mysql大学运动会管理系统(源码+论文+任务书+ppt)...
  9. aws iam php,php-AWS4签名密钥-本教程错误吗?
  10. python基础编程语法-编程入门02:Python基础语法
  11. Apache基金会获得Pineapple基金88.34比特币捐赠
  12. 谷歌插件IDM下载MODIS数据
  13. python复制上一条语句快捷键_pycharm快捷键及一些常用设置
  14. 解非齐次线性方程组c语言,解非齐次线性方程组C语言程序设计.pdf
  15. 爱上经典之《大公鸡》
  16. mysql reopen table,MYSQL临时表关联Can't reopen table
  17. 判断将输入字母,进行大写转小写,小写转大写
  18. 单机版音乐播放器--ZTPlayer
  19. 好诗好词PARKER SCP01-100-24-07苏轼
  20. 常用 Git 命令使用教程

热门文章

  1. 只三两句,来聊聊呗~
  2. 如何使用Unity ARFoundation和XR Interaction Toolkit对Prefab进行选择、缩放、移动、和旋转操作?
  3. linux实操篇之-----vi和vim编辑器
  4. 如何利用微信红包来给公众号涨粉丝
  5. 设计模式—工厂设计模式
  6. 人工智能技术的新用途:精准营销
  7. TCP/IP 中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议
  8. total commander 增强 下载_小米9SE刷机包(官方最新固件下载MIUI12稳定版V12.0.2.0)...
  9. 2020年,大学生该如何成为一名初级码农
  10. 【TCP/IP (计算机网络)】 频分复用、时分复用、码分复用、波分复用