↑ 点击上方【计算机视觉联盟】关注我们

本节使用KNN算法实现手写数字识别。KNN算法基本原理前边文章已经详细叙述,盟友们可以参考哦!

数据集介绍

有两个文件:

(1)trainingDigits文件,包含了大约2000个例子,每个数字大约有200个样本

(2)testDigits文件,包含了大约900个测试数据

数据样式为:

文件夹格式

数字0样式

数字2样式

我们使用trainingDigits文件中的数据作为训练分类器,使用testDigits文件中的数据测试分类器的效果KNN算法那实现手写数字识别代码如下:

 1#!/usr/bin/env python2# -*- coding:utf-8 -*-3import numpy as np4# os 模块中导入函数listdir,该函数可以列出给定目录的文件名5from os import listdir6import operator789def img2vector(filename):
10    """实现将图片转换为向量形式"""
11    return_vector = np.zeros((1, 1024))
12    fr = open(filename)
13    for i in range(32):
14        line = fr.readline()
15        for j in range(32):
16            return_vector[0, 32*i + j] = int(line[j])
17    return return_vector
18
19
20# inX 用于分类的输入向量
21# dataSet表示训练样本集
22# 标签向量为labels,标签向量的元素数目和矩阵dataSet的行数相同
23# 参数k表示选择最近邻居的数目
24def classify0(inx, data_set, labels, k):
25    """实现k近邻"""
26    diff_mat = inx - data_set   # 各个属性特征做差
27    sq_diff_mat = diff_mat**2  # 各个差值求平方
28    sq_distances = sq_diff_mat.sum(axis=1)  # 按行求和
29    distances = sq_distances**0.5   # 开方
30    sorted_dist_indicies = distances.argsort()  # 按照从小到大排序,并输出相应的索引值
31    class_count = {}  # 创建一个字典,存储k个距离中的不同标签的数量
32
33    for i in range(k):
34        vote_label = labels[sorted_dist_indicies[i]]  # 求出第i个标签
35        # 访问字典中值为vote_label标签的数值再加1,
36        # class_count.get(vote_label, 0)中的0表示当为查询到vote_label时的默认值
37        class_count[vote_label] = class_count.get(vote_label, 0) + 1
38    # 将获取的k个近邻的标签类进行排序
39    sorted_class_count = sorted(class_count.items(), key=operator.itemgetter(1), reverse=True)
40    # 标签类最多的就是未知数据的类
41    return sorted_class_count[0][0]
42
43
44def hand_writing_class_test():
45    """手写数字KNN分类"""
46    hand_writing_labels = []  # 手写数字类别标签
47    training_file_list = listdir('digits/trainingDigits')  # 获得文件中目录列表,训练数据集
48    m = len(training_file_list)   # 求得文件中目录文件个数(训练数据集)
49    training_mat = np.zeros((m, 1024))  # 创建训练数据矩阵,特征属性矩阵
50
51    for i in range(m):
52        file_name_str = training_file_list[i]  # 获取单个文件名
53        file_str = file_name_str.split(' ')[0]  # 将文件名中的空字符去掉,这里的[0]是将文件名取出来
54        class_num_str = int(file_str.split('_')[0])  # 取出数字类别
55        hand_writing_labels.append(class_num_str)  # 将数字类别添加到类别标签矩阵中
56        # 将图像格式转换为向量形式
57        training_mat[i, :] = img2vector('digits/trainingDigits/%s' % file_name_str)
58
59    test_file_list = listdir('digits/testDigits')  # 获得文件中目录列表,测试数据集
60    error_count = 0  # 错误分类个数
61    m_test = len(test_file_list)  # 测试数据集个数
62
63    for i in range(m_test):
64        file_name_str = test_file_list[i]  # 获取单个文件名(测试数据集)
65        file_str = file_name_str.split('.')[0]  # 将文件名中的空字符去掉,这里的[0]是将文件名取出来(测试数据集)
66        class_num_str = int(file_str.split('_')[0])   # 取出数字类别(测试数据集)
67        # 将图像格式转换为向量形式(测试数据集)
68        vector_under_test = img2vector('digits/testDigits/%s' % file_name_str)
69        # KNN分类,以测试数据集为未知数据,训练数据为训练数据
70        classifier_result = classify0(vector_under_test, training_mat, hand_writing_labels, 3)
71        # 输出分类结果和真实类别
72        print('the classifier came back with: %d, the real answer is: %d' % (classifier_result, class_num_str))
73        # 计算错误分类个数
74        if classifier_result != class_num_str:
75            error_count += 1
76
77    # 输出错误分类个数和错误率
78    print("\n the total number of errors is: %d" % error_count)
79    print("\n the total error rate is: %f" % (error_count/float(m_test)))
80
81
82# 调用手写识别
83hand_writing_class_test()

运行结果:

数据集下载方式

公众号回复关键词【KNN】即可获取

往期回顾

● 亲身经历2019年校招8个大厂心得体会,纯干货分享(大疆、百度...)

● 带你详细了解机器视觉竞赛—ILSVRC竞赛

● 到底什么是“机器学习”?机器学习有哪些基本概念?(简单易懂)

● 带你自学Python系列(一):变量和简单数据类型(附思维导图)

● 带你自学Python系列(二):Python列表总结-思维导图

● 带你自学Python系列(三):列表遍历(for循环)

● 2018年度最强的30个机器学习项目!

● 斯坦福李飞飞高徒Johnson博士论文: 组成式计算机视觉智能(附195页PDF)

● 134页《深度学习数学基础笔记》(内附电子书下载)

● 【资源】100页机器学习入门完整版,必须收藏!

● 【工作篇】华为武汉长沙地区2020届猎户座寒假实习生招聘

● 一文详解计算机视觉的广泛应用:网络压缩、视觉问答、可视化、风格迁移

● 2018年最值得关注的10个机器学习开源项目

● 【资源】《PyTorch模型训练实用教程》,必须收藏!

● 机器学习经典书籍李航《统计学习方法》(Python3.6)代码实现(及课件)

【项目实践】:KNN实现手写数字识别(附Python详细代码及注释)相关推荐

  1. 图像识别:利用KNN实现手写数字识别(mnist数据集)

    图像识别:利用KNN实现手写数字识别(mnist数据集) 步骤: 1.数据的加载(trainSize和testSize不要设置的太大) 2.k值的设定(不宜过大) 3.KNN的核心:距离的计算 4.k ...

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

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

  3. KNN实现手写数字识别(Python-OpenCV)

    手写数字识别 Python-OpenCV   KNN实现手写数字识别 目标:编写一个使用OPenCV的KNN模块实现手写数字识别的程序. 训练数据和测试数据为OpenCV自带的一副包含5000个手写数 ...

  4. 03_深度学习实现手写数字识别(python)

    本次项目采用了多种模型进行测试,并尝试策略来提升模型的泛化能力,最终取得了99.67%的准确率,并采用pyqt5来制作可视化GUI界面进行呈现.具体代码已经开源. 代码详情见附录 1简介 早在1998 ...

  5. 基于深度学习的手写数字识别算法Python实现

    摘 要 深度学习是传统机器学习下的一个分支,得益于近些年来计算机硬件计算能力质的飞跃,使得深度学习成为了当下热门之一.手写数字识别更是深度学习入门的经典案例,学习和理解其背后的原理对于深度学习的理解有 ...

  6. 基于深度学习的手写数字识别、python实现

    基于深度学习的手写数字识别.python实现 一.what is 深度学习 二.加深层可以减少网络的参数数量 三.深度学习的手写数字识别 一.what is 深度学习 深度学习是加深了层的深度神经网络 ...

  7. 【python】机器学习算法(KNN)入门——手写数字识别

    前言 嗨喽~大家好呀,这里是魔王呐 ! 最近邻 (k Nearest Neighbors, KNN)算法是一种分类算法 1968年由Cover和Hart提出,应用场景有宁符识别.文本分类. 图像识别等 ...

  8. 基于Python的KNN实验手写数字识别

    资源下载地址:https://download.csdn.net/download/sheziqiong/86791480 资源下载地址:https://download.csdn.net/downl ...

  9. KNN实现手写数字识别Python

    本文章总结了KNN算法字手写数字识别的应用,比较系统的对传统KNN和各种改进的KNN算法进行实现,由于完整的代码量较大(部分代码参考了机器学习实战),不适合全部贴出,但是博主乐于分享,有需要的话可以直 ...

最新文章

  1. Windows Phone 7 网络编程之留言板应用
  2. 测试电子负载用于无线充电系统的功能和精度
  3. java中Thread与Runnable的区别
  4. 学习笔记97—matlab 获取矩阵中特定值的坐标
  5. Matlab:成功解决The option is not valid. The options must be'double','native','default','omitnan', or'inc
  6. python开源项目homeassistant_树莓派安装家庭助理,Homeassistant,HASS
  7. 2021.NET大会日程首发!行程亮点全曝光!
  8. NSURLConnection 下载数据 -- IOS(实例)
  9. c语言按位取反 补码,按位取反运算符,数值取反之后是反码,还是补码- -
  10. Getting a handle on
  11. uoj #298. 【CTSC2017】网络
  12. 有道翻译与VS2010滚动栏自动反弹冲突问题
  13. 评价法(四):yaahp软件——层次分析法模块使用
  14. ShipConstructor.2006v1.00.rar
  15. 计算机二级office题库文档,二级office题库
  16. 扒谱大杂烩-都是前辈写的
  17. iOS 全息备份研究
  18. 联想Y480安装一键恢复
  19. linux中用户和组群的区别,linux 创建用户群与用户组、权限分配的例子
  20. K-means原理、优化及应用

热门文章

  1. linux timespec 链接库,Linux内核 timespec_sub()
  2. java list装3组数据_数组转List的3种方法和使用对比!
  3. 深度linux运行卡顿,Deepin很卡怎么办?Deepin卡顿解决方法盘点
  4. img解包打包工具_Python开发GUI实战:图片转换素描画工具!
  5. echarts词云图形状_词云图在自然语言中的应用,可以如此炫酷!
  6. python中回归拟合图_seaborn库:线性回归拟合图
  7. 晶圆缺陷检测设备_KLA突破电子束晶圆缺陷检测瓶颈,将助EUV光刻机一臂之力
  8. AutoMapper使用
  9. FreeRTOS 任务栈大小确定及其溢出检测
  10. linux 定时任务,压缩 日志,并删除掉 指定日期之前的 日志