KNN项目实战——手写数字识别

1、 介绍

k近邻法(k-nearest neighbor, k-NN)是1967年由Cover T和Hart P提出的一种基本分类与回归方法。它的工作原理是:存在一个样本数据集合,也称作为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一个数据与所属分类的对应关系。输入没有标签的新数据后,将新的数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不大于20的整数。最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类。

2、数据集介绍

32X32 文本格式数据.

3、代码实现

3.1、导包

import numpy as np
import pandas as pd
import matplotlib.pylab as plt
%matplotlib inline
import os

3.2、读取训练数据

# 获取数据文件
fileList = os.listdir('./data/trainingDigits/') # 定义数据标签列表
trainingIndex = []

# 添加数据标签
for filename in fileList:
trainingIndex.append(int(filename.split('_')[0])) # 定义矩阵数据格式
trainingData = np.zeros((len(trainingIndex),1024))
trainingData.shape
#(3868, 1024)
# 获取矩阵数据
index = 0
for filename in fileList:
with open('./data/trainingDigits/%s'%filename, 'rb') as f: # 定义一个空矩阵
vect = np.zeros((1,1024)) # 循环32行
for i in range(32):
# 读取每一行数据
line = f.readline() # 遍历每行数据索引 line[j] 即为数据
for j in range(32):
vect[0,32*i+j] = int(line[j]) trainingData[index,:] = vect
index+=1

3.3、读取测试数据

fileList2 = os.listdir('./data/testDigits/')

# 定义数据标签列表
testIndex = []

# 获取数据标签
for filename2 in fileList2:
testIndex.append(int(filename2.split('_')[0])) #读取测试数据 # 定义矩阵数据格式
testData = np.zeros((len(testIndex),1024))
testData.shape
#(946, 1024) # 获取矩阵数据
index = 0
for filename2 in fileList2:
with open('./data/testDigits/%s'%filename2, 'rb') as f: # 定义一个空矩阵
vect = np.zeros((1,1024)) # 循环32行
for i in range(32):
# 读取每一行数据
line = f.readline() # 遍历每行数据索引 line[j] 即为数据
for j in range(32):
vect[0,32*i+j] = int(line[j]) testData[index,:] = vect
index+=1

3.5、数据建模

from sklearn.neighbors import KNeighborsClassifier

# 定义 k 为5个, 即 寻找最近的3个邻居
knn = KNeighborsClassifier(n_neighbors=3) # 训练数据
knn.fit(trainingData,trainingIndex)

3.6、分析数据

%%time
# 预测数据 predict_data = knn.predict(testData) # Wall time: 7.8 s
knn.score(testData,testIndex)
#0.9862579281183932
# 识别正确率: 98.626%

KNN (K近邻算法) - 识别手写数字的更多相关文章

  1. KNN算法识别手写数字

    需求: 利用一个手写数字“先验数据”集,使用knn算法来实现对手写数字的自动识别: 先验数据(训练数据)集: ♦数据维度比较大,样本数比较多. ♦ 数据集包括数字0-9的手写体. ♦每个数字大约有20 ...

  2. KNN 算法-实战篇-如何识别手写数字

    公号:码农充电站pro 主页:https://codeshellme.github.io 上篇文章介绍了KNN 算法的原理,今天来介绍如何使用KNN 算法识别手写数字? 1,手写数字数据集 手写数字数 ...

  3. 基于OpenCV的KNN算法实现手写数字识别

    基于OpenCV的KNN算法实现手写数字识别 一.数据预处理 # 导入所需模块 import cv2 import numpy as np import matplotlib.pyplot as pl ...

  4. C#中调用Matlab人工神经网络算法实现手写数字识别

    手写数字识别实现 设计技术参数:通过由数字构成的图像,自动实现几个不同数字的识别,设计识别方法,有较高的识别率 关键字:二值化  投影  矩阵  目标定位  Matlab 手写数字图像识别简介: 手写 ...

  5. 使用神经网络来识别手写数字【译】(三)- 用Python代码实现

    实现我们分类数字的网络 好,让我们使用随机梯度下降和 MNIST训练数据来写一个程序来学习怎样识别手写数字. 我们用Python (2.7) 来实现.只有 74 行代码!我们需要的第一个东西是 MNI ...

  6. python手写神经网络实现识别手写数字

    写在开头:这个实验和matlab手写神经网络实现识别手写数字一样. 实验说明 一直想自己写一个神经网络来实现手写数字的识别,而不是套用别人的框架.恰巧前几天,有幸从同学那拿到5000张已经贴好标签的手 ...

  7. 学习笔记TF024:TensorFlow实现Softmax Regression(回归)识别手写数字

    TensorFlow实现Softmax Regression(回归)识别手写数字.MNIST(Mixed National Institute of Standards and Technology ...

  8. TensorFlow实战之Softmax Regression识别手写数字

         关于本文说明,本人原博客地址位于http://blog.csdn.net/qq_37608890,本文来自笔者于2018年02月21日 23:10:04所撰写内容(http://blog.c ...

  9. 一文全解:利用谷歌深度学习框架Tensorflow识别手写数字图片(初学者篇)

    笔记整理者:王小草 笔记整理时间2017年2月24日 原文地址 http://blog.csdn.net/sinat_33761963/article/details/56837466?fps=1&a ...

随机推荐

  1. Typora+PicGo+GitHub实现md自带图床效果

    1 GitHub创建作为图床的仓库 1.1 在GitHub中创建一个仓库 注意仓库要是public的,不然上传的图片还是无法使用的.如果不知道怎么创建仓库,可以百度一下. 1.2 在GitHub生成一 ...

  2. YII基础二

    YII多表关联查询 ->select("{{%relation_detail}}.name") ->from("{{%user}}") ->l ...

  3. Linux C++ 网络编程学习系列(2)——多路IO之select实现

    select实现多路IO 源码地址:https://github.com/whuwzp/linuxc/tree/master/select 源码说明: server.cpp: 监听127.1:6666 ...

  4. cgdb使用方法

    cgdb --args [exe_name] [arg1] [arg2] [arg3] [...] 进入代码窗口 按ESC键 进入调试窗口 按i键 调试命令 r 运行 n 单步执行(不进入函数) s ...

  5. 01、WireShark——ARP 协议包分析

     1. 什么是ARP ARP(Address Resolution Protocol)协议,即地址解析协议.该协议的功能就是将 IP 地 址解析成 MAC 地址. ARP(Address Resolu ...

  6. PHP函数:php_sapi_name

    php_sapi_name()  - 返回 web 服务器和 PHP 之间的接口类型. SAPI(Server Application Programming Interface)服务器应用程序编程接 ...

  7. SpringCloud(三)学习笔记之Ribbon

    spring Cloud Ribbon 是一个客户端的负载均衡器,它提供对大量的HTTP和TCP客户端的访问控制. 客户端负载均衡即是当浏览器向后台发出请求的时候,客户端会向 Eureka Serve ...

  8. 美的PDF转换成Word转换器完全免费

    下载地址:百度网盘提取码:02ap 安装破解步骤:先安装主程序,末尾是full结尾的,安装完成后不要打开软件,然后接着安装破解补丁,即可破解成功! 需要的老铁们直接拿去用吧,亲测好用!有配套的功能强大 ...

  9. python 基础篇 匿名函数

    匿名函数基础 首先,什么是匿名函数呢?以下是匿名函数的格式: lambda argument1, argument2,... argumentN : expression 我们可以看到,匿名函数的关键 ...

  10. Python常用库-Psutil

    背景 介绍一个处理进程的实用工具,这个是一个第三方库.应用主要有类似ps.cd.top,还有查看硬盘.内存使用情况等. 推荐的理由主要有 2 个,第一个是跨平台的,不管是OSX.Centos.Wind ...