上一篇《机器学习分类算法之k-近邻代码分析》中,大家后台留言有以下错误:

在此,统一给大家答复:这是由于Python 3与Python 2之间的割裂以及向下不兼容造成的,iteritems是Python2里的写法,Python3中使用items。出错的童鞋使用的环境是Python3,大家可以查看下自己的Python版本。

后续的代码分享,均使用Python3,如果有Python2和Python3不一致的地方,我会做好标注。

修改后正确的运行结果,如下:

本节分享的是Peter机器学习实战中2.3示例手写识别系统。怎样一步步构建并使用k-近邻分类器进行数字0~9的手写识别。

这个图应该不陌生,是经典的识别数字的卷积网络LeNet-5。通过简单的图像处理(处理的都是小patchs,比如28*28或32*32、图像归一化等操作,将像素数据送入卷积网络训练。

Peter机器学习从数据机器学习角度给了另一种实现手写识别的思路,作为识别数字的入门实现思路之一,还是不错的。也能很好的说明k-近邻分类器的用途。

按照掌握的k-近邻的实现路线,实现手写数字识别大致需要以下过程:

(1)收集数据:图像数据转化成文本数据(虽然文本格式存储图像不能利用内存空间,但是为了方便理解,还是转成文本格式,本文中图像大小采用32*32)

(2)准备数据:编写classify0()函数,将图像格式转换为分类器使用的list格式。另,数据需要分为两部分,一部分作为测试样本,另一部分作为非测试样本,非测试样本是已经完成分类的数据。

(3)分析数据:检查数据,确保数据符合要求。

(4)测试算法:用已知分类的数据和classify0()去测试分类结果与已知分类是否一致

(5)使用算法:从图像中提取数字,并完成数字识别。(此过程《机器学习实战》中没有)

收集数据:将图像转换为测试向

为了方便,直接使用2.3示例中提供的数据,数据情况如下:

数据目录

图像数据:如0,2

为了直接使用上一篇中的createDataSet()和classify0(),将每个32*32的二进制图像矩阵转化为1*1024向量。

需要定义函数img2vector,原理比较简单,循环读出32行,写入数字。下面以trainingDigits里的0_0.txt为例:

测试算法

该过程使用classify0()计算某个图像数据向量与一堆向量哪个向量最相近,便将最相近向量对应的标签作为该图像数据的标签。

算法测试原理:用trainingDigits里的数据做验证,该数据集里的命名方式"数字_该数字第几个实例.txt"。用classify0()测试trainingDigits下每一个数据是否正确。因为要遍历整个数据集文件目录,所以需要引入listdir函数(from os import listdir)。代码由三部分构成,分别是获取trainingDigits的文件目录内容、从文件名中解析出分类数字、classify0()识别出每个文件的分类数字。

代码实现

结果

PS:该过程又出现了Python3和Python2的不同之处:print。

python3中print是一个内置函数,有多个参数,而python2中print是一个语法结构;Python2打印时可以不加括号:print 'hello world', Python3则需要加括号   print("hello world")。

使用算法(该部分书本中没有)

写了一个简单的函数useClassify(filename),供大家参考,下面是函数实现:

小编自己从一副二值化的32*32的图像(数字0)转化为文本格式的数据,拿来做算法使用测试,测试结果如下:

总结:

数据量大了后,算法的执行效率不高,一是因为占用存储空间,另一个是已知分类数据多的情况下,耗时也会增长。再有k-近邻的原理导致没办法使用表征数据更好的特征。

理财快讯:如果你没能赶上打新股,那就参与打新债吧!

欢迎转发到朋友圈或分享给好友

一文实现0~9手写数字识别系统相关推荐

  1. 【毕业设计_课程设计】手写数字识别系统的设计实现(源码+论文)

    文章目录 0 项目说明 1 系统概述 1.1 系统实现环境 2 研究方法 2.1 图像预处理阶段 2.2 特征提取阶段 2.3 数字识别阶段 3 研究结论 4 论文概览 5 项目工程 0 项目说明 手 ...

  2. k-近邻算法实现手写数字识别系统

    k-近邻算法实现手写数字识别系统 一.实验介绍 1.1 实验内容 本实验将会从电影题材分类的例子入手,详细讲述k-近邻算法的原理.在这之后,我们将会使用该算法实现手写数字识别系统. 1.2 课程来源 ...

  3. 课程设计(毕业设计)—基于机器学习KNN算法手写数字识别系统—计算机专业课程设计(毕业设计)

    机器学习KNN算法手写数字识别系统 下载本文手写数字识别系统完整的代码和课设报告的链接(或者可以联系博主koukou(壹壹23七2五六98),获取源码和报告):https://download.csd ...

  4. MATLAB实现数字识别系统,基于人工神经网络的MATLAB手写数字识别系统

    <基于人工神经网络的MATLAB手写数字识别系统>由会员分享,可在线阅读,更多相关<基于人工神经网络的MATLAB手写数字识别系统(8页珍藏版)>请在人人文库网上搜索. 1.基 ...

  5. Python(TensorFlow框架)实现手写数字识别系统

    手写数字识别算法的设计与实现 本文使用python基于TensorFlow设计手写数字识别算法,并编程实现GUI界面,构建手写数字识别系统.这是本人的本科毕业论文课题,当然,这个也是机器学习的基本问题 ...

  6. 手写数字识别系统(python+K-近邻完整代码)

    手写数字图片识别系统的介绍: 由于数字图片是一个 32*32 维的二进制向量,不能直接放到模型中使用,所以: 首先需要先将每一个 3232 维的向量转化为 1(3232)维的向量,即 11024 维数 ...

  7. Python TensorFlow框架 实现手写数字识别系统

    手写数字识别算法的设计与实现 本文使用python基于TensorFlow设计手写数字识别算法,并编程实现GUI界面,构建手写数字识别系统.这是本人的本科毕业论文课题,当然,这个也是机器学习的基本问题 ...

  8. 深度学习笔记:01快速构建一个手写数字识别系统以及张量的概念

    深度学习笔记:01快速构建一个手写数字识别系统 神经网络代码最好运行在GPU中,但是对于初学者来说运行在GPU上成本太高了,所以先运行在CPU中,就是慢一些. 一.安装keras框架 使用管理员模式打 ...

  9. 完整代码及解析!!手写数字识别系统(手写数字测试识别 + pytoch实现 + 完整代码及解析)

    基于深度学习的手写数字识别系统 一.实验目的 ​ 1.任选实验环境及深度学习框架,实现手写数字识别系统: ​ 2.掌握所采用的深度血迹框架构建方式. 二.实验理论基础 1.MNIST数据集 ​ MNI ...

最新文章

  1. Silverlight+WCF 新手实例 象棋 主界面-实时聊天区(二十五)
  2. (0090)iOS开发之本地文件预览的三种方法(1)
  3. 生成建表脚本up_CreateTable
  4. 三十八、Vue项目上手 | 用户管理系统(上篇)
  5. android显示矩阵大小,关于android:显示代表灰度图像的双值矩阵
  6. 使用 iTextSharp 生成 PDF 表格
  7. html 属性存储对象,在HTML5 localStorage中存储对象
  8. ThinkPHP 3.1.2 模板中的变量
  9. 弱密码、未授权加固/修复建议
  10. asp.net使用MailMessage发送邮件的方法
  11. 紫光扫描仪ocr_清华紫光扫描仪的安装教程及使用方法
  12. ForkJoinPool api 详解
  13. CloudFlare的Worker免费部署服务
  14. 在html图片上方叠加一个半透明颜色层,并在半透明颜色层上叠加文字
  15. 修改google搜索引擎非hk方法
  16. C语言零基础入门习题(八)四则运算
  17. 2017第36届西安春季广告标识办公印刷LED光电照明产业博览会会刊(参展商名录)
  18. 12月5日计算机考试浙江卷英语答案,英语b级试卷?2019年12月b级真题试卷。
  19. [轉]运用项目管理WBS方法成功创建网店
  20. 印度身上中国软件能学什么

热门文章

  1. 关于 pygame中,检测按键按下
  2. WT588F02KD-24SS语音芯片(数码管显示驱动ic)在多功能烧水壶的应用设计方案
  3. 京东秒杀程序定时自动抢购茅台,原来我们一直抢不到是有原因的!(完整源码在文末)
  4. [ 常用工具篇 ] 还在嫌截图麻烦?快来使用 Win10 原生的截图工具 Snipping Tool 吧
  5. table.on('tool(test) test值是什么
  6. v-model的基本使用
  7. 网络工具netstat与ss
  8. 减去“商品名”这层包装外衣,让你看清“药品名”的真谛 - 看看你的感冒在中西医各怎样解读与配药
  9. RenderTexture 橡皮檫 电筒效果
  10. 【ava数据集】ava数据集下载 使用迅雷