基于knn的手写数字识别

一、实验目的

熟悉KNN算法的基本流程,同时掌握sklearn机器学习库的使用。

(代码在后面)

本实验首先使用基于Python实现KNN算法实现手写字识别,然后使用sklearn库的KNN算法实现手写字识别。

  1. 实验数据准备

我们首先使用如下解压命令将kNN_hand_writing.tgz压缩包解压,里面包含两个子目录,分别为trainingDigits和testDigitstrainingDigits为训练数据集的文件,文件数量为1935;testDigits为测试数据集的文件,文件数量为947。每个文件的命名格式都为“真实数字_编号.txt”。为了简便处理,实验中,用txt文本文件表示图片。原图片中像素值为黑色(0,0,0)的像素点在txt中对应的用0表示,像素值为白色(255,255,255)的像素点用1表示。所以,只需要处理这些文本文件即可,不用再去解析图片格式。每个txt文件中,数据共有32行和32列,这是由于原图片的大小为32X32。

  1. KNN核心算法

KNN的算法流程为:

a.计算已知类别数据集中的点与当前点之间的距离;

b.按照距离递增次序排序;

c.选取与当前点距离最小的k个点;

d.确定前k个点所在类别的出现频率;

e.返回前k个点所出现频率最高的类别作为当前点的预测分类。

在这一步里,我们将定义函数classify0作为KNN算法的核心函数,其函数的完整形式为: def classify0(inX, dataSet, labels, k): 其中各参数含义为:

inX – 用于要进行分类判别的数据,是一个向量(来自测试集)

dataSet – 所有训练数据的集合,是一个矩阵(训练集)

lables – 分类标签

k – KNN算法参数,选择距离最小的k个点

根据KNN算法流程,我们首先应该计算inX这个要判别分类的点到dataSet中每个点之间的距离,dataSet中每个点也是用向量表示的,点与点之间的距离,实则就是求两个向量之间的距离,在数学中有很多距离计算公式,我们这里选择最简单的欧氏距离计算方法。设A和B为两向量,则两向量间的欧氏距离为:

函数的输入参数和距离计算公式都明确了,下面让我们来实现KNN算法。

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值