KNN (K近邻算法) - 识别手写数字
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近邻算法) - 识别手写数字的更多相关文章
- KNN算法识别手写数字
需求: 利用一个手写数字“先验数据”集,使用knn算法来实现对手写数字的自动识别: 先验数据(训练数据)集: ♦数据维度比较大,样本数比较多. ♦ 数据集包括数字0-9的手写体. ♦每个数字大约有20 ...
- KNN 算法-实战篇-如何识别手写数字
公号:码农充电站pro 主页:https://codeshellme.github.io 上篇文章介绍了KNN 算法的原理,今天来介绍如何使用KNN 算法识别手写数字? 1,手写数字数据集 手写数字数 ...
- 基于OpenCV的KNN算法实现手写数字识别
基于OpenCV的KNN算法实现手写数字识别 一.数据预处理 # 导入所需模块 import cv2 import numpy as np import matplotlib.pyplot as pl ...
- C#中调用Matlab人工神经网络算法实现手写数字识别
手写数字识别实现 设计技术参数:通过由数字构成的图像,自动实现几个不同数字的识别,设计识别方法,有较高的识别率 关键字:二值化 投影 矩阵 目标定位 Matlab 手写数字图像识别简介: 手写 ...
- 使用神经网络来识别手写数字【译】(三)- 用Python代码实现
实现我们分类数字的网络 好,让我们使用随机梯度下降和 MNIST训练数据来写一个程序来学习怎样识别手写数字. 我们用Python (2.7) 来实现.只有 74 行代码!我们需要的第一个东西是 MNI ...
- python手写神经网络实现识别手写数字
写在开头:这个实验和matlab手写神经网络实现识别手写数字一样. 实验说明 一直想自己写一个神经网络来实现手写数字的识别,而不是套用别人的框架.恰巧前几天,有幸从同学那拿到5000张已经贴好标签的手 ...
- 学习笔记TF024:TensorFlow实现Softmax Regression(回归)识别手写数字
TensorFlow实现Softmax Regression(回归)识别手写数字.MNIST(Mixed National Institute of Standards and Technology ...
- TensorFlow实战之Softmax Regression识别手写数字
关于本文说明,本人原博客地址位于http://blog.csdn.net/qq_37608890,本文来自笔者于2018年02月21日 23:10:04所撰写内容(http://blog.c ...
- 一文全解:利用谷歌深度学习框架Tensorflow识别手写数字图片(初学者篇)
笔记整理者:王小草 笔记整理时间2017年2月24日 原文地址 http://blog.csdn.net/sinat_33761963/article/details/56837466?fps=1&a ...
随机推荐
- Linux 系统篇(一)
退出当前程序 quit 填充代码: tab键 中断当前操作: ctrl + c 键盘输入结束 ctrl + d 关机 shutdown 重启 reb ...
- HTML5实现刷脸支付
最近刷脸支付很火,老板们当然要追赶时代潮流,于是就有了刷脸支付这个项目.前端实现关键的技术是摄像头录像,拍照和人脸比对,本文来探讨一下如何在html5环境中如何实现刷脸支付以及开发过程中遇到的问题. ...
- spark sql error mismatched input 'union' expecting { <EOF>,''................................
给union的前后sql加括号就可以解决
- python3(十一)generator
# 只要把一个列表生成式的[]改成() L = [x * x for x in range(10)] print(L) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] g ...
- Java入门系列之线程池ThreadPoolExecutor原理分析思考(十五)
前言 关于线程池原理分析请参看<http://objcoding.com/2019/04/25/threadpool-running/>,建议对原理不太了解的童鞋先看下此文然后再来看本文, ...
- 项目中你不得不知的11个Java第三方类库
项目中你不得不知的11个Java第三方类库 博客分类: Java综合 JavaGoogle框架单元测试Hibernate Java第三方library ecosystem是一个很广阔的范畴.不久前有人 ...
- 如何利用 githob 上传自己的网站
如何搭建自己的网页是每个学前端伙伴不可缺少的一个过程,特意去看过很多如何搭建的教程,但都看不懂觉得很麻烦, 在慢慢的学习中接触到githob,发现了一个大宝藏(如果一个code都不认识githob 那 ...
- CentOS7安装MYCAT中间件
MYCAT是一个被广泛使用的功能强大的开源的数据库中间件,当然他的理想不仅仅是做一个中间件.这篇文章主要记录MYCAT服务的搭建过程,下篇会继续更新MYCAT的使用配置. 本篇记录将使用CentOS7 ...
- 软件包管理rpm和yum
rpm的使用: 安装的包相关包信息会保存在/var/lib/rpm目录下的文件中 安装参数: -i install安装 -v 显示详细信息 -h 打印####号 -V 校验软件包,会到/var/lib ...
- 模仿NetFlix首页效果
之前写过UWP 带左右滚动按钮的横向ListView———仿NetFlix首页河的设计,讲述了如何设计一个带有左右滚动按钮横向的ListView. 不过我在半年之前挖了一个坑,由于工作关系,没时间来填 ...