python使用KNN算法手写体识别


Posted in Python onFebruary 01, 2018

本文实例为大家分享了用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中条件选择和循环语句使用方法介绍
Mar 13 Python
跟老齐学Python之有容乃大的list(2)
Sep 15 Python
Python自定义scrapy中间模块避免重复采集的方法
Apr 07 Python
在Python中使用全局日志时需要注意的问题
May 06 Python
Python 常用 PEP8 编码规范详解
Jan 22 Python
Python数据结构之栈、队列的实现代码分享
Dec 04 Python
python实现数据写入excel表格
Mar 25 Python
详解将Python程序(.py)转换为Windows可执行文件(.exe)
Jul 19 Python
tensorflow 获取checkpoint中的变量列表实例
Feb 11 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
Apr 20 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
Jun 02 Python
Python requests上传文件实现步骤
Sep 15 Python
python @property的用法及含义全面解析
Feb 01 #Python
详解Tensorflow数据读取有三种方式(next_batch)
Feb 01 #Python
Python3 XML 获取雅虎天气的实现方法
Feb 01 #Python
Python命令行解析模块详解
Feb 01 #Python
python2.7到3.x迁移指南
Feb 01 #Python
Python Paramiko模块的使用实际案例
Feb 01 #Python
python中使用xlrd读excel使用xlwt写excel的实例代码
Jan 31 #Python
You might like
点评山进PR-D3L三波段收音机
2021/03/02 无线电
php 日期时间处理函数小结
2009/12/18 PHP
PHP函数之日期时间函数date()使用详解
2013/09/09 PHP
使用ltrace工具跟踪PHP库函数调用的方法
2016/04/25 PHP
PHP CURL post数据报错 failed creating formpost data
2016/10/16 PHP
Javascript base64编码实现代码
2011/12/02 Javascript
jquery $.getJSON()跨域请求
2011/12/21 Javascript
js加入收藏以及使用Jquery更改透明度
2014/01/26 Javascript
js操纵dom生成下拉列表框的方法
2014/02/24 Javascript
javascript作用域问题实例分析
2015/07/13 Javascript
BootStrap 附加导航组件
2016/07/22 Javascript
深入理解requestAnimationFrame的动画循环
2016/09/20 Javascript
关于微信上网页图片点击全屏放大效果
2016/12/19 Javascript
vue 下列表侧滑操作实例代码详解
2018/07/24 Javascript
bootstrap模态框关闭后清除模态框的数据方法
2018/08/10 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
2018/08/30 Javascript
在Vue组件中获取全局的点击事件方法
2018/09/06 Javascript
小程序如何获取多个formId实现详解
2019/09/20 Javascript
JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析
2020/02/12 Javascript
JavaScript, select标签元素左右移动功能实现
2020/05/14 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
[02:47]DOTA2英雄基础教程 野性怒吼兽王
2013/12/05 DOTA
使用Python中的cookielib模拟登录网站
2015/04/09 Python
用Python写王者荣耀刷金币脚本
2017/12/21 Python
django框架创建应用操作示例
2019/09/26 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
python新手学习可变和不可变对象
2020/06/11 Python
利用CSS的Sass预处理器(框架)来制作居中效果
2016/03/10 HTML / CSS
玩具反斗城天猫官方旗舰店:享誉全球的玩具店
2017/10/10 全球购物
最新远光软件笔试题面试题内容
2013/11/08 面试题
简述DNS进行域名解析的过程
2013/12/02 面试题
舞蹈教师自荐信
2014/01/27 职场文书
计算机专业自荐信范文
2015/03/26 职场文书
幼儿园园长工作总结2015
2015/05/25 职场文书
MySQL批量更新不同表中的数据
2022/05/11 MySQL
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript