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登录QQ邮箱发信的实现代码
Feb 10 Python
python抓取某汽车网数据解析html存入excel示例
Dec 04 Python
python动态监控日志内容的示例
Feb 16 Python
Python使用smtplib模块发送电子邮件的流程详解
Jun 27 Python
详解python中requirements.txt的一切
Mar 03 Python
解决seaborn在pycharm中绘图不出图的问题
May 24 Python
django加载本地html的方法
May 27 Python
python实现pdf转换成word/txt纯文本文件
Jun 07 Python
基于pandas向csv添加新的行和列
May 25 Python
python实现发送带附件的邮件代码分享
Sep 22 Python
关于python pygame游戏进行声音添加的技巧
Oct 24 Python
python 闭包函数详细介绍
Apr 19 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 函数使用方法与函数定义方法
2010/05/09 PHP
解析如何用php screw加密php源代码
2013/06/20 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
2015/10/23 PHP
文本框的字数限制功能jquery插件
2009/11/24 Javascript
十分钟打造AutoComplete自动完成效果代码
2009/12/26 Javascript
JavaScript 验证码的实例代码(附效果图)
2013/03/22 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
JSON格式的键盘编码对照表
2015/01/29 Javascript
jQuery基于图层模仿五星星评价功能的方法
2015/05/07 Javascript
jQuery简单实现提交数据出现loading进度条的方法
2016/03/29 Javascript
BootStrap iCheck插件全选与获取value值的解决方法
2016/08/24 Javascript
利用Jasmine对Angular进行单元测试的方法详解
2017/06/12 Javascript
Vue中封装input组件的实例详解
2017/10/17 Javascript
简单通过settimeout看javascript的运行机制
2019/05/10 Javascript
JS数组方法push()、pop()用法实例分析
2020/01/18 Javascript
微信小程序自定义胶囊样式
2020/12/27 Javascript
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
Python爬取读者并制作成PDF
2015/03/10 Python
Python的函数的一些高阶特性
2015/04/27 Python
简单了解Python下用于监视文件系统的pyinotify包
2015/11/13 Python
Linux中安装Python的交互式解释器IPython的教程
2016/06/13 Python
浅析Git版本控制器使用
2017/12/10 Python
python如何派生内置不可变类型并修改实例化行为
2018/03/21 Python
python matplotlib 在指定的两个点之间连线方法
2018/05/25 Python
python实现抖音视频批量下载
2018/06/20 Python
python用opencv批量截取图像指定区域的方法
2019/01/24 Python
python实现全盘扫描搜索功能的方法
2019/02/14 Python
python爬虫调度器用法及实例代码
2020/11/30 Python
Omio美国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/08 全球购物
First Aid Beauty官网:FAB急救面霜
2018/05/24 全球购物
你对IPv6了解程度
2016/02/09 面试题
科技活动周标语
2014/10/08 职场文书
先进党支部事迹材料
2014/12/24 职场文书
2015年母亲节活动总结
2015/02/10 职场文书
债务纠纷代理词
2015/05/25 职场文书
python OpenCV学习笔记
2021/03/31 Python