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,:] = vectindex+=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,:] = vectindex+=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%

转载于:https://www.cnblogs.com/blogscc/p/11518697.html

KNN (K近邻算法) - 识别手写数字相关推荐

  1. K 近邻算法识别手写数字(Numpy写法)

    在 Kaggle 上面的 Notebook 给可爱的学弟学妹们用于参考... 代码这个东西一定要自己多写,我一边听着林宥嘉的<想自由>,一边写出了大致的实现.K 近邻算法大概做的是一件什么 ...

  2. k近邻算法_图穷匕见:K近邻算法与手写数字识别

    机器学习算法是从数据中产生模型,也就是进行学习的算法.我们把经验提供给算法,它就能够根据经验数据产生模型.在面对新的情况时,模型就会为我们提供判断(预测)结果.例如,我们根据"个子高.腿长. ...

  3. OpenCV-Python实战(番外篇)——利用 KNN 算法识别手写数字

    OpenCV-Python实战(番外篇)--利用 KNN 算法识别手写数字 前言 手写数字数据集 MNIST 介绍 基准模型--利用 KNN 算法识别手写数字 改进模型1--参数 K 对识别手写数字精 ...

  4. python与人工智能:KNN近邻法识别手写数字

    机器学习分类? 1 特征(feature) 数据是区分事物和事物的关键. 举例:不同类型的书,我们用书的内容来对它进行分类 2 标签(label) 数据的标签,显示的分类结果. 举例:书属于的类别,例 ...

  5. 【机器学习实战】k近邻算法实战——手写识别系统

    文章目录 手写识别系统 步骤: 准备数据:将图像转换为测试向量 测试算法:使用k-近邻算法识别手写数字 [完整代码] 手写识别系统 为了简单起见,这里构造的系统只能识别数字0到9,参见图2-6.需要识 ...

  6. 机器学习实战之k-近邻算法识别手写数字(含拍照检验步骤详解)

    哈哈,这是我写的第一篇博客,就此拉开了我的程序员生涯的序幕.希望有缘人看见之后,能够解决你所遇见的问题.废话不多说,开始办正事. 本例中使用K-近邻算法识别手写数字,参考书目:Peter Harrin ...

  7. OpenCV-Python实战(番外篇)——利用 SVM 算法识别手写数字

    OpenCV-Python实战(番外篇)--利用 SVM 算法识别手写数字 前言 使用 SVM 进行手写数字识别 参数 C 和 γ 对识别手写数字精确度的影响 完整代码 相关链接 前言 支持向量机 ( ...

  8. opencv(python)使用knn最近邻算法识别手写数字

    knn最近邻算法是一种分类以及回归算法,算法原理是一个样本与样本集中k个样本最相似,如果这k个样本的大多数也属于同一个类别,则该样本也属于这一类.关于knn算法的详细原理读者可以在网上找一些资料了解下 ...

  9. 基于K近邻法的手写数字图像识别

                           数字图像处理课程论文                          题目:数字图像识别   摘要 模式识别(PatternRecognition)是一 ...

  10. opencv(python)使用svm算法识别手写数字

    svm算法是一种使用超平面将数据进行分类的算法. 关于mnist数据的解析,读者可以自己从网上下载相应压缩文件,用python自己编写解析代码,由于这里主要研究knn算法,为了图简单,直接使用Kera ...

最新文章

  1. GhostNet 测试
  2. PHP部分字符串函数汇总
  3. struts2结果类型
  4. python 爬虫-beautifulsoup4
  5. windows mobile开发循序渐进(1)关于平台和工具
  6. 网校系统推荐eduline_网校系统的各项功能的用处
  7. java2组随机数的共通数_java随机数产生-指数分布 正态分布 等
  8. Oracle EBS 入门
  9. SQL大赛——5X5方格棋盘难题
  10. java单例模式 三种_三种java单例模式概述
  11. poj2031(prim)
  12. 集中式 vs 分布式 版本控制
  13. Linux —— 文件系统(特殊文件)、tree
  14. 开机需要手动启动无线
  15. 科大讯飞语音转写以及语音合成配置+遇到问题处理
  16. 鉴源实验室丨汽车网络安全需求分析方法综述
  17. 科目一知识点分类记忆
  18. 第二人生的源码分析(四十)创建多个工作线程
  19. Ubuntu 16.04下的美化配置过程
  20. 华为mate40Android,【猫哥爆料】史上最强Mate40官宣,坐实年度安卓机皇!

热门文章

  1. Task Office for mac(任务办公计划管理)
  2. Alfred 4 for Mac(应用快速启动器)
  3. win10的一些命令,记一记
  4. Automapper问题记录
  5. Excel表格数据很少但是文件却很大该怎么缩小
  6. Cocos2dx源码记录(3) CCVertexIndexData
  7. 单例模式简单示例与优化
  8. Spring概况(一)
  9. CSS-----盒子模型
  10. Solution Explorer 和 Source Control Explorer 的 View History 异同