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 图片验证码代码
Dec 07 Python
python修改注册表终止360进程实例
Oct 13 Python
详解Python操作RabbitMQ服务器消息队列的远程结果返回
Jun 30 Python
python getopt详解及简单实例
Dec 30 Python
使用Python生成XML的方法实例
Mar 21 Python
Python制作词云的方法
Jan 03 Python
python入门前的第一课 python怎样入门
Mar 06 Python
Python帮你微信头像任意添加装饰别再@微信官方了
Sep 25 Python
python集合常见运算案例解析
Oct 17 Python
python 基于selenium实现鼠标拖拽功能
Dec 24 Python
PyTorch的Debug指南
May 07 Python
Python FuzzyWuzzy实现模糊匹配
Apr 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 抽象类的简单应用
2011/09/06 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
2016/03/21 PHP
PHP基于GD库实现的生成图片缩略图函数示例
2017/07/05 PHP
RR vs IO BO3 第二场2.13
2021/03/10 DOTA
script标签属性type与language使用选择
2012/12/02 Javascript
jquery选择器原理介绍($()使用方法)
2014/03/25 Javascript
Javascript中的getUTCHours()方法使用详解
2015/06/10 Javascript
使用AngularJS创建单页应用的编程指引
2015/06/19 Javascript
JS加载器如何动态加载外部js文件
2016/05/26 Javascript
jquery实现跳到底部,回到顶部效果的简单实例(类似锚)
2016/07/10 Javascript
jQuery实现弹出带遮罩层的居中浮动窗口效果
2016/09/12 Javascript
jQuery-mobile事件监听与用法详解
2016/11/23 Javascript
iview Upload组件多个文件上传的示例代码
2018/09/30 Javascript
vue中的适配px2rem示例代码
2018/11/19 Javascript
JavaScript this绑定过程深入详解
2018/12/07 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
2019/09/03 jQuery
python计算对角线有理函数插值的方法
2015/05/07 Python
Python实现压缩与解压gzip大文件的方法
2016/09/18 Python
从头学Python之编写可执行的.py文件
2017/11/28 Python
python如何将图片转换为字符图片
2020/08/19 Python
python处理multipart/form-data的请求方法
2018/12/26 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
动态设置django的model field的默认值操作步骤
2020/03/30 Python
CSS中几个与换行有关的属性简明总结
2014/04/15 HTML / CSS
纪伊国屋新加坡网上书店:Kinokuniya新加坡
2017/12/29 全球购物
英国最大的香水商店:The Fragrance Shop
2018/07/06 全球购物
美国儿童服装、家具和玩具精品店:Maisonette
2019/11/24 全球购物
医学专业五年以上个人求职信
2013/12/03 职场文书
创建文明学校实施方案
2014/03/11 职场文书
群众路线四风自我剖析材料
2014/10/08 职场文书
湖南省召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
老人再婚离婚协议书范本
2014/10/27 职场文书
公证书格式
2015/01/23 职场文书
酒店办公室主任岗位职责
2015/04/01 职场文书
Python OpenCV 彩色与灰度图像的转换实现
2021/06/05 Python
CSS 鼠标选中文字后改变背景色的实现代码
2023/05/21 HTML / CSS