手写数字识别的k-近邻算法实现

WellMax WellMax     2022-10-05     293

关键词:

(本文为原创,请勿在未经允许的情况下转载)

前言

手写字符识别是机器学习的入门问题,k-近邻算法(kNN算法)是机器学习的入门算法。本文将介绍k-近邻算法的原理、手写字符识别问题分析、手写字符识别的kNN实现、测试。

kNN算法原理

kNN算法是一种分类算法,即如何判定一组输入数据属于哪一类别的算法。kNN属于监督学习算法,必须给定训练样本,样本包括输入样本和输出样本。而无监督学习则不需要训练样本。

那么最简单的分类方法就是将输入数据与样本一一比对,并将相似性最强的前k个样本选出,这k个样本中的大多数属于哪一类别,则判定输入数据属于该类别。

从图形上看,就是找出了样本空间中与输入数据最近的k个数据,这些数据中的大多数属于哪个类别,则输入数据也属于该类别。(当然,这是算法的原理,从逻辑上看问题不大,但是这个输入数据是否应该和它的k个近邻属于同一类却是不得而知的,但作为一个入门算法不考虑这种情况。)

手写数字识别分析

  • 图像预处理:二值化、分割、统一标记。将这一过程成为预处理,是因为这一过程并不属于kNN算法的内容。

    图1 样本输入(手写体“4”和“5”)
  • 输入数据格式化:由于是使用欧氏距离来寻找k-近邻的,因此最好将输入的图像转换为一个向量,以便于计算输入数据与样本数据的距离。
  • 寻找k-近邻:核心过程。计算欧氏距离并排序,取排前k的训练样本。
  • 分类决策:前k个训练样本中的标签统计,出现次数最多的标签即为结果。

算法实现

  • 图像预处理:使用MATLAB对图像进行处理,不属于算法本身。
  • 输入数据格式化:对于已做好标记的图片,输入之后将矩阵转换为向量。
  • 寻找k-近邻:
  • 分类决策:

测试

上图展示了程序运行结果,在测试时共产生了12个错误输出,错误率为1.27%。

结语

kNN算法是种简单、有效的算法,但是该算法必须保存训练数据集,如果训练数据集很大,则会占用很多存储空间。算法的时间复杂度和空间复杂度都并不令人满意,因此简单有效的算法往往会牺牲效率,程序员的自我牺牲换来高效的算法

实验楼1.k-近邻算法实现手写数字识别系统--《机器学习实战》

首先看看一些关键词:K-NN算法,训练集,测试集,特征(空间),标签举实验楼中的样例,通俗的讲讲K-NN算法:电影有两个分类(标签)-动作片-爱情片。两个特征--打斗场面--亲吻画面。将那些数字和分类用图像表示大概如下... 查看详情

手写算法实现之knnk近邻算法(代码片段)

【手写算法实现】之KNNK近邻算法kkk-近邻(k-NearestNeighbors)的思想是给定测试样本,基于某种距离度量(⼀般使⽤欧⼏⾥德距离)找出训练集中与其最靠近的kkk个训练样本,然后基于这kkk个“邻居”的信息来进⾏预测(“物以类... 查看详情

手写算法实现之knnk近邻算法(代码片段)

【手写算法实现】之KNNK近邻算法kkk-近邻(k-NearestNeighbors)的思想是给定测试样本,基于某种距离度量(⼀般使⽤欧⼏⾥德距离)找出训练集中与其最靠近的kkk个训练样本,然后基于这kkk个“邻居”的信息来进⾏预测(“物以类... 查看详情

nn:神经网络算法进阶优化法,进一步提高手写数字识别的准确率—jasonniu

上一篇文章,比较了三种算法实现对手写数字识别,其中,SVM和神经网络算法表现非常好准确率都在90%以上,本文章进一步探讨对神经网络算法优化,进一步提高准确率,通过测试发现,准确率提高了很多。首先,改变之一:先... 查看详情

《机器学习实战》之k-近邻算法(手写识别系统)

这个玩意和改进约会网站的那个差不多,它是提前把所有数字转换成了32*32像素大小的黑白图,然后转换成字符图(用0,1表示),将所有1024个像素点用一维矩阵保存下来,这样就可以通过knn计算欧几里得距离来得到最接近的答案... 查看详情

机器学习实战笔记-k近邻算法3(手写识别系统)

1准备数据:将图像转换为测试向量这次数据集还是有两种,训练数据集和测试数据集,分别有2000个,900个。我们将把一个32*32的二进制图像矩阵转换为1x1024的向量,这样前两节使用的分类器就可以处理数字图像信息了。代码:defi... 查看详情

k近邻算法--手写识别系统

下面的例子来源为《机器学习实战》,例子只能识别0-9。首先需要将图像二进制数据转化为测试向量:defimgTransformVector(filename):#将32x32二进制图像矩阵转化为1x1024向量returnVector=np.zeros((1,1024))fr=open(filename)foriinrange(32):lineStr=fr.readlin... 查看详情

tensorflow经典案例2:实现最近邻算法

本次案例需要大家了解关于手写数字识别(mnist)的数据集的特点和结构:#TensorFlow实现最近邻算法#次案例的前提是了解mnist数据集(手写数字识别)importtensorflowastfimportnumpyasnpfromtensorflow.examples.tutorials.mnistimportinput_data#导入mnist... 查看详情

机器学习——k-近邻(k-nearestneighbor)

...量的算法分类物品;最后通过k-近邻算法改进约会网站和手写数字识别系统。文章内容参考《机器学习实战》K-近邻分类算法简单的说,通 查看详情

《机器学习实战》-k近邻算法(代码片段)

...数值测试算法:验证分类器使用算法:构建完整可用系统手写识别系统准备数据测试算法使用算法:构建完整可用系统总结K-近邻算法k-近邻分类算法概述使用k-近邻算法 查看详情

深度学习算法实践12---卷积神经网络(cnn)实现

...,我们将讨论基于Theano的算法实现技术。我们还将以MNIST手写数字识别为例,创建卷积神经网络(CNN),训练该网络,使识别误差达到1%以内。我们首先需要读入MNIST手写数字识别的训练样本集,为此我们定义了一个工具类:from__... 查看详情

k-近邻算法代码详解(代码片段)

...个分类问题。在书中介绍的就是有电影分类、择偶、识别手写数字。二、近邻算法的代码详解1、实施分类算法defclassify0(inX,dataSet,labels,k):dataSetSize=dataSet.shape[0]#代表的是dataSet数据集中的行数diffMat=tile(inX,(dataSetSize,1))-dataSet#... 查看详情

图像识别基于模板匹配之手写数字识别系统gui界面(代码片段)

...问题。光学字符识别的出现为这一问题提供了解决方法。手写体数字识别是光学字符识别的重要分支,因其在金融、邮政、医疗、交通、教育等领域中广泛的应用而日益被重视。目前,已有多种手写体数字识别算法,但都很难满足手... 查看详情

knn算法实现手写数字(代码片段)

fromnumpyimport*importoperatorfromosimportlistdirdefclassify0(inX,dataSet,labels,k):dataSetSize=dataSet.shape[0]diffMat=tile(inX,(dataSetSize,1))-dataSetsqDiffMat=diffMat**2sqDistances=sqDiffMat.sum(a 查看详情

机器学习k-近邻算法(代码片段)

目录1K-近邻算法简介2K-近邻算法(KNN)2.1定义2.2距离公式3电影类型分析3.1问题3.2K-近邻算法数据的特征工程处理4K-近邻算法API5案例:预测签到位置5.1分析5.2代码5.3结果分析6K-近邻总结1K-近邻算法简介目标说明K-近邻算法的距离... 查看详情

k-近邻算法python实现

必要的注释以及写在code里面了;importoperatorfromnumpyimport*definit():grp=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])lab=[‘A‘,‘A‘,‘B‘,‘B‘]returngrp,labdefClassify(inX,dataset,lab,k):#用于分类的向量inX;数据集dataset;属性向量lab;k 查看详情

毕设题目:matlab手写或印刷数字字母识别

1案例背景手写体数字识别是图像识别学科下的一个分支,是图像处理和模式识别研究领域的重要应用之一,并且具有很强的通用性。由于手写体数字的随意性很大,如笔画粗细、字体大小、倾斜角度等因素都有可能... 查看详情

数字 0-9 的二进制图像的哪些特征应该与 k 最近邻算法一起使用?

】数字0-9的二进制图像的哪些特征应该与k最近邻算法一起使用?【英文标题】:Whatcharacteristicsofabinaryimageofanumber0-9shouldbeusedwiththeknearestneighbouralgorithm?【发布时间】:2014-04-0509:11:43【问题描述】:玩弄OCR。我有一组可以用作训练... 查看详情