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实现国外赌场热门游戏Craps(双骰子)
Mar 31 Python
在Python下尝试多线程编程
Apr 28 Python
python实现聊天小程序
Mar 13 Python
python用BeautifulSoup库简单爬虫实例分析
Jul 30 Python
详解Django的model查询操作与查询性能优化
Oct 16 Python
Django认证系统user对象实现过程解析
Mar 02 Python
python 读取二进制 显示图片案例
Apr 24 Python
Python 绘制可视化折线图
Jul 22 Python
Python ellipsis 的用法详解
Nov 20 Python
解决PDF 转图片时丢文字的一种可能方式
Mar 04 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
Mar 04 Python
如何使用Python实现一个简易的ORM模型
May 12 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
php获取网页中图片、DIV内容的简单方法
2014/06/19 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
PHP7 echo和print语句实例用法
2019/02/15 PHP
不用AJAX和IFRAME,说说真正意义上的ASP+JS无刷新技术
2008/09/25 Javascript
基于jquery的气泡提示效果
2010/05/31 Javascript
js post方式传递提交的实现代码
2010/05/31 Javascript
JQuery 拾色器插件发布-jquery.icolor.js
2010/10/20 Javascript
jquery动画1.加载指示器
2012/08/24 Javascript
父元素与子iframe相互获取变量和元素对象的具体实现
2013/10/15 Javascript
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
2014/09/17 Javascript
JavaScript中判断整字类型最简洁的实现方法
2014/11/08 Javascript
深入理解JavaScript系列(43):设计模式之状态模式详解
2015/03/04 Javascript
浅析JavaScript访问对象属性和方法及区别
2015/11/16 Javascript
jQuery实现横向带缓冲的水平运动效果(附demo源码下载)
2016/01/29 Javascript
AngularJS学习笔记之依赖注入详解
2016/05/16 Javascript
jQuery EasyUI编辑DataGrid用combobox实现多级联动
2016/08/29 Javascript
jQuery判断是否存在滚动条的简单方法
2016/09/17 Javascript
Bootstarp基本模版学习教程
2017/02/01 Javascript
Bootstrap table表格简单操作
2017/02/07 Javascript
JS奇技之利用scroll来监听resize详解
2017/06/15 Javascript
详解Vuejs2.0 如何利用proxyTable实现跨域请求
2017/08/03 Javascript
JavaScript执行环境及作用域链实例分析
2018/08/01 Javascript
让python json encode datetime类型
2010/12/28 Python
Python安装lz4-0.10.1遇到的坑
2018/05/20 Python
解决每次打开pycharm直接进入项目的问题
2018/10/28 Python
Python3实现腾讯云OCR识别
2018/11/27 Python
python监测当前联网状态并连接的实例
2018/12/18 Python
python、Matlab求定积分的实现
2019/11/20 Python
Python使用pyenv实现多环境管理
2021/02/05 Python
加拿大最大的体育用品、鞋类和服装零售商:Sport Chek
2018/11/29 全球购物
小学语文教研活动总结
2014/07/01 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
个人借款协议书范本
2014/11/17 职场文书
幼儿园小班个人总结
2015/02/12 职场文书
个人学习总结范文
2015/02/15 职场文书
Vue项目中如何封装axios(统一管理http请求)
2021/05/02 Vue.js