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 生成不重复的随机数的代码
May 15 Python
Python实现 多进程导入CSV数据到 MySQL
Feb 26 Python
python之pandas用法大全
Mar 13 Python
python 编码规范整理
May 05 Python
Python使用pandas对数据进行差分运算的方法
Dec 22 Python
python实现连连看辅助(图像识别)
Mar 25 Python
如何在Django配置文件里配置session链接
Aug 06 Python
如何在mac环境中用python处理protobuf
Dec 25 Python
python 解决flask 图片在线浏览或者直接下载的问题
Jan 09 Python
PageFactory设计模式基于python实现
Apr 14 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
Aug 20 Python
python中编写函数并调用的知识点总结
Jan 13 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
Session的工作方式
2006/10/09 PHP
php查看session内容的函数
2008/08/27 PHP
使用array mutisort 实现按某字段对数据排序
2013/06/18 PHP
PHP+jQuery 注册模块开发详解
2014/10/14 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
PHP基于进程控制函数实现多线程
2020/12/09 PHP
jQuery.getScript加载同域JS的代码
2012/02/13 Javascript
用jquery写的菜单从左往右滑动出现
2014/04/11 Javascript
理解jQuery stop()方法
2014/11/21 Javascript
深入分析JSONP跨域的原理
2014/12/10 Javascript
JavaScript测试工具之Karma-Jasmine的安装和使用详解
2015/12/03 Javascript
Angular中$cacheFactory的作用和用法实例详解
2016/08/19 Javascript
Vue.js 2.0中select级联下拉框实例
2017/03/06 Javascript
bootstrap轮播图示例代码分享
2017/05/17 Javascript
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
用Vue编写抽象组件的方法
2019/05/06 Javascript
Vue 开发必须知道的36个技巧(小结)
2019/10/09 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
如何区分vue中的v-show 与 v-if
2020/09/08 Javascript
Node.JS如何实现JWT原理
2020/09/18 Javascript
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
python 截取 取出一部分的字符串方法
2017/03/01 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
2018/07/26 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
2020/05/27 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
2019/09/11 Python
Python利用Scrapy框架爬取豆瓣电影示例
2020/01/17 Python
Python如何把Spark数据写入ElasticSearch
2020/04/18 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
2020/09/14 Python
美国NBA官方商店:NBA Store
2019/04/12 全球购物
毕业生自荐书
2013/12/18 职场文书
劳动竞赛活动总结
2014/05/05 职场文书
小学生交通安全寄语
2015/02/27 职场文书
Python-OpenCV实现图像缺陷检测的实例
2021/06/11 Python
如何设置多台电脑共享打印机?多台电脑共享打印机的方法
2022/04/08 数码科技
vue项目proxyTable配置和部署服务器
2022/04/14 Vue.js
mysql 体系结构和存储引擎介绍
2022/05/06 MySQL