本文实例为大家分享了用KNN算法手写体识别的具体代码,供大家参考,具体内容如下

#!/usr/bin/python

#coding:utf-8

import numpy as np

import operator

import matplotlib

import matplotlib.pyplot as plt

import os

'''''

KNN算法

1. 计算已知类别数据集中的每个点依次执行与当前点的距离。

2. 按照距离递增排序。

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

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

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

'''

'''''

inX为要分类的向量

dataSet为训练样本

labels为标签向量

k为最近邻的个数

'''

def classify0(inX , dataSet , labels , k):

dataSetSize = dataSet.shape[0]#dataSetSize为训练样本的个数

diffMat = np.tile(inX , (dataSetSize , 1)) - dataSet#将inX扩展为dataSetSize行,1列

sqDiffMat = diffMat**2

sqDistances = sqDiffMat.sum(axis=1)

distances = sqDistances**0.5

sortedDistIndicies = distances.argsort()#返回的是元素从小到大排序后,该元素原来的索引值的序列

classCount = {}

for i in range(k):

voteIlabel = labels[sortedDistIndicies[i]]#voteIlabel为类别

classCount[voteIlabel] = classCount.get(voteIlabel,0)+1#如果之前这个voteIlabel是有的,那么就返回字典里这个voteIlabel里的值,如果没有就返回0

sortedClassCount = sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True)#key=operator.itemgetter(1)的意思是按照字典里的第一个排序,{A:1,B:2},要按照第1个(AB是第0个),即‘1'‘2'排序。reverse=True是降序排序

print sortedClassCount

return sortedClassCount[0][0]

'''''

将图像转换为1*1024的向量

'''

def img2vector(filename):

returnVect = np.zeros((1,1024))

fr = open(filename)

for i in range(32):

line = fr.readline()

for j in range(32):

returnVect[0,i*32+j] = int(line[j] )

return returnVect

'''''

手写体识别系统测试

'''

def handwritingClassTest(trainFilePath,testFilePath):

hwLabels = []

trainingFileList = os.listdir(trainFilePath)

m=len(trainingFileList)

trainSet = np.zeros((m,1024))

for i in range(m):

filename = trainingFileList[i]

classNum = filename.split('.')[0]

classNum = int(classNum.split('_')[0])

hwLabels.append(classNum)

trainSet[i] = img2vector( os.path.join(trainFilePath,filename) )

testFileList = os.listdir(testFilePath)

errorCount = 0

mTest = len(testFileList)

for i in range(mTest):

filename = trainingFileList[i]

classNum = filename.split('.')[0]

classNum = int(classNum.split('_')[0])

vectorUnderTest = img2vector(os.path.join(trainFilePath, filename))

classifyNum = classify0(vectorUnderTest,trainSet,hwLabels,10)

print "the classifier came back with : %d , the real answer is : %d"% (classifyNum , classNum)

if(classifyNum != classNum) : errorCount+=1

print ("\nthe total number of error is : %d"%errorCount)

print ("\nthe error rate is : %f"%(float(errorCount)/mTest))

handwritingClassTest()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持聚米学院。

手写体识别python,python使用KNN算法手写体识别相关推荐

  1. python 数学公式识别_Python实现基于KNN算法的笔迹识别功能详解

    本文实例讲述了Python实现基于KNN算法的笔迹识别功能.分享给大家供大家参考,具体如下: 需要用到: Numpy库 Pandas库 手写识别数据 点击此处本站下载. 数据说明: 数据共有785列, ...

  2. 用python手写KNN算法+kd树及其BBF优化(原理与实现)(下篇)

    用python手写KNN算法+kd树及其BBF优化(原理与实现)(下篇) 接上一篇用python手写KNN算法+kd树及其BBF优化(原理与实现)(上篇) 我们使用training2和test2两个数 ...

  3. python手机代码识别数字_python实现kNN算法识别手写体数字的示例代码

    1.总体概要 kNN算法已经在上一篇博客中说明.对于要处理手写体数字,需要处理的点主要包括: (1)图片的预处理:将png,jpg等格式的图片转换成文本数据,本博客的思想是,利用图片的rgb16进制编 ...

  4. 【Python】基于kNN算法的手写识别系统的实现与分类器测试

    基于kNN算法的手写识别系统 1.      数据准备 使用windows画图工具,手写0-9共10个数字,每个数字写20遍,共200个BMP文件. 方法如下,使用画图工具,打开网格线,调整像素为32 ...

  5. 基于python的简单KNN算法(K- Nearest Neighbor)的实现与改进

    最近在自学python的数据分析,还想稍微蹭一蹭深度学习,于是不可避免地接触到了最简单的机器学习算法--KNN算法.该方法的思路非常简单直观:如果一个样本在特征空间中的K个最相似(即特征空间中最邻近) ...

  6. Python机器学习:KNN算法08scikit-learn中的Scaler

    归一化 from sklearn import datasets import numpy as np iris = datasets.load_iris() X = iris.data y = ir ...

  7. knn算法python代码_在python中使用KNN算法处理缺失的数据

    处理缺失的数据并不是一件容易的事. 方法的范围从简单的均值插补和观察值的完全删除到像MICE这样的更高级的技术. 解决问题的挑战性是选择使用哪种方法. 今天,我们将探索一种简单但高效的填补缺失数据的方 ...

  8. python实现基于KNN算法的手写数字识别系统 非常详细!!!!

    一家懂得用细节留住客户的3年潮牌老店我必须支持!➕

  9. Python机器学习:KNN算法03训练数据集,测试数据集train test split

    示例代码 首先引入相关包 import numpy as np import matplotlib.pyplot as plt from sklearn import datasets import ...

最新文章

  1. 缓存击穿、缓存穿透、缓存雪崩
  2. 并发编程之 源码剖析 线程池 实现原理
  3. nginx rewrite中last和break的区别
  4. elegance suites bangkok info
  5. 1. CMake 系列 - 从零构建动态库和静态库
  6. JAVA Socket 底层是怎样基于TCP/IP 实现的???
  7. 浅拷贝与深拷贝的区别
  8. Dynamics版本历史演进及Dynamics 365重要功能介绍
  9. 看几个源码,自己多做项目了!
  10. SAP License:PS的进度管理流程
  11. NOIP 贪心 国王游戏
  12. android 编译api,Android逆向利器,直接将apk转换为可二次开发Android工程,提供So hook Api,......
  13. 语料库资源————(一)
  14. 【中间件技术】第一部分 概述(1) 软件构件与中间件基本概念
  15. 【比特率和波特率】bit rate VS baud rate
  16. 最优化理论与方法(袁亚湘 孙文瑜)笔记(一)
  17. 菩提心的修法-菩提心的修法
  18. 用计算机发射wifi经常很卡,电脑WiFi上网速度慢原因解决办法
  19. [转载] iOS直播相关,感觉有点用
  20. 【有感】成为一个不惑、不忧、不惧的人

热门文章

  1. 信锐-技术服务工程师一面
  2. 小白月赛 72(3/6)
  3. lingo解决6个发点8个收点的最小运输费用问题
  4. 自学方法|明确学习的出发点【可能的阶梯】
  5. JavaScript基础知识问答题(答案仅供参考)
  6. Vue CLI 3 安装、创建、配置、安装插件
  7. NYOJ-325Zb的生日
  8. 三元函数的几何图形一般是_三重积分中有哪些常见的三元函数图形
  9. 21、python复数
  10. Vue 自定义指令 解决IOS webview input 获取焦点被键盘遮挡