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打开文件并获取文件相关属性的方法
Apr 23 Python
Python实现HTTP协议下的文件下载方法总结
Apr 20 Python
python Socket之客户端和服务端握手详解
Sep 18 Python
详解Django之auth模块(用户认证)
Apr 17 Python
python linecache 处理固定格式文本数据的方法
Jan 08 Python
Python3实现计算两个数组的交集算法示例
Apr 03 Python
python输出决策树图形的例子
Aug 09 Python
使用pyecharts生成Echarts网页的实例
Aug 12 Python
springboot配置文件抽离 git管理统 配置中心详解
Sep 02 Python
关于Pytorch的MNIST数据集的预处理详解
Jan 10 Python
OpenCV Python实现拼图小游戏
Mar 23 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
Jun 28 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 gzip压缩输出的实现方法
2013/04/27 PHP
微信小程序 消息推送php服务器验证实例详解
2017/03/30 PHP
PHP ADODB生成下拉列表框功能示例
2018/05/29 PHP
PHP数组array类常见操作示例
2020/05/15 PHP
win10下 php安装seaslog扩展的详细步骤
2020/12/04 PHP
基于jquery的获取mouse坐标插件的实现代码
2010/04/01 Javascript
jQuery结合Json提交数据到Webservice,并接收从Webservice返回的Json数据
2011/02/18 Javascript
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
2013/05/27 Javascript
textarea 控制输入字符字节数(示例代码)
2013/12/27 Javascript
jQuery实现判断滚动条到底部
2015/06/23 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
2015/09/14 Javascript
AngularJs  E2E Testing 详解
2016/09/02 Javascript
js中的DOM模拟购物车功能
2017/03/22 Javascript
js数据类型检测总结
2018/08/05 Javascript
JavaScript常见继承模式实例小结
2019/01/11 Javascript
关于js陀螺仪的理解分析
2019/04/11 Javascript
js实现指定时间倒计时效果
2019/08/26 Javascript
微信小程序连续签到7天积分获得功能的示例代码
2020/08/20 Javascript
Python简单计算文件夹大小的方法
2015/07/14 Python
Flask实现跨域请求的处理方法
2018/09/27 Python
Python实现Dijkstra算法
2018/10/17 Python
flask框架jinja2模板与模板继承实例分析
2019/08/01 Python
Python3如何在Windows和Linux上打包
2020/02/25 Python
详解django使用include无法跳转的解决方法
2020/03/19 Python
python实现数字炸弹游戏程序
2020/07/17 Python
如何在mac版pycharm选择python版本
2020/07/21 Python
Python使用grequests并发发送请求的示例
2020/11/05 Python
python中time.ctime()实例用法
2021/02/03 Python
html5 Canvas画图教程(10)—把面拆成线条模拟出圆角矩形
2013/01/09 HTML / CSS
国贸专业大学生职业生涯规划范文
2014/01/10 职场文书
竞选班长的演讲稿
2014/04/24 职场文书
初中优秀班集体申报材料
2014/05/01 职场文书
关于安全的广播稿
2014/10/23 职场文书
2016年小学生新年寄语
2015/08/18 职场文书
CentOS8.4安装Redis6.2.6的详细过程
2021/11/20 Redis